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 pkt->owner->alreadygone=1;
696 ast_queue_hangup(pkt->owner->owner);
697 ast_mutex_unlock(&pkt->owner->owner->lock);
699 /* If no owner, destroy now */
700 pkt->owner->needdestroy = 1;
703 /* In any case, go ahead and remove the packet */
705 cur = pkt->owner->packets;
714 prev->next = cur->next;
716 pkt->owner->packets = cur->next;
717 ast_mutex_unlock(&pkt->owner->lock);
721 ast_log(LOG_WARNING, "Weird, couldn't find packet owner!\n");
724 ast_mutex_unlock(&pkt->owner->lock);
728 /*--- __sip_reliable_xmit: transmit packet with retransmits ---*/
729 static int __sip_reliable_xmit(struct sip_pvt *p, int seqno, int resp, char *data, int len, int fatal)
732 pkt = malloc(sizeof(struct sip_pkt) + len + 1);
735 memset(pkt, 0, sizeof(struct sip_pkt));
736 memcpy(pkt->data, data, len);
737 pkt->packetlen = len;
738 pkt->next = p->packets;
742 pkt->data[len] = '\0';
744 pkt->flags |= FLAG_FATAL;
745 /* Schedule retransmission */
746 pkt->retransid = ast_sched_add(sched, DEFAULT_RETRANS, retrans_pkt, pkt);
747 pkt->next = p->packets;
749 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
750 if (!strncasecmp(pkt->data, "INVITE", 6)) {
751 /* Note this is a pending invite */
752 p->pendinginvite = seqno;
757 /*--- __sip_autodestruct: Kill a call (called by scheduler) ---*/
758 static int __sip_autodestruct(void *data)
760 struct sip_pvt *p = data;
762 ast_log(LOG_DEBUG, "Auto destroying call '%s'\n", p->callid);
763 append_history(p, "AutoDestroy", "");
765 ast_log(LOG_WARNING, "Autodestruct on call '%s' with owner in place\n", p->callid);
766 ast_queue_hangup(p->owner);
773 /*--- sip_scheddestroy: Schedule destruction of SIP call ---*/
774 static int sip_scheddestroy(struct sip_pvt *p, int ms)
777 if (sip_debug_test_pvt(p))
778 ast_verbose("Scheduling destruction of call '%s' in %d ms\n", p->callid, ms);
780 snprintf(tmp, sizeof(tmp), "%d ms", ms);
781 append_history(p, "SchedDestroy", tmp);
783 if (p->autokillid > -1)
784 ast_sched_del(sched, p->autokillid);
785 p->autokillid = ast_sched_add(sched, ms, __sip_autodestruct, p);
789 /*--- sip_cancel_destroy: Cancel destruction of SIP call ---*/
790 static int sip_cancel_destroy(struct sip_pvt *p)
792 if (p->autokillid > -1)
793 ast_sched_del(sched, p->autokillid);
794 append_history(p, "CancelDestroy", "");
799 /*--- __sip_ack: Acknowledges receipt of a packet and stops retransmission ---*/
800 static int __sip_ack(struct sip_pvt *p, int seqno, int resp, const char *msg)
802 struct sip_pkt *cur, *prev = NULL;
805 /* Just in case... */
806 if (!msg) msg = "___NEVER___";
809 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp) &&
810 ((cur->flags & FLAG_RESPONSE) ||
811 (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
812 if (!resp && (seqno == p->pendinginvite)) {
813 ast_log(LOG_DEBUG, "Acked pending invite %d\n", p->pendinginvite);
814 p->pendinginvite = 0;
817 /* this is our baby */
819 prev->next = cur->next;
821 p->packets = cur->next;
822 if (cur->retransid > -1)
823 ast_sched_del(sched, cur->retransid);
831 ast_log(LOG_DEBUG, "Stopping retransmission on '%s' of %s %d: %s\n", p->callid, resp ? "Response" : "Request", seqno, res ? "Not Found" : "Found");
835 /* Pretend to ack all packets */
836 static int __sip_pretend_ack(struct sip_pvt *p)
839 __sip_ack(p, p->packets->seqno, (p->packets->flags & FLAG_RESPONSE), p->packets->data);
844 /*--- __sip_semi_ack: Acks receipt of packet, keep it around (used for provisional responses) ---*/
845 static int __sip_semi_ack(struct sip_pvt *p, int seqno, int resp, const char *msg)
851 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp) &&
852 ((cur->flags & FLAG_RESPONSE) ||
853 (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
854 /* this is our baby */
855 if (cur->retransid > -1)
856 ast_sched_del(sched, cur->retransid);
863 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");
867 static void parse(struct sip_request *req);
868 static char *get_header(struct sip_request *req, char *name);
869 static void copy_request(struct sip_request *dst,struct sip_request *src);
871 static void parse_copy(struct sip_request *dst, struct sip_request *src)
873 memset(dst, 0, sizeof(*dst));
874 memcpy(dst->data, src->data, sizeof(dst->data));
878 /*--- send_response: Transmit response on SIP request---*/
879 static int send_response(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
882 char iabuf[INET_ADDRSTRLEN];
883 struct sip_request tmp;
885 if (sip_debug_test_pvt(p)) {
886 if (p->nat & SIP_NAT_ROUTE)
887 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));
889 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));
893 parse_copy(&tmp, req);
894 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
895 append_history(p, "TxRespRel", tmpmsg);
897 res = __sip_reliable_xmit(p, seqno, 1, req->data, req->len, (reliable > 1));
900 parse_copy(&tmp, req);
901 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
902 append_history(p, "TxResp", tmpmsg);
904 res = __sip_xmit(p, req->data, req->len);
911 /*--- send_request: Send SIP Request to the other part of the dialogue ---*/
912 static int send_request(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
915 char iabuf[INET_ADDRSTRLEN];
916 struct sip_request tmp;
918 if (sip_debug_test_pvt(p)) {
919 if (p->nat & SIP_NAT_ROUTE)
920 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));
922 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));
926 parse_copy(&tmp, req);
927 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
928 append_history(p, "TxReqRel", tmpmsg);
930 res = __sip_reliable_xmit(p, seqno, 0, req->data, req->len, (reliable > 1));
933 parse_copy(&tmp, req);
934 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
935 append_history(p, "TxReq", tmpmsg);
937 res = __sip_xmit(p, req->data, req->len);
942 /*--- url_decode: Decode SIP URL ---*/
943 static void url_decode(char *s)
951 if (sscanf(s + 1, "%2x", &tmp) == 1) {
953 s += 2; /* Will be incremented once more when we break out */
957 /* Fall through if something wasn't right with the formatting */
967 /*--- ditch_braces: Pick out text in braces from character string ---*/
968 static char *ditch_braces(char *tmp)
973 if ((q = strchr(tmp, '"')) ) {
975 if ((q = strchr(c, '"')) )
978 ast_log(LOG_WARNING, "No closing quote in '%s'\n", tmp);
982 if ((n = strchr(c, '<')) ) {
984 while(*c && *c != '>') c++;
986 ast_log(LOG_WARNING, "No closing brace in '%s'\n", tmp);
995 /*--- sip_sendtext: Send SIP MESSAGE text within a call ---*/
996 /* Called from PBX core text message functions */
997 static int sip_sendtext(struct ast_channel *ast, char *text)
999 struct sip_pvt *p = ast->pvt->pvt;
1000 int debug=sip_debug_test_pvt(p);
1003 ast_verbose("Sending text %s on %s\n", text, ast->name);
1006 if (!text || ast_strlen_zero(text))
1009 ast_verbose("Really sending text %s on %s\n", text, ast->name);
1010 transmit_message_with_text(p, text);
1014 static void realtime_update_peer(const char *peername, struct sockaddr_in *sin, const char *username, int expirey)
1018 char regseconds[20];
1023 snprintf(regseconds, sizeof(regseconds), "%ld", nowtime);
1024 ast_inet_ntoa(ipaddr, sizeof(ipaddr), sin->sin_addr);
1025 snprintf(port, sizeof(port), "%d", ntohs(sin->sin_port));
1026 ast_update_realtime("sipfriends", "name", peername, "ipaddr", ipaddr, "port", port, "regseconds", regseconds, "username", username, NULL);
1029 static void register_peer_exten(struct sip_peer *peer, int onoff)
1031 unsigned char multi[256]="";
1032 char *stringp, *ext;
1033 if (!ast_strlen_zero(regcontext)) {
1034 strncpy(multi, ast_strlen_zero(peer->regexten) ? peer->name : peer->regexten, sizeof(multi) - 1);
1036 while((ext = strsep(&stringp, "&"))) {
1038 ast_add_extension(regcontext, 1, ext, 1, NULL, NULL, "Noop", strdup(peer->name), free, type);
1040 ast_context_remove_extension(regcontext, ext, 1, NULL);
1045 static void destroy_peer(struct sip_peer *peer)
1047 /* Delete it, it needs to disappear */
1049 sip_destroy(peer->call);
1050 if (peer->expire > -1)
1051 ast_sched_del(sched, peer->expire);
1052 if (peer->pokeexpire > -1)
1053 ast_sched_del(sched, peer->pokeexpire);
1054 register_peer_exten(peer, 0);
1055 ast_free_ha(peer->ha);
1059 /*--- update_peer: Update peer data in database (if used) ---*/
1060 static void update_peer(struct sip_peer *p, int expiry)
1063 realtime_update_peer(p->name, &p->addr, p->username, expiry);
1066 static struct sip_peer *build_peer(const char *name, struct ast_variable *v, int temponly);
1068 static struct sip_peer *realtime_peer(const char *peername, struct sockaddr_in *sin)
1070 struct ast_variable *var, *tmp=NULL;
1072 struct sip_peer *peer=NULL;
1073 time_t nowtime, regseconds;
1077 ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr);
1079 var = ast_load_realtime("sipfriends", "name", peername, NULL);
1081 var = ast_load_realtime("sipfriends", "ipaddr", iabuf, NULL);
1083 /* Make sure it's not a user only... */
1084 peer = build_peer(peername, var, 1);
1086 /* Add some finishing touches, addresses, etc */
1090 if (!strcasecmp(tmp->name, "type")) {
1091 if (strcasecmp(tmp->value, "friend") &&
1092 strcasecmp(tmp->value, "peer")) {
1093 /* Whoops, we weren't supposed to exist! */
1098 } else if (!strcasecmp(tmp->name, "regseconds")) {
1099 if (sscanf(tmp->value, "%li", ®seconds) != 1)
1101 } else if (!strcasecmp(tmp->name, "ipaddr")) {
1102 inet_aton(tmp->value, &(peer->addr.sin_addr));
1103 } else if (!strcasecmp(tmp->name, "port")) {
1104 peer->addr.sin_port = htons(atoi(tmp->value));
1105 } else if (!strcasecmp(tmp->name, "host")) {
1106 if (!strcasecmp(tmp->value, "dynamic"))
1111 if (peer && dynamic) {
1113 if ((nowtime - regseconds) > 0) {
1114 memset(&peer->addr, 0, sizeof(peer->addr));
1116 ast_log(LOG_DEBUG, "Bah, we're expired (%ld/%ld/%ld)!\n", nowtime - regseconds, regseconds, nowtime);
1120 ast_destroy_realtime(var);
1125 /*--- find_peer: Locate peer by name or ip address */
1126 static struct sip_peer *find_peer(const char *peer, struct sockaddr_in *sin)
1128 struct sip_peer *p = NULL;
1132 /* Find by peer name */
1134 if (!strcasecmp(p->name, peer)) {
1143 if (!inaddrcmp(&p->addr, sin) ||
1145 (p->addr.sin_addr.s_addr == sin->sin_addr.s_addr))) {
1153 p = realtime_peer(peer, sin);
1159 static void destroy_user(struct sip_user *user)
1161 ast_free_ha(user->ha);
1163 ast_destroy_realtime(user->vars);
1169 static struct sip_user *build_user(const char *name, struct ast_variable *v);
1170 static struct sip_user *realtime_user(const char *username)
1172 struct ast_variable *var;
1173 struct ast_variable *tmp;
1174 struct sip_user *user=NULL;
1175 var = ast_load_realtime("sipfriends", "name", username, NULL);
1177 /* Make sure it's not a user only... */
1178 user = build_user(username, var);
1180 /* Add some finishing touches, addresses, etc */
1184 if (!strcasecmp(tmp->name, "type")) {
1185 if (strcasecmp(tmp->value, "friend") &&
1186 strcasecmp(tmp->value, "user")) {
1187 /* Whoops, we weren't supposed to exist! */
1196 ast_destroy_realtime(var);
1201 /*--- find_user: Locate user by name */
1202 static struct sip_user *find_user(char *name)
1204 struct sip_user *u = NULL;
1208 if (!strcasecmp(u->name, name)) {
1214 u = realtime_user(name);
1219 /*--- create_addr: create address structure from peer definition ---*/
1220 /* Or, if peer not found, find it in the global DNS */
1221 /* returns TRUE on failure, FALSE on success */
1222 static int create_addr(struct sip_pvt *r, char *opeer)
1225 struct ast_hostent ahp;
1231 char host[256], *hostn;
1234 strncpy(peer, opeer, sizeof(peer) - 1);
1235 port = strchr(peer, ':');
1240 r->sa.sin_family = AF_INET;
1241 ast_mutex_lock(&peerl.lock);
1242 p = find_peer(peer, NULL);
1246 r->capability = p->capability;
1249 ast_log(LOG_DEBUG, "Setting NAT on RTP to %d\n", (r->nat & SIP_NAT_ROUTE));
1250 ast_rtp_setnat(r->rtp, (r->nat & SIP_NAT_ROUTE));
1253 ast_log(LOG_DEBUG, "Setting NAT on VRTP to %d\n", (r->nat & SIP_NAT_ROUTE));
1254 ast_rtp_setnat(r->vrtp, (r->nat & SIP_NAT_ROUTE));
1256 strncpy(r->peername, p->username, sizeof(r->peername)-1);
1257 strncpy(r->authname, p->username, sizeof(r->authname)-1);
1258 strncpy(r->peersecret, p->secret, sizeof(r->peersecret)-1);
1259 strncpy(r->peermd5secret, p->md5secret, sizeof(r->peermd5secret)-1);
1260 strncpy(r->username, p->username, sizeof(r->username)-1);
1261 strncpy(r->tohost, p->tohost, sizeof(r->tohost)-1);
1262 strncpy(r->fullcontact, p->fullcontact, sizeof(r->fullcontact)-1);
1263 if (!r->initreq.headers && !ast_strlen_zero(p->fromdomain)) {
1264 if ((callhost = strchr(r->callid, '@'))) {
1265 strncpy(callhost + 1, p->fromdomain, sizeof(r->callid) - (callhost - r->callid) - 2);
1268 if (ast_strlen_zero(r->tohost)) {
1269 if (p->addr.sin_addr.s_addr)
1270 ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->addr.sin_addr);
1272 ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->defaddr.sin_addr);
1274 if (!ast_strlen_zero(p->fromdomain))
1275 strncpy(r->fromdomain, p->fromdomain, sizeof(r->fromdomain)-1);
1276 if (!ast_strlen_zero(p->fromuser))
1277 strncpy(r->fromuser, p->fromuser, sizeof(r->fromuser)-1);
1278 r->insecure = p->insecure;
1279 r->canreinvite = p->canreinvite;
1280 r->maxtime = p->maxms;
1281 r->callgroup = p->callgroup;
1282 r->pickupgroup = p->pickupgroup;
1284 r->dtmfmode = p->dtmfmode;
1285 if (r->dtmfmode & SIP_DTMF_RFC2833)
1286 r->noncodeccapability |= AST_RTP_DTMF;
1288 r->noncodeccapability &= ~AST_RTP_DTMF;
1290 r->promiscredir = p->promiscredir;
1291 strncpy(r->context, p->context,sizeof(r->context)-1);
1292 if ((p->addr.sin_addr.s_addr || p->defaddr.sin_addr.s_addr) &&
1293 (!p->maxms || ((p->lastms >= 0) && (p->lastms <= p->maxms)))) {
1294 if (p->addr.sin_addr.s_addr) {
1295 r->sa.sin_addr = p->addr.sin_addr;
1296 r->sa.sin_port = p->addr.sin_port;
1298 r->sa.sin_addr = p->defaddr.sin_addr;
1299 r->sa.sin_port = p->defaddr.sin_port;
1301 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1309 ast_mutex_unlock(&peerl.lock);
1313 portno = atoi(port);
1315 portno = DEFAULT_SIP_PORT;
1320 snprintf(service, sizeof(service), "_sip._udp.%s", peer);
1321 ret = ast_get_srv(NULL, host, sizeof(host), &tportno, service);
1327 hp = ast_gethostbyname(hostn, &ahp);
1329 strncpy(r->tohost, peer, sizeof(r->tohost) - 1);
1330 memcpy(&r->sa.sin_addr, hp->h_addr, sizeof(r->sa.sin_addr));
1331 r->sa.sin_port = htons(portno);
1332 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1335 ast_log(LOG_WARNING, "No such host: %s\n", peer);
1348 /*--- auto_congest: Scheduled congestion on a call ---*/
1349 static int auto_congest(void *nothing)
1351 struct sip_pvt *p = nothing;
1352 ast_mutex_lock(&p->lock);
1355 if (!ast_mutex_trylock(&p->owner->lock)) {
1356 ast_log(LOG_NOTICE, "Auto-congesting %s\n", p->owner->name);
1357 ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
1358 ast_mutex_unlock(&p->owner->lock);
1361 ast_mutex_unlock(&p->lock);
1365 /*--- sip_prefs_free: Free codec list in preference structure ---*/
1366 static void sip_prefs_free(void)
1368 struct sip_codec_pref *cur, *next;
1378 /*--- sip_pref_remove: Remove codec from pref list ---*/
1379 static void sip_pref_remove(int format)
1381 struct sip_codec_pref *cur, *prev=NULL;
1384 if (cur->codec == format) {
1386 prev->next = cur->next;
1397 /*--- sip_pref_append: Append codec to list ---*/
1398 static int sip_pref_append(int format)
1400 struct sip_codec_pref *cur, *tmp;
1401 sip_pref_remove(format);
1402 tmp = (struct sip_codec_pref *)malloc(sizeof(struct sip_codec_pref));
1405 memset(tmp, 0, sizeof(struct sip_codec_pref));
1406 tmp->codec = format;
1417 /*--- sip_codec_choose: Pick a codec ---*/
1418 static int sip_codec_choose(int formats)
1420 struct sip_codec_pref *cur;
1421 formats &= ((AST_FORMAT_MAX_AUDIO << 1) - 1);
1424 if (formats & cur->codec)
1428 return ast_best_codec(formats);
1431 /*--- sip_call: Initiate SIP call from PBX ---*/
1432 /* used from the dial() application */
1433 static int sip_call(struct ast_channel *ast, char *dest, int timeout)
1437 char *vxml_url = NULL;
1438 char *distinctive_ring = NULL;
1439 char *osptoken = NULL;
1441 char *osphandle = NULL;
1443 struct varshead *headp;
1444 struct ast_var_t *current;
1447 if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) {
1448 ast_log(LOG_WARNING, "sip_call called on %s, neither down nor reserved\n", ast->name);
1451 /* Check whether there is vxml_url, distinctive ring variables */
1453 headp=&ast->varshead;
1454 AST_LIST_TRAVERSE(headp,current,entries) {
1455 /* Check whether there is a VXML_URL variable */
1456 if (!vxml_url && !strcasecmp(ast_var_name(current),"VXML_URL")) {
1457 vxml_url = ast_var_value(current);
1458 } else if (!distinctive_ring && !strcasecmp(ast_var_name(current),"ALERT_INFO")) {
1459 /* Check whether there is a ALERT_INFO variable */
1460 distinctive_ring = ast_var_value(current);
1463 else if (!osptoken && !strcasecmp(ast_var_name(current), "OSPTOKEN")) {
1464 osptoken = ast_var_value(current);
1465 } else if (!osphandle && !strcasecmp(ast_var_name(current), "OSPHANDLE")) {
1466 osphandle = ast_var_value(current);
1474 if (!osptoken || !osphandle || (sscanf(osphandle, "%i", &p->osphandle) != 1)) {
1475 /* Force Disable OSP support */
1481 ast_log(LOG_DEBUG, "Outgoing Call for %s\n", p->username);
1482 res = update_user_counter(p,INC_OUT_USE);
1484 p->callingpres = ast->cid.cid_pres;
1485 p->jointcapability = p->capability;
1486 transmit_invite(p, "INVITE", 1, NULL, NULL, vxml_url,distinctive_ring, osptoken, 1);
1488 /* Initialize auto-congest time */
1489 p->initid = ast_sched_add(sched, p->maxtime * 4, auto_congest, p);
1495 /*--- __sip_destroy: Execute destrucion of call structure, release memory---*/
1496 static void __sip_destroy(struct sip_pvt *p, int lockowner)
1498 struct sip_pvt *cur, *prev = NULL;
1500 struct sip_history *hist;
1502 if (sip_debug_test_pvt(p))
1503 ast_verbose("Destroying call '%s'\n", p->callid);
1504 if (p->stateid > -1)
1505 ast_extension_state_del(p->stateid, NULL);
1507 ast_sched_del(sched, p->initid);
1508 if (p->autokillid > -1)
1509 ast_sched_del(sched, p->autokillid);
1512 ast_rtp_destroy(p->rtp);
1515 ast_rtp_destroy(p->vrtp);
1518 free_old_route(p->route);
1522 /* Carefully unlink from registry */
1523 struct sip_registry *reg;
1524 ast_mutex_lock(®l.lock);
1525 reg = regl.registrations;
1527 if ((reg == p->registry) && (p->registry->call == p))
1528 p->registry->call=NULL;
1531 ast_mutex_unlock(®l.lock);
1533 /* Unlink us from the owner if we have one */
1536 ast_mutex_lock(&p->owner->lock);
1537 ast_log(LOG_DEBUG, "Detaching from %s\n", p->owner->name);
1538 p->owner->pvt->pvt = NULL;
1540 ast_mutex_unlock(&p->owner->lock);
1545 p->history = p->history->next;
1552 prev->next = cur->next;
1561 ast_log(LOG_WARNING, "%p is not in list?!?! \n", cur);
1564 ast_sched_del(sched, p->initid);
1565 while((cp = p->packets)) {
1566 p->packets = p->packets->next;
1567 if (cp->retransid > -1)
1568 ast_sched_del(sched, cp->retransid);
1571 ast_mutex_destroy(&p->lock);
1573 ast_destroy_realtime(p->vars);
1580 /*--- update_user_counter: Handle incominglimit and outgoinglimit for SIP users ---*/
1581 /* Note: This is going to be replaced by app_groupcount */
1582 static int update_user_counter(struct sip_pvt *fup, int event)
1584 char name[256] = "";
1586 strncpy(name, fup->username, sizeof(name) - 1);
1587 ast_mutex_lock(&userl.lock);
1588 u = find_user(name);
1590 ast_log(LOG_DEBUG, "%s is not a local user\n", name);
1591 ast_mutex_unlock(&userl.lock);
1595 /* incoming and outgoing affects the inUse counter */
1598 if ( u->inUse > 0 ) {
1606 if (u->incominglimit > 0 ) {
1607 if (u->inUse >= u->incominglimit) {
1608 ast_log(LOG_ERROR, "Call from user '%s' rejected due to usage limit of %d\n", u->name, u->incominglimit);
1609 /* inc inUse as well */
1610 if ( event == INC_OUT_USE ) {
1613 ast_mutex_unlock(&userl.lock);
1621 ast_log(LOG_DEBUG, "Call from user '%s' is %d out of %d\n", u->name, u->inUse, u->incominglimit);
1623 /* we don't use these anymore
1625 if ( u->outUse > 0 ) {
1632 if ( u->outgoinglimit > 0 ) {
1633 if ( u->outUse >= u->outgoinglimit ) {
1634 ast_log(LOG_ERROR, "Outgoing call from user '%s' rejected due to usage limit of %d\n", u->name, u->outgoinglimit);
1635 ast_mutex_unlock(&userl.lock);
1646 ast_log(LOG_ERROR, "update_user_counter(%s,%d) called with no event!\n",u->name,event);
1648 ast_mutex_unlock(&userl.lock);
1655 /*--- sip_destroy: Destroy SIP call structure ---*/
1656 static void sip_destroy(struct sip_pvt *p)
1658 ast_mutex_lock(&iflock);
1659 __sip_destroy(p, 1);
1660 ast_mutex_unlock(&iflock);
1664 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal);
1666 static int hangup_sip2cause(int cause)
1668 /* Possible values from causes.h
1669 AST_CAUSE_NOTDEFINED AST_CAUSE_NORMAL AST_CAUSE_BUSY
1670 AST_CAUSE_FAILURE AST_CAUSE_CONGESTION AST_CAUSE_UNALLOCATED
1674 case 404: /* Not found */
1675 return AST_CAUSE_UNALLOCATED;
1676 case 483: /* Too many hops */
1677 return AST_CAUSE_FAILURE;
1679 return AST_CAUSE_BUSY;
1681 return AST_CAUSE_NORMAL;
1687 static char *hangup_cause2sip(int cause)
1691 case AST_CAUSE_FAILURE:
1692 return "500 Server internal failure";
1693 case AST_CAUSE_CONGESTION:
1694 return "503 Service Unavailable";
1695 case AST_CAUSE_BUSY:
1704 /*--- sip_hangup: Hangup SIP call */
1705 static int sip_hangup(struct ast_channel *ast)
1707 struct sip_pvt *p = ast->pvt->pvt;
1709 int needdestroy = 0;
1711 ast_log(LOG_DEBUG, "sip_hangup(%s)\n", ast->name);
1712 if (!ast->pvt->pvt) {
1713 ast_log(LOG_DEBUG, "Asked to hangup channel not connected\n");
1716 ast_mutex_lock(&p->lock);
1718 if ((p->osphandle > -1) && (ast->_state == AST_STATE_UP)) {
1719 ast_osp_terminate(p->osphandle, AST_CAUSE_NORMAL, p->ospstart, time(NULL) - p->ospstart);
1722 if ( p->outgoing ) {
1723 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement outUse counter\n", p->username);
1724 update_user_counter(p, DEC_OUT_USE);
1726 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement inUse counter\n", p->username);
1727 update_user_counter(p, DEC_IN_USE);
1729 /* Determine how to disconnect */
1730 if (p->owner != ast) {
1731 ast_log(LOG_WARNING, "Huh? We aren't the owner?\n");
1732 ast_mutex_unlock(&p->lock);
1735 if (!ast || (ast->_state != AST_STATE_UP))
1740 ast_dsp_free(p->vad);
1743 ast->pvt->pvt = NULL;
1745 ast_mutex_lock(&usecnt_lock);
1747 ast_mutex_unlock(&usecnt_lock);
1748 ast_update_use_count();
1751 /* Start the process if it's not already started */
1752 if (!p->alreadygone && !ast_strlen_zero(p->initreq.data)) {
1755 transmit_request_with_auth(p, "CANCEL", p->ocseq, 1, 0);
1756 /* Actually don't destroy us yet, wait for the 487 on our original
1757 INVITE, but do set an autodestruct just in case we never get it. */
1759 sip_scheddestroy(p, 15000);
1760 if ( p->initid != -1 ) {
1761 /* channel still up - reverse dec of inUse counter
1762 only if the channel is not auto-congested */
1763 if ( p->outgoing ) {
1764 update_user_counter(p, INC_OUT_USE);
1767 update_user_counter(p, INC_IN_USE);
1772 if (ast->hangupcause && ((res = hangup_cause2sip(ast->hangupcause)))) {
1773 transmit_response_reliable(p, res, &p->initreq, 1);
1775 transmit_response_reliable(p, "403 Forbidden", &p->initreq, 1);
1778 if (!p->pendinginvite) {
1780 transmit_request_with_auth(p, "BYE", 0, 1, 1);
1782 /* Note we will need a BYE when this all settles out
1783 but we can't send one while we have "INVITE" outstanding. */
1785 p->needreinvite = 0;
1789 p->needdestroy = needdestroy;
1790 ast_mutex_unlock(&p->lock);
1794 /*--- sip_answer: Answer SIP call , send 200 OK on Invite */
1795 static int sip_answer(struct ast_channel *ast)
1799 struct sip_pvt *p = ast->pvt->pvt;
1801 ast_mutex_lock(&p->lock);
1802 if (ast->_state != AST_STATE_UP) {
1807 codec=pbx_builtin_getvar_helper(p->owner,"SIP_CODEC");
1809 fmt=ast_getformatbyname(codec);
1811 ast_log(LOG_NOTICE, "Changing codec to '%s' for this call because of ${SIP_CODEC) variable\n",codec);
1812 if (p->jointcapability & fmt) {
1813 p->jointcapability &= fmt;
1814 p->capability &= fmt;
1816 ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because it is not shared by both ends.\n");
1817 } else ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because of unrecognized/not configured codec (check allow/disallow in sip.conf): %s\n",codec);
1820 ast_setstate(ast, AST_STATE_UP);
1822 ast_log(LOG_DEBUG, "sip_answer(%s)\n", ast->name);
1823 res = transmit_response_with_sdp(p, "200 OK", &p->initreq, 1);
1825 ast_mutex_unlock(&p->lock);
1829 /*--- sip_write: Send response, support audio media ---*/
1830 static int sip_write(struct ast_channel *ast, struct ast_frame *frame)
1832 struct sip_pvt *p = ast->pvt->pvt;
1834 if (frame->frametype == AST_FRAME_VOICE) {
1835 if (!(frame->subclass & ast->nativeformats)) {
1836 ast_log(LOG_WARNING, "Asked to transmit frame type %d, while native formats is %d (read/write = %d/%d)\n",
1837 frame->subclass, ast->nativeformats, ast->readformat, ast->writeformat);
1841 ast_mutex_lock(&p->lock);
1843 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1844 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1847 res = ast_rtp_write(p->rtp, frame);
1849 ast_mutex_unlock(&p->lock);
1851 } else if (frame->frametype == AST_FRAME_VIDEO) {
1853 ast_mutex_lock(&p->lock);
1855 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1856 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1859 res = ast_rtp_write(p->vrtp, frame);
1861 ast_mutex_unlock(&p->lock);
1863 } else if (frame->frametype == AST_FRAME_IMAGE) {
1866 ast_log(LOG_WARNING, "Can't send %d type frames with SIP write\n", frame->frametype);
1873 /*--- sip_fixup: Fix up a channel: If a channel is consumed, this is called.
1874 Basically update any ->owner links ----*/
1875 static int sip_fixup(struct ast_channel *oldchan, struct ast_channel *newchan)
1877 struct sip_pvt *p = newchan->pvt->pvt;
1878 ast_mutex_lock(&p->lock);
1879 if (p->owner != oldchan) {
1880 ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, p->owner);
1881 ast_mutex_unlock(&p->lock);
1885 ast_mutex_unlock(&p->lock);
1889 /*--- sip_senddigit: Send DTMF character on SIP channel */
1890 /* within one call, we're able to transmit in many methods simultaneously */
1891 static int sip_senddigit(struct ast_channel *ast, char digit)
1893 struct sip_pvt *p = ast->pvt->pvt;
1894 if (p && (p->dtmfmode & SIP_DTMF_INFO)) {
1895 transmit_info_with_digit(p, digit);
1897 if (p && p->rtp && (p->dtmfmode & SIP_DTMF_RFC2833)) {
1898 ast_rtp_senddigit(p->rtp, digit);
1900 /* If in-band DTMF is desired, send that */
1901 if (p->dtmfmode & SIP_DTMF_INBAND)
1907 /*--- sip_transfer: Transfer SIP call */
1908 static int sip_transfer(struct ast_channel *ast, char *dest)
1910 struct sip_pvt *p = ast->pvt->pvt;
1912 res = transmit_refer(p, dest);
1916 /*--- sip_indicate: Play indication to user */
1917 /* With SIP a lot of indications is sent as messages, letting the device play
1918 the indication - busy signal, congestion etc */
1919 static int sip_indicate(struct ast_channel *ast, int condition)
1921 struct sip_pvt *p = ast->pvt->pvt;
1923 case AST_CONTROL_RINGING:
1924 if (ast->_state == AST_STATE_RING) {
1925 if (!p->progress || !p->progressinband) {
1926 /* Send 180 ringing if out-of-band seems reasonable */
1927 transmit_response(p, "180 Ringing", &p->initreq);
1929 if (p->progressinband < 2)
1932 /* Well, if it's not reasonable, just send in-band */
1936 case AST_CONTROL_BUSY:
1937 if (ast->_state != AST_STATE_UP) {
1938 transmit_response(p, "486 Busy Here", &p->initreq);
1940 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1944 case AST_CONTROL_CONGESTION:
1945 if (ast->_state != AST_STATE_UP) {
1946 transmit_response(p, "503 Service Unavailable", &p->initreq);
1948 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1952 case AST_CONTROL_PROGRESS:
1953 case AST_CONTROL_PROCEEDING:
1954 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1955 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1963 ast_log(LOG_WARNING, "Don't know how to indicate condition %d\n", condition);
1971 /*--- sip_new: Initiate a call in the SIP channel */
1972 /* called from sip_request_call (calls from the pbx ) */
1973 static struct ast_channel *sip_new(struct sip_pvt *i, int state, char *title)
1975 struct ast_channel *tmp;
1976 struct ast_variable *v = NULL;
1979 ast_mutex_unlock(&i->lock);
1980 /* Don't hold a sip pvt lock while we allocate a channel */
1981 tmp = ast_channel_alloc(1);
1982 ast_mutex_lock(&i->lock);
1984 /* Select our native format based on codec preference until we receive
1985 something from another device to the contrary. */
1986 if (i->jointcapability)
1987 tmp->nativeformats = sip_codec_choose(i->jointcapability);
1988 else if (i->capability)
1989 tmp->nativeformats = sip_codec_choose(i->capability);
1991 tmp->nativeformats = sip_codec_choose(global_capability);
1992 fmt = ast_best_codec(tmp->nativeformats);
1994 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%04x", title, rand() & 0xffff);
1996 if (strchr(i->fromdomain,':'))
1998 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", strchr(i->fromdomain,':')+1, (int)(long)(i));
2002 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", i->fromdomain, (int)(long)(i));
2005 if (i->dtmfmode & SIP_DTMF_INBAND) {
2006 i->vad = ast_dsp_new();
2007 ast_dsp_set_features(i->vad, DSP_FEATURE_DTMF_DETECT);
2009 ast_dsp_digitmode(i->vad, DSP_DIGITMODE_DTMF | DSP_DIGITMODE_RELAXDTMF);
2011 tmp->fds[0] = ast_rtp_fd(i->rtp);
2012 tmp->fds[1] = ast_rtcp_fd(i->rtp);
2014 tmp->fds[2] = ast_rtp_fd(i->vrtp);
2015 tmp->fds[3] = ast_rtcp_fd(i->vrtp);
2017 if (state == AST_STATE_RING)
2019 tmp->adsicpe = AST_ADSI_UNAVAILABLE;
2020 tmp->writeformat = fmt;
2021 tmp->pvt->rawwriteformat = fmt;
2022 tmp->readformat = fmt;
2023 tmp->pvt->rawreadformat = fmt;
2025 tmp->pvt->send_text = sip_sendtext;
2026 tmp->pvt->call = sip_call;
2027 tmp->pvt->hangup = sip_hangup;
2028 tmp->pvt->answer = sip_answer;
2029 tmp->pvt->read = sip_read;
2030 tmp->pvt->write = sip_write;
2031 tmp->pvt->write_video = sip_write;
2032 tmp->pvt->indicate = sip_indicate;
2033 tmp->pvt->transfer = sip_transfer;
2034 tmp->pvt->fixup = sip_fixup;
2035 tmp->pvt->send_digit = sip_senddigit;
2037 tmp->pvt->bridge = ast_rtp_bridge;
2039 tmp->callgroup = i->callgroup;
2040 tmp->pickupgroup = i->pickupgroup;
2041 tmp->cid.cid_pres = i->callingpres;
2042 if (!ast_strlen_zero(i->accountcode))
2043 strncpy(tmp->accountcode, i->accountcode, sizeof(tmp->accountcode)-1);
2045 tmp->amaflags = i->amaflags;
2046 if (!ast_strlen_zero(i->language))
2047 strncpy(tmp->language, i->language, sizeof(tmp->language)-1);
2048 if (!ast_strlen_zero(i->musicclass))
2049 strncpy(tmp->musicclass, i->musicclass, sizeof(tmp->musicclass)-1);
2051 ast_mutex_lock(&usecnt_lock);
2053 ast_mutex_unlock(&usecnt_lock);
2054 strncpy(tmp->context, i->context, sizeof(tmp->context)-1);
2055 strncpy(tmp->exten, i->exten, sizeof(tmp->exten)-1);
2056 if (!ast_strlen_zero(i->cid_num))
2057 tmp->cid.cid_num = strdup(i->cid_num);
2058 if (!ast_strlen_zero(i->cid_name))
2059 tmp->cid.cid_name = strdup(i->cid_name);
2060 if (!ast_strlen_zero(i->rdnis))
2061 tmp->cid.cid_rdnis = strdup(i->rdnis);
2062 if (!ast_strlen_zero(i->exten) && strcmp(i->exten, "s"))
2063 tmp->cid.cid_dnid = strdup(i->exten);
2065 if (!ast_strlen_zero(i->domain)) {
2066 pbx_builtin_setvar_helper(tmp, "SIPDOMAIN", i->domain);
2068 if (!ast_strlen_zero(i->useragent)) {
2069 pbx_builtin_setvar_helper(tmp, "SIPUSERAGENT", i->useragent);
2071 if (!ast_strlen_zero(i->callid)) {
2072 pbx_builtin_setvar_helper(tmp, "SIPCALLID", i->callid);
2074 ast_setstate(tmp, state);
2075 if (state != AST_STATE_DOWN) {
2076 if (ast_pbx_start(tmp)) {
2077 ast_log(LOG_WARNING, "Unable to start PBX on %s\n", tmp->name);
2082 for (v = i->vars ; v ; v = v->next)
2083 pbx_builtin_setvar_helper(tmp,v->name,v->value);
2085 ast_log(LOG_WARNING, "Unable to allocate channel structure\n");
2089 static struct cfalias {
2093 { "Content-Type", "c" },
2094 { "Content-Encoding", "e" },
2098 { "Content-Length", "l" },
2101 { "Supported", "k" },
2102 { "Refer-To", "r" },
2103 { "Allow-Events", "u" },
2108 /*--- get_sdp_by_line: Reads one line of SIP message body */
2109 static char* get_sdp_by_line(char* line, char *name, int nameLen) {
2110 if (strncasecmp(line, name, nameLen) == 0 && line[nameLen] == '=') {
2111 char* r = line + nameLen + 1;
2112 while (*r && (*r < 33)) ++r;
2119 /*--- get_sdp: Gets all kind of SIP message bodies, including SDP,
2120 but the name wrongly applies _only_ sdp */
2121 static char *get_sdp(struct sip_request *req, char *name) {
2123 int len = strlen(name);
2126 for (x=0; x<req->lines; x++) {
2127 r = get_sdp_by_line(req->line[x], name, len);
2128 if (r[0] != '\0') return r;
2134 static void sdpLineNum_iterator_init(int* iterator) {
2138 static char* get_sdp_iterate(int* iterator,
2139 struct sip_request *req, char *name) {
2140 int len = strlen(name);
2142 while (*iterator < req->lines) {
2143 r = get_sdp_by_line(req->line[(*iterator)++], name, len);
2144 if (r[0] != '\0') return r;
2149 static char *__get_header(struct sip_request *req, char *name, int *start)
2152 int len = strlen(name);
2154 if (pedanticsipchecking) {
2155 /* Technically you can place arbitrary whitespace both before and after the ':' in
2156 a header, although RFC3261 clearly says you shouldn't before, and place just
2157 one afterwards. If you shouldn't do it, what absolute idiot decided it was
2158 a good idea to say you can do it, and if you can do it, why in the hell would
2159 you say you shouldn't. */
2160 for (x=*start;x<req->headers;x++) {
2161 if (!strncasecmp(req->header[x], name, len)) {
2162 r = req->header[x] + len;
2163 while(*r && (*r < 33))
2167 while(*r && (*r < 33))
2175 /* We probably shouldn't even bother counting whitespace afterwards but
2176 I guess for backwards compatibility we will */
2177 for (x=*start;x<req->headers;x++) {
2178 if (!strncasecmp(req->header[x], name, len) &&
2179 (req->header[x][len] == ':')) {
2180 r = req->header[x] + len + 1;
2181 while(*r && (*r < 33))
2189 for (x=0;x<sizeof(aliases) / sizeof(aliases[0]); x++)
2190 if (!strcasecmp(aliases[x].fullname, name))
2191 return __get_header(req, aliases[x].shortname, start);
2193 /* Don't return NULL, so get_header is always a valid pointer */
2197 /*--- get_header: Get header from SIP request ---*/
2198 static char *get_header(struct sip_request *req, char *name)
2201 return __get_header(req, name, &start);
2204 /*--- sip_rtp_read: Read RTP from network ---*/
2205 static struct ast_frame *sip_rtp_read(struct ast_channel *ast, struct sip_pvt *p)
2207 /* Retrieve audio/etc from channel. Assumes p->lock is already held. */
2208 struct ast_frame *f;
2209 static struct ast_frame null_frame = { AST_FRAME_NULL, };
2212 f = ast_rtp_read(p->rtp); /* RTP Audio */
2215 f = ast_rtcp_read(p->rtp); /* RTCP Control Channel */
2218 f = ast_rtp_read(p->vrtp); /* RTP Video */
2221 f = ast_rtcp_read(p->vrtp); /* RTCP Control Channel for video */
2226 /* Don't send RFC2833 if we're not supposed to */
2227 if (f && (f->frametype == AST_FRAME_DTMF) && !(p->dtmfmode & SIP_DTMF_RFC2833))
2230 /* We already hold the channel lock */
2231 if (f->frametype == AST_FRAME_VOICE) {
2232 if (f->subclass != p->owner->nativeformats) {
2233 ast_log(LOG_DEBUG, "Oooh, format changed to %d\n", f->subclass);
2234 p->owner->nativeformats = f->subclass;
2235 ast_set_read_format(p->owner, p->owner->readformat);
2236 ast_set_write_format(p->owner, p->owner->writeformat);
2238 if ((p->dtmfmode & SIP_DTMF_INBAND) && p->vad) {
2239 f = ast_dsp_process(p->owner,p->vad,f);
2240 if (f && (f->frametype == AST_FRAME_DTMF))
2241 ast_log(LOG_DEBUG, "Detected DTMF '%c'\n", f->subclass);
2248 /*--- sip_read: Read SIP RTP from channel */
2249 static struct ast_frame *sip_read(struct ast_channel *ast)
2251 struct ast_frame *fr;
2252 struct sip_pvt *p = ast->pvt->pvt;
2253 ast_mutex_lock(&p->lock);
2254 fr = sip_rtp_read(ast, p);
2255 time(&p->lastrtprx);
2256 ast_mutex_unlock(&p->lock);
2260 /*--- build_callid: Build SIP CALLID header ---*/
2261 static void build_callid(char *callid, int len, struct in_addr ourip, char *fromdomain)
2266 char iabuf[INET_ADDRSTRLEN];
2269 res = snprintf(callid, len, "%08x", val);
2273 if (!ast_strlen_zero(fromdomain))
2274 snprintf(callid, len, "@%s", fromdomain);
2276 /* It's not important that we really use our right IP here... */
2277 snprintf(callid, len, "@%s", ast_inet_ntoa(iabuf, sizeof(iabuf), ourip));
2280 /*--- sip_alloc: Allocate SIP_PVT structure and set defaults ---*/
2281 static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useglobal_nat)
2284 char iabuf[INET_ADDRSTRLEN];
2286 p = malloc(sizeof(struct sip_pvt));
2289 /* Keep track of stuff */
2290 memset(p, 0, sizeof(struct sip_pvt));
2291 ast_mutex_init(&p->lock);
2299 memcpy(&p->sa, sin, sizeof(p->sa));
2300 if (ast_sip_ouraddrfor(&p->sa.sin_addr,&p->ourip))
2301 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2303 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2305 p->rtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2307 p->vrtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2311 /* Start with 101 instead of 1 */
2314 ast_log(LOG_WARNING, "Unable to create RTP session: %s\n", strerror(errno));
2315 ast_mutex_destroy(&p->lock);
2317 ast_destroy_realtime(p->vars);
2323 ast_rtp_settos(p->rtp, tos);
2325 ast_rtp_settos(p->vrtp, tos);
2326 if (useglobal_nat && sin) {
2327 /* Setup NAT structure according to global settings if we have an address */
2328 p->nat = global_nat;
2329 memcpy(&p->recv, sin, sizeof(p->recv));
2330 ast_rtp_setnat(p->rtp, (p->nat & SIP_NAT_ROUTE));
2332 ast_rtp_setnat(p->vrtp, (p->nat & SIP_NAT_ROUTE));
2335 strncpy(p->fromdomain, default_fromdomain, sizeof(p->fromdomain) - 1);
2336 /* z9hG4bK is a magic cookie. See RFC 3261 section 8.1.1.7 */
2337 if (p->nat != SIP_NAT_NEVER)
2338 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);
2340 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);
2342 build_callid(p->callid, sizeof(p->callid), p->ourip, p->fromdomain);
2344 strncpy(p->callid, callid, sizeof(p->callid) - 1);
2345 /* Assume reinvite OK and via INVITE */
2346 p->canreinvite = global_canreinvite;
2347 /* Assign default music on hold class */
2348 strncpy(p->musicclass, global_musicclass, sizeof(p->musicclass) - 1);
2349 p->dtmfmode = global_dtmfmode;
2350 p->promiscredir = global_promiscredir;
2351 p->trustrpid = global_trustrpid;
2352 p->progressinband = global_progressinband;
2354 p->ospauth = global_ospauth;
2356 p->rtptimeout = global_rtptimeout;
2357 p->rtpholdtimeout = global_rtpholdtimeout;
2358 p->capability = global_capability;
2359 if (p->dtmfmode & SIP_DTMF_RFC2833)
2360 p->noncodeccapability |= AST_RTP_DTMF;
2361 strncpy(p->context, default_context, sizeof(p->context) - 1);
2363 ast_mutex_lock(&iflock);
2366 ast_mutex_unlock(&iflock);
2368 ast_log(LOG_DEBUG, "Allocating new SIP call for %s\n", callid);
2372 /*--- find_call: Connect incoming SIP message to current call or create new call structure */
2373 /* Called by handle_request ,sipsock_read */
2374 static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *sin)
2379 char iabuf[INET_ADDRSTRLEN];
2383 callid = get_header(req, "Call-ID");
2385 if (pedanticsipchecking) {
2386 /* In principle Call-ID's uniquely identify a call, however some vendors
2387 (i.e. Pingtel) send multiple calls with the same Call-ID and different
2388 tags in order to simplify billing. The RFC does state that we have to
2389 compare tags in addition to the call-id, but this generate substantially
2390 more overhead which is totally unnecessary for the vast majority of sane
2391 SIP implementations, and thus Asterisk does not enable this behavior
2392 by default. Short version: You'll need this option to support conferencing
2394 strncpy(tmp, req->header[0], sizeof(tmp) - 1);
2396 c = strchr(tmp, ' ');
2399 if (!strcasecmp(cmd, "SIP/2.0"))
2400 strncpy(tmp, get_header(req, "To"), sizeof(tmp) - 1);
2402 strncpy(tmp, get_header(req, "From"), sizeof(tmp) - 1);
2403 tag = strstr(tmp, "tag=");
2406 c = strchr(tag, ';');
2413 if (ast_strlen_zero(callid)) {
2414 ast_log(LOG_WARNING, "Call missing call ID from '%s'\n", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr));
2417 ast_mutex_lock(&iflock);
2420 if (!strcmp(p->callid, callid) &&
2421 (!pedanticsipchecking || !tag || ast_strlen_zero(p->theirtag) || !strcmp(p->theirtag, tag))) {
2422 /* Found the call */
2423 ast_mutex_lock(&p->lock);
2424 ast_mutex_unlock(&iflock);
2429 ast_mutex_unlock(&iflock);
2430 p = sip_alloc(callid, sin, 1);
2432 ast_mutex_lock(&p->lock);
2436 /*--- sip_register: Parse register=> line in sip.conf and add to registry */
2437 static int sip_register(char *value, int lineno)
2439 struct sip_registry *reg;
2440 char copy[256] = "";
2441 char *username=NULL, *hostname=NULL, *secret=NULL, *authuser=NULL;
2448 strncpy(copy, value, sizeof(copy)-1);
2451 hostname = strrchr(stringp, '@');
2456 if (!username || ast_strlen_zero(username) || !hostname || ast_strlen_zero(hostname)) {
2457 ast_log(LOG_WARNING, "Format for registration is user[:secret[:authuser]]@host[:port][/contact] at line %d", lineno);
2461 username = strsep(&stringp, ":");
2463 secret = strsep(&stringp, ":");
2465 authuser = strsep(&stringp, ":");
2468 hostname = strsep(&stringp, "/");
2470 contact = strsep(&stringp, "/");
2471 if (!contact || ast_strlen_zero(contact))
2474 hostname = strsep(&stringp, ":");
2475 porta = strsep(&stringp, ":");
2477 if (porta && !atoi(porta)) {
2478 ast_log(LOG_WARNING, "%s is not a valid port number at line %d\n", porta, lineno);
2481 reg = malloc(sizeof(struct sip_registry));
2483 memset(reg, 0, sizeof(struct sip_registry));
2484 strncpy(reg->contact, contact, sizeof(reg->contact) - 1);
2486 strncpy(reg->username, username, sizeof(reg->username)-1);
2488 strncpy(reg->hostname, hostname, sizeof(reg->hostname)-1);
2490 strncpy(reg->authuser, authuser, sizeof(reg->authuser)-1);
2492 strncpy(reg->secret, secret, sizeof(reg->secret)-1);
2495 reg->refresh = default_expiry;
2496 reg->portno = porta ? atoi(porta) : 0;
2497 reg->callid_valid = 0;
2499 ast_mutex_lock(®l.lock);
2500 reg->next = regl.registrations;
2501 regl.registrations = reg;
2502 ast_mutex_unlock(®l.lock);
2504 ast_log(LOG_ERROR, "Out of memory\n");
2510 /*--- lws2sws: Parse multiline SIP headers into one header */
2511 /* This is enabled if pedanticsipchecking is enabled */
2512 static int lws2sws(char *msgbuf, int len)
2518 /* Eliminate all CRs */
2519 if (msgbuf[h] == '\r') {
2523 /* Check for end-of-line */
2524 if (msgbuf[h] == '\n') {
2525 /* Check for end-of-message */
2528 /* Check for a continuation line */
2529 if (msgbuf[h + 1] == ' ' || msgbuf[h + 1] == '\t') {
2530 /* Merge continuation line */
2534 /* Propagate LF and start new line */
2535 msgbuf[t++] = msgbuf[h++];
2539 if (msgbuf[h] == ' ' || msgbuf[h] == '\t') {
2544 msgbuf[t++] = msgbuf[h++];
2548 msgbuf[t++] = msgbuf[h++];
2556 /*--- parse: Parse a SIP message ----*/
2557 static void parse(struct sip_request *req)
2559 /* Divide fields by NULL's */
2564 /* First header starts immediately */
2568 /* We've got a new header */
2572 printf("Header: %s (%d)\n", req->header[f], strlen(req->header[f]));
2574 if (ast_strlen_zero(req->header[f])) {
2575 /* Line by itself means we're now in content */
2579 if (f >= SIP_MAX_HEADERS - 1) {
2580 ast_log(LOG_WARNING, "Too many SIP headers...\n");
2583 req->header[f] = c + 1;
2584 } else if (*c == '\r') {
2585 /* Ignore but eliminate \r's */
2590 /* Check for last header */
2591 if (!ast_strlen_zero(req->header[f]))
2594 /* Now we process any mime content */
2599 /* We've got a new line */
2602 printf("Line: %s (%d)\n", req->line[f], strlen(req->line[f]));
2604 if (f >= SIP_MAX_LINES - 1) {
2605 ast_log(LOG_WARNING, "Too many SDP lines...\n");
2608 req->line[f] = c + 1;
2609 } else if (*c == '\r') {
2610 /* Ignore and eliminate \r's */
2615 /* Check for last line */
2616 if (!ast_strlen_zero(req->line[f]))
2620 ast_log(LOG_WARNING, "Odd content, extra stuff left over ('%s')\n", c);
2623 /*--- process_sdp: Process SIP SDP ---*/
2624 static int process_sdp(struct sip_pvt *p, struct sip_request *req)
2630 char iabuf[INET_ADDRSTRLEN];
2634 int peercapability, peernoncodeccapability;
2635 int vpeercapability=0, vpeernoncodeccapability=0;
2636 struct sockaddr_in sin;
2639 struct ast_hostent ahp;
2644 int debug=sip_debug_test_pvt(p);
2646 /* Update our last rtprx when we receive an SDP, too */
2647 time(&p->lastrtprx);
2649 /* Get codec and RTP info from SDP */
2650 if (strcasecmp(get_header(req, "Content-Type"), "application/sdp")) {
2651 ast_log(LOG_NOTICE, "Content is '%s', not 'application/sdp'\n", get_header(req, "Content-Type"));
2654 m = get_sdp(req, "m");
2655 c = get_sdp(req, "c");
2656 if (ast_strlen_zero(m) || ast_strlen_zero(c)) {
2657 ast_log(LOG_WARNING, "Insufficient information for SDP (m = '%s', c = '%s')\n", m, c);
2660 if (sscanf(c, "IN IP4 %256s", host) != 1) {
2661 ast_log(LOG_WARNING, "Invalid host in c= line, '%s'\n", c);
2664 /* XXX This could block for a long time, and block the main thread! XXX */
2665 hp = ast_gethostbyname(host, &ahp);
2667 ast_log(LOG_WARNING, "Unable to lookup host in c= line, '%s'\n", c);
2670 sdpLineNum_iterator_init(&iterator);
2672 while ((m = get_sdp_iterate(&iterator, req, "m"))[0] != '\0') {
2673 if ((sscanf(m, "audio %d RTP/AVP %n", &x, &len) == 1) ||
2674 (sscanf(m, "audio %d/%d RTP/AVP %n", &x, &y, &len) == 2)) {
2676 /* Scan through the RTP payload types specified in a "m=" line: */
2677 ast_rtp_pt_clear(p->rtp);
2679 while(!ast_strlen_zero(codecs)) {
2680 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2681 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2685 ast_verbose("Found RTP audio format %d\n", codec);
2686 ast_rtp_set_m_type(p->rtp, codec);
2688 /* Skip over any whitespace */
2689 while(*codecs && (*codecs < 33)) codecs++;
2693 ast_rtp_pt_clear(p->vrtp); /* Must be cleared in case no m=video line exists */
2695 if (p->vrtp && (sscanf(m, "video %d RTP/AVP %n", &x, &len) == 1)) {
2698 /* Scan through the RTP payload types specified in a "m=" line: */
2700 while(!ast_strlen_zero(codecs)) {
2701 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2702 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2706 ast_verbose("Found video format %s\n", ast_getformatname(codec));
2707 ast_rtp_set_m_type(p->vrtp, codec);
2709 /* Skip over any whitespace */
2710 while(*codecs && (*codecs < 33)) codecs++;
2715 /* RTP addresses and ports for audio and video */
2716 sin.sin_family = AF_INET;
2717 memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
2719 /* Setup audio port number */
2720 sin.sin_port = htons(portno);
2721 if (p->rtp && sin.sin_port) {
2722 ast_rtp_set_peer(p->rtp, &sin);
2724 ast_verbose("Peer audio RTP is at port %s:%d\n", ast_inet_ntoa(iabuf,sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2725 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));
2728 /* Setup video port number */
2729 sin.sin_port = htons(vportno);
2730 if (p->vrtp && sin.sin_port) {
2731 ast_rtp_set_peer(p->vrtp, &sin);
2733 ast_verbose("Peer video RTP is at port %s:%d\n", ast_inet_ntoa(iabuf,sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2734 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));
2738 /* Next, scan through each "a=rtpmap:" line, noting each
2739 * specified RTP payload type (with corresponding MIME subtype):
2741 sdpLineNum_iterator_init(&iterator);
2742 while ((a = get_sdp_iterate(&iterator, req, "a"))[0] != '\0') {
2743 char* mimeSubtype = ast_strdupa(a); /* ensures we have enough space */
2744 if (!strcasecmp(a, "sendonly")) {
2748 if (!strcasecmp(a, "sendrecv")) {
2751 if (sscanf(a, "rtpmap: %u %[^/]/", &codec, mimeSubtype) != 2) continue;
2753 ast_verbose("Found description format %s\n", mimeSubtype);
2754 /* Note: should really look at the 'freq' and '#chans' params too */
2755 ast_rtp_set_rtpmap_type(p->rtp, codec, "audio", mimeSubtype);
2757 ast_rtp_set_rtpmap_type(p->vrtp, codec, "video", mimeSubtype);
2760 /* Now gather all of the codecs that were asked for: */
2761 ast_rtp_get_current_formats(p->rtp,
2762 &peercapability, &peernoncodeccapability);
2764 ast_rtp_get_current_formats(p->vrtp,
2765 &vpeercapability, &vpeernoncodeccapability);
2766 p->jointcapability = p->capability & (peercapability | vpeercapability);
2767 p->peercapability = (peercapability | vpeercapability);
2768 p->noncodeccapability = noncodeccapability & peernoncodeccapability;
2771 const unsigned slen=80;
2772 char s1[slen], s2[slen], s3[slen], s4[slen];
2774 ast_verbose("Capabilities: us - %s, peer - audio=%s/video=%s, combined - %s\n",
2775 ast_getformatname_multiple(s1, slen, p->capability),
2776 ast_getformatname_multiple(s2, slen, peercapability),
2777 ast_getformatname_multiple(s3, slen, vpeercapability),
2778 ast_getformatname_multiple(s4, slen, p->jointcapability));
2780 ast_verbose("Non-codec capabilities: us - %s, peer - %s, combined - %s\n",
2781 ast_getformatname_multiple(s1, slen, noncodeccapability),
2782 ast_getformatname_multiple(s2, slen, peernoncodeccapability),
2783 ast_getformatname_multiple(s3, slen, p->noncodeccapability));
2785 if (!p->jointcapability) {
2786 ast_log(LOG_WARNING, "No compatible codecs!\n");
2790 if (!(p->owner->nativeformats & p->jointcapability)) {
2791 const unsigned slen=80;
2792 char s1[slen], s2[slen];
2793 ast_log(LOG_DEBUG, "Oooh, we need to change our formats since our peer supports only %s and not %s\n",
2794 ast_getformatname_multiple(s1, slen, p->jointcapability),
2795 ast_getformatname_multiple(s2, slen, p->owner->nativeformats));
2796 p->owner->nativeformats = sip_codec_choose(p->jointcapability);
2797 ast_set_read_format(p->owner, p->owner->readformat);
2798 ast_set_write_format(p->owner, p->owner->writeformat);
2800 if (ast_bridged_channel(p->owner)) {
2801 /* Turn on/off music on hold if we are holding/unholding */
2802 if (sin.sin_addr.s_addr && !sendonly) {
2803 ast_moh_stop(ast_bridged_channel(p->owner));
2805 ast_moh_start(ast_bridged_channel(p->owner), NULL);
2813 /*--- add_header: Add header to SIP message */
2814 static int add_header(struct sip_request *req, char *var, char *value)
2816 if (req->len >= sizeof(req->data) - 4) {
2817 ast_log(LOG_WARNING, "Out of space, can't add anymore (%s:%s)\n", var, value);
2821 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2824 req->header[req->headers] = req->data + req->len;
2825 snprintf(req->header[req->headers], sizeof(req->data) - req->len - 4, "%s: %s\r\n", var, value);
2826 req->len += strlen(req->header[req->headers]);
2827 if (req->headers < SIP_MAX_HEADERS)
2830 ast_log(LOG_WARNING, "Out of header space\n");
2836 /*--- add_blank_header: Add blank header to SIP message */
2837 static int add_blank_header(struct sip_request *req)
2839 if (req->len >= sizeof(req->data) - 4) {
2840 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2844 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2847 req->header[req->headers] = req->data + req->len;
2848 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "\r\n");
2849 req->len += strlen(req->header[req->headers]);
2850 if (req->headers < SIP_MAX_HEADERS)
2853 ast_log(LOG_WARNING, "Out of header space\n");
2859 /*--- add_line: Add content (not header) to SIP message */
2860 static int add_line(struct sip_request *req, char *line)
2862 if (req->len >= sizeof(req->data) - 4) {
2863 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2867 /* Add extra empty return */
2868 snprintf(req->data + req->len, sizeof(req->data) - req->len, "\r\n");
2869 req->len += strlen(req->data + req->len);
2871 req->line[req->lines] = req->data + req->len;
2872 snprintf(req->line[req->lines], sizeof(req->data) - req->len, "%s", line);
2873 req->len += strlen(req->line[req->lines]);
2874 if (req->lines < SIP_MAX_LINES)
2877 ast_log(LOG_WARNING, "Out of line space\n");
2883 /*--- copy_header: Copy one header field from one request to another */
2884 static int copy_header(struct sip_request *req, struct sip_request *orig, char *field)
2887 tmp = get_header(orig, field);
2888 if (!ast_strlen_zero(tmp)) {
2889 /* Add what we're responding to */
2890 return add_header(req, field, tmp);
2892 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2896 /*--- copy_all_header: Copy all headers from one request to another ---*/
2897 static int copy_all_header(struct sip_request *req, struct sip_request *orig, char *field)
2903 tmp = __get_header(orig, field, &start);
2904 if (!ast_strlen_zero(tmp)) {
2905 /* Add what we're responding to */
2906 add_header(req, field, tmp);
2911 return copied ? 0 : -1;
2914 /*--- copy_via_headers: Copy SIP VIA Headers from one request to another ---*/
2915 static int copy_via_headers(struct sip_pvt *p, struct sip_request *req, struct sip_request *orig, char *field)
2917 char tmp[256]="", *oh, *end;
2921 char iabuf[INET_ADDRSTRLEN];
2923 oh = __get_header(orig, field, &start);
2924 if (!ast_strlen_zero(oh)) {
2926 strncpy(tmp, oh, sizeof(tmp) - 1);
2927 oh = strstr(tmp, ";rport");
2929 end = strchr(oh + 1, ';');
2931 memmove(oh, end, strlen(end) + 1);
2935 if (!copied && (p->nat == SIP_NAT_ALWAYS)) {
2936 /* Whoo hoo! Now we can indicate port address translation too! Just
2937 another RFC (RFC3581). I'll leave the original comments in for
2939 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));
2940 add_header(req, field, new);
2942 /* Add what we're responding to */
2943 add_header(req, field, tmp);
2950 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2956 /*--- add_route: Add route header into request per learned route ---*/
2957 static void add_route(struct sip_request *req, struct sip_route *route)
2960 int n, rem = 255; /* sizeof(r)-1: Room for terminating 0 */
2966 n = strlen(route->hop);
2967 if ((n+3)>rem) break;
2973 strncpy(p, route->hop, rem); p += n;
2976 route = route->next;
2979 add_header(req, "Route", r);
2982 /*--- set_destination: Set destination from SIP URI ---*/
2983 static void set_destination(struct sip_pvt *p, char *uri)
2985 char *h, *maddr, hostname[256] = "";
2986 char iabuf[INET_ADDRSTRLEN];
2989 struct ast_hostent ahp;
2990 int debug=sip_debug_test_pvt(p);
2992 /* Parse uri to h (host) and port - uri is already just the part inside the <> */
2993 /* general form we are expecting is sip[s]:username[:password]@host[:port][;...] */
2996 ast_verbose("set_destination: Parsing <%s> for address/port to send to\n", uri);
2998 /* Find and parse hostname */
2999 h = strchr(uri, '@');
3004 if (strncmp(h, "sip:", 4) == 0)
3006 else if (strncmp(h, "sips:", 5) == 0)
3009 hn = strcspn(h, ":;>");
3010 if (hn > (sizeof(hostname) - 1)) hn = sizeof(hostname) - 1;
3011 strncpy(hostname, h, hn); hostname[hn] = '\0'; /* safe */
3014 /* Is "port" present? if not default to 5060 */
3018 port = strtol(h, &h, 10);
3023 /* Got the hostname:port - but maybe there's a "maddr=" to override address? */
3024 maddr = strstr(h, "maddr=");
3027 hn = strspn(maddr, "0123456789.");
3028 if (hn > (sizeof(hostname) - 1)) hn = sizeof(hostname) - 1;
3029 strncpy(hostname, maddr, hn); hostname[hn] = '\0'; /* safe */
3032 hp = ast_gethostbyname(hostname, &ahp);
3034 ast_log(LOG_WARNING, "Can't find address for host '%s'\n", hostname);
3037 p->sa.sin_family = AF_INET;
3038 memcpy(&p->sa.sin_addr, hp->h_addr, sizeof(p->sa.sin_addr));
3039 p->sa.sin_port = htons(port);
3041 ast_verbose("set_destination: set destination to %s, port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr), port);
3044 /*--- init_resp: Initialize SIP response, based on SIP request ---*/
3045 static int init_resp(struct sip_request *req, char *resp, struct sip_request *orig)
3047 /* Initialize a response */
3048 if (req->headers || req->len) {
3049 ast_log(LOG_WARNING, "Request already initialized?!?\n");
3052 req->header[req->headers] = req->data + req->len;
3053 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "SIP/2.0 %s\r\n", resp);
3054 req->len += strlen(req->header[req->headers]);
3055 if (req->headers < SIP_MAX_HEADERS)
3058 ast_log(LOG_WARNING, "Out of header space\n");
3062 /*--- init_req: Initialize SIP request ---*/
3063 static int init_req(struct sip_request *req, char *resp, char *recip)
3065 /* Initialize a response */
3066 if (req->headers || req->len) {
3067 ast_log(LOG_WARNING, "Request already initialized?!?\n");
3070 req->header[req->headers] = req->data + req->len;
3071 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "%s %s SIP/2.0\r\n", resp, recip);
3072 req->len += strlen(req->header[req->headers]);
3073 if (req->headers < SIP_MAX_HEADERS)
3076 ast_log(LOG_WARNING, "Out of header space\n");
3081 static int respprep(struct sip_request *resp, struct sip_pvt *p, char *msg, struct sip_request *req)
3083 char newto[256] = "", *ot;
3085 memset(resp, 0, sizeof(*resp));
3086 init_resp(resp, msg, req);
3087 copy_via_headers(p, resp, req, "Via");
3088 if (msg[0] == '2') copy_all_header(resp, req, "Record-Route");
3089 copy_header(resp, req, "From");
3090 ot = get_header(req, "To");
3091 if (!strstr(ot, "tag=")) {
3092 /* Add the proper tag if we don't have it already. If they have specified
3093 their tag, use it. Otherwise, use our own tag */
3094 if (!ast_strlen_zero(p->theirtag) && p->outgoing)
3095 snprintf(newto, sizeof(newto), "%s;tag=%s", ot, p->theirtag);
3096 else if (p->tag && !p->outgoing)
3097 snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag);
3099 strncpy(newto, ot, sizeof(newto) - 1);
3100 newto[sizeof(newto) - 1] = '\0';
3104 add_header(resp, "To", ot);
3105 copy_header(resp, req, "Call-ID");
3106 copy_header(resp, req, "CSeq");
3107 add_header(resp, "User-Agent", default_useragent);
3108 add_header(resp, "Allow", ALLOWED_METHODS);
3110 /* For registration responses, we also need expiry and
3114 snprintf(contact, sizeof(contact), "%s;expires=%d", p->our_contact, p->expiry);
3115 snprintf(tmp, sizeof(tmp), "%d", p->expiry);
3116 add_header(resp, "Expires", tmp);
3117 add_header(resp, "Contact", contact);
3119 add_header(resp, "Contact", p->our_contact);
3124 static int reqprep(struct sip_request *req, struct sip_pvt *p, char *msg, int seqno, int newbranch)
3126 struct sip_request *orig = &p->initreq;
3127 char stripped[80] ="";
3130 char iabuf[INET_ADDRSTRLEN];
3134 memset(req, 0, sizeof(struct sip_request));
3136 snprintf(p->lastmsg, sizeof(p->lastmsg), "Tx: %s", msg);
3144 p->branch ^= rand();
3145 if (p->nat & SIP_NAT_RFC3581)
3146 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);
3147 else /* Some implementations (e.g. Uniden UIP200) can't handle rport being in the message!! */
3148 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);
3150 if (!strcasecmp(msg, "CANCEL") || !strcasecmp(msg, "ACK")) {
3151 /* MUST use original URI */
3152 c = p->initreq.rlPart2;
3153 } else if (!ast_strlen_zero(p->uri)) {
3157 strncpy(stripped, get_header(orig, "To"), sizeof(stripped) - 1);
3159 strncpy(stripped, get_header(orig, "From"), sizeof(stripped) - 1);
3161 c = strchr(stripped, '<');
3173 init_req(req, msg, c);
3175 snprintf(tmp, sizeof(tmp), "%d %s", seqno, msg);
3177 add_header(req, "Via", p->via);
3179 set_destination(p, p->route->hop);
3180 add_route(req, p->route->next);
3183 ot = get_header(orig, "To");
3184 of = get_header(orig, "From");
3186 /* Add tag *unless* this is a CANCEL, in which case we need to send it exactly
3187 as our original request, including tag (or presumably lack thereof) */
3188 if (!strstr(ot, "tag=") && strcasecmp(msg, "CANCEL")) {
3189 /* Add the proper tag if we don't have it already. If they have specified
3190 their tag, use it. Otherwise, use our own tag */
3191 if (p->outgoing && !ast_strlen_zero(p->theirtag))
3192 snprintf(newto, sizeof(newto), "%s;tag=%s", ot, p->theirtag);
3193 else if (!p->outgoing)
3194 snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag);
3196 snprintf(newto, sizeof(newto), "%s", ot);
3201 add_header(req, "From", of);
3202 add_header(req, "To", ot);
3204 add_header(req, "From", ot);
3205 add_header(req, "To", of);
3207 add_header(req, "Contact", p->our_contact);
3208 copy_header(req, orig, "Call-ID");
3209 add_header(req, "CSeq", tmp);
3211 add_header(req, "User-Agent", default_useragent);
3215 static int __transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req, int reliable)
3217 struct sip_request resp;
3219 if (reliable && (sscanf(get_header(req, "CSeq"), "%i ", &seqno) != 1)) {
3220 ast_log(LOG_WARNING, "Unable to determine sequence number from '%s'\n", get_header(req, "CSeq"));
3223 respprep(&resp, p, msg, req);
3224 add_header(&resp, "Content-Length", "0");
3225 add_blank_header(&resp);
3226 return send_response(p, &resp, reliable, seqno);
3229 /*--- transmit_response: Transmit response, no retransmits */
3230 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req)
3232 return __transmit_response(p, msg, req, 0);
3235 /*--- transmit_response: Transmit response, Make sure you get a reply */
3236 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal)
3238 return __transmit_response(p, msg, req, fatal ? 2 : 1);
3241 /*--- append_date: Append date to SIP message ---*/
3242 static void append_date(struct sip_request *req)
3249 strftime(tmpdat, sizeof(tmpdat), "%a, %d %b %Y %T GMT", &tm);
3250 add_header(req, "Date", tmpdat);
3253 /*--- transmit_response_with_date: Append date and content length before transmitting response ---*/
3254 static int transmit_response_with_date(struct sip_pvt *p, char *msg, struct sip_request *req)
3256 struct sip_request resp;
3257 respprep(&resp, p, msg, req);
3259 add_header(&resp, "Content-Length", "0");
3260 add_blank_header(&resp);
3261 return send_response(p, &resp, 0, 0);
3264 /*--- transmit_response_with_allow: Append Accept header, content length before transmitting response ---*/
3265 static int transmit_response_with_allow(struct sip_pvt *p, char *msg, struct sip_request *req, int reliable)
3267 struct sip_request resp;
3268 respprep(&resp, p, msg, req);
3269 add_header(&resp, "Accept", "application/sdp");
3270 add_header(&resp, "Content-Length", "0");
3271 add_blank_header(&resp);
3272 return send_response(p, &resp, reliable, 0);
3275 /* transmit_response_with_auth: Respond with authorization request */
3276 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *randdata, int reliable, char *header)
3278 struct sip_request resp;
3281 if (reliable && (sscanf(get_header(req, "CSeq"), "%i ", &seqno) != 1)) {
3282 ast_log(LOG_WARNING, "Unable to determine sequence number from '%s'\n", get_header(req, "CSeq"));
3285 snprintf(tmp, sizeof(tmp), "Digest realm=\"%s\", nonce=\"%s\"", global_realm, randdata);
3286 respprep(&resp, p, msg, req);
3287 add_header(&resp, header, tmp);
3288 add_header(&resp, "Content-Length", "0");
3289 add_blank_header(&resp);
3290 return send_response(p, &resp, reliable, seqno);
3293 /*--- add_text: Add text body to SIP message ---*/
3294 static int add_text(struct sip_request *req, char *text)
3296 /* XXX Convert \n's to \r\n's XXX */
3297 int len = strlen(text);
3299 snprintf(clen, sizeof(clen), "%d", len);
3300 add_header(req, "Content-Type", "text/plain");
3301 add_header(req, "Content-Length", clen);
3302 add_line(req, text);
3306 /*--- add_digit: add DTMF INFO tone to sip message ---*/
3307 /* Always adds default duration 250 ms, regardless of what came in over the line */
3308 static int add_digit(struct sip_request *req, char digit)
3313 snprintf(tmp, sizeof(tmp), "Signal=%c\r\nDuration=250\r\n", digit);
3315 snprintf(clen, sizeof(clen), "%d", len);
3316 add_header(req, "Content-Type", "application/dtmf-relay");
3317 add_header(req, "Content-Length", clen);
3322 /*--- add_sdp: Add Session Description Protocol message ---*/
3323 static int add_sdp(struct sip_request *resp, struct sip_pvt *p)
3327 int alreadysent = 0;
3329 struct sockaddr_in sin;
3330 struct sockaddr_in vsin;
3331 struct sip_codec_pref *cur;
3341 char iabuf[INET_ADDRSTRLEN];
3344 struct sockaddr_in dest;
3345 struct sockaddr_in vdest = { 0, };
3346 int debug=sip_debug_test_pvt(p);
3348 /* XXX We break with the "recommendation" and send our IP, in order that our
3349 peer doesn't have to ast_gethostbyname() us XXX */
3352 ast_log(LOG_WARNING, "No way to add SDP without an RTP structure\n");
3355 capability = p->capability;
3357 if (!p->sessionid) {
3358 p->sessionid = getpid();
3359 p->sessionversion = p->sessionid;
3361 p->sessionversion++;
3362 ast_rtp_get_us(p->rtp, &sin);
3364 ast_rtp_get_us(p->vrtp, &vsin);
3366 if (p->redirip.sin_addr.s_addr) {
3367 dest.sin_port = p->redirip.sin_port;
3368 dest.sin_addr = p->redirip.sin_addr;
3370 capability = p->redircodecs;
3372 dest.sin_addr = p->ourip;
3373 dest.sin_port = sin.sin_port;
3376 /* Determine video destination */
3378 if (p->vredirip.sin_addr.s_addr) {
3379 vdest.sin_port = p->vredirip.sin_port;
3380 vdest.sin_addr = p->vredirip.sin_addr;
3382 vdest.sin_addr = p->ourip;
3383 vdest.sin_port = vsin.sin_port;
3387 ast_verbose("We're at %s port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ntohs(sin.sin_port));
3389 ast_verbose("Video is at %s port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ntohs(vsin.sin_port));
3391 snprintf(v, sizeof(v), "v=0\r\n");
3392 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));
3393 snprintf(s, sizeof(s), "s=session\r\n");
3394 snprintf(c, sizeof(c), "c=IN IP4 %s\r\n", ast_inet_ntoa(iabuf, sizeof(iabuf), dest.sin_addr));
3395 snprintf(t, sizeof(t), "t=0 0\r\n");
3396 snprintf(m, sizeof(m), "m=audio %d RTP/AVP", ntohs(dest.sin_port));
3397 snprintf(m2, sizeof(m2), "m=video %d RTP/AVP", ntohs(vdest.sin_port));
3398 if (capability & p->prefcodec) {
3400 ast_verbose("Answering/Requesting with root capability %d\n", p->prefcodec);
3401 codec = ast_rtp_lookup_code(p->rtp, 1, p->prefcodec);
3403 snprintf(costr, sizeof(costr), " %d", codec);
3404 if (p->prefcodec <= AST_FORMAT_MAX_AUDIO) {
3405 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3406 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, p->prefcodec));
3407 strncpy(a, costr, sizeof(a) - 1);
3409 strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
3410 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, p->prefcodec));
3411 strncpy(a2, costr, sizeof(a2) - 1);
3414 alreadysent |= p->prefcodec;
3416 /* Start by sending our preferred codecs */
3419 if ((capability & cur->codec) && !(alreadysent & cur->codec)) {
3421 ast_verbose("Answering with preferred capability 0x%x(%s)\n", cur->codec, ast_getformatname(cur->codec));
3422 codec = ast_rtp_lookup_code(p->rtp, 1, cur->codec);
3424 snprintf(costr, sizeof(costr), " %d", codec);
3425 if (cur->codec <= AST_FORMAT_MAX_AUDIO) {
3426 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3427 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, cur->codec));
3428 strncat(a, costr, sizeof(a) - strlen(a) - 1);
3430 strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
3431 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, cur->codec));
3432 strncat(a2, costr, sizeof(a2) - strlen(a) - 1);
3436 alreadysent |= cur->codec;
3439 /* Now send any other common codecs, and non-codec formats: */
3440 for (x = 1; x <= ((videosupport && p->vrtp) ? AST_FORMAT_MAX_VIDEO : AST_FORMAT_MAX_AUDIO); x <<= 1) {
3441 if ((capability & x) && !(alreadysent & x)) {
3443 ast_verbose("Answering with capability 0x%x(%s)\n", x, ast_getformatname(x));
3444 codec = ast_rtp_lookup_code(p->rtp, 1, x);
3446 snprintf(costr, sizeof(costr), " %d", codec);
3447 if (x <= AST_FORMAT_MAX_AUDIO) {
3448 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3449 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, x));
3450 strncat(a, costr, sizeof(a) - strlen(a) - 1);
3452 strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
3453 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, x));
3454 strncat(a2, costr, sizeof(a2) - strlen(a2) - 1);