2 * Asterisk -- A telephony toolkit for Linux.
4 * Implementation of Session Initiation Protocol
6 * Copyright (C) 2004, Digium, Inc.
8 * Mark Spencer <markster@digium.com>
10 * This program is free software, distributed under the terms of
11 * the GNU General Public License
18 #include <asterisk/lock.h>
19 #include <asterisk/channel.h>
20 #include <asterisk/channel_pvt.h>
21 #include <asterisk/config_pvt.h>
22 #include <asterisk/config.h>
23 #include <asterisk/logger.h>
24 #include <asterisk/module.h>
25 #include <asterisk/pbx.h>
26 #include <asterisk/options.h>
27 #include <asterisk/lock.h>
28 #include <asterisk/sched.h>
29 #include <asterisk/io.h>
30 #include <asterisk/rtp.h>
31 #include <asterisk/acl.h>
32 #include <asterisk/manager.h>
33 #include <asterisk/callerid.h>
34 #include <asterisk/cli.h>
35 #include <asterisk/md5.h>
36 #include <asterisk/app.h>
37 #include <asterisk/musiconhold.h>
38 #include <asterisk/dsp.h>
39 #include <asterisk/features.h>
40 #include <asterisk/acl.h>
41 #include <asterisk/srv.h>
42 #include <asterisk/astdb.h>
43 #include <asterisk/causes.h>
44 #include <asterisk/utils.h>
45 #include <asterisk/file.h>
47 #include <asterisk/astosp.h>
49 #include <sys/socket.h>
50 #include <sys/ioctl.h>
57 #include <arpa/inet.h>
59 #include <sys/signal.h>
60 #include <netinet/in_systm.h>
61 #include <netinet/ip.h>
63 #ifndef DEFAULT_USERAGENT
64 #define DEFAULT_USERAGENT "Asterisk PBX"
67 #define VIDEO_CODEC_MASK 0x1fc0000 /* Video codecs from H.261 thru AST_FORMAT_MAX_VIDEO */
69 #define IPTOS_MINCOST 0x02
72 /* #define VOCAL_DATA_HACK */
75 #define DEFAULT_DEFAULT_EXPIRY 120
76 #define DEFAULT_MAX_EXPIRY 3600
78 /* guard limit must be larger than guard secs */
79 /* guard min must be < 1000, and should be >= 250 */
80 #define EXPIRY_GUARD_SECS 15 /* How long before expiry do we reregister */
81 #define EXPIRY_GUARD_LIMIT 30 /* Below here, we use EXPIRY_GUARD_PCT instead of
83 #define EXPIRY_GUARD_MIN 500 /* This is the minimum guard time applied. If
84 GUARD_PCT turns out to be lower than this, it
85 will use this time instead.
86 This is in milliseconds. */
87 #define EXPIRY_GUARD_PCT 0.20 /* Percentage of expires timeout to use when
88 below EXPIRY_GUARD_LIMIT */
90 static int max_expiry = DEFAULT_MAX_EXPIRY;
91 static int default_expiry = DEFAULT_DEFAULT_EXPIRY;
94 #define MAX(a,b) ((a) > (b) ? (a) : (b))
97 #define CALLERID_UNKNOWN "Unknown"
99 /* --- Choices for DTMF support in SIP channel */
100 #define SIP_DTMF_RFC2833 (1 << 0) /* RTP DTMF */
101 #define SIP_DTMF_INBAND (1 << 1) /* Inband audio, only for ULAW/ALAW */
102 #define SIP_DTMF_INFO (1 << 2) /* SIP Info messages */
105 #define DEFAULT_MAXMS 2000 /* Must be faster than 2 seconds by default */
106 #define DEFAULT_FREQ_OK 60 * 1000 /* How often to check for the host to be up */
107 #define DEFAULT_FREQ_NOTOK 10 * 1000 /* How often to check, if the host is down... */
109 #define DEFAULT_RETRANS 1000 /* How frequently to retransmit */
110 #define MAX_RETRANS 5 /* Try only 5 times for retransmissions */
113 #define DEBUG_READ 0 /* Recieved data */
114 #define DEBUG_SEND 1 /* Transmit data */
116 static char *desc = "Session Initiation Protocol (SIP)";
117 static char *channeltype = "SIP";
118 static char *tdesc = "Session Initiation Protocol (SIP)";
119 static char *config = "sip.conf";
121 #define DEFAULT_SIP_PORT 5060 /* From RFC 2543 */
122 #define SIP_MAX_PACKET 4096 /* Also from RFC 2543, should sub headers tho */
124 #define ALLOWED_METHODS "INVITE, ACK, CANCEL, OPTIONS, BYE, REFER"
126 static char default_useragent[AST_MAX_EXTENSION] = DEFAULT_USERAGENT;
128 #define DEFAULT_CONTEXT "default"
129 static char default_context[AST_MAX_EXTENSION] = DEFAULT_CONTEXT;
131 static char default_language[MAX_LANGUAGE] = "";
133 #define DEFAULT_CALLERID "asterisk"
134 static char default_callerid[AST_MAX_EXTENSION] = DEFAULT_CALLERID;
136 static char default_fromdomain[AST_MAX_EXTENSION] = "";
138 #define DEFAULT_NOTIFYMIME "application/simple-message-summary"
139 static char default_notifymime[AST_MAX_EXTENSION] = DEFAULT_NOTIFYMIME;
141 static int srvlookup = 0; /* SRV Lookup on or off. Default is off, RFC behavior is on */
143 static int pedanticsipchecking = 0; /* Extra checking ? Default off */
145 static int autocreatepeer = 0; /* Auto creation of peers at registration? Default off. */
147 static int relaxdtmf = 0;
149 static int global_rtptimeout = 0;
151 static int global_rtpholdtimeout = 0;
153 static int global_trustrpid = 0; /* Trust RPID headers? Default off. */
155 static int global_progressinband = 0;
158 static int global_ospauth = 0; /* OSP = Open Settlement Protocol */
161 #define DEFAULT_MWITIME 10
162 static int global_mwitime = DEFAULT_MWITIME; /* Time between MWI checks for peers */
164 static int usecnt =0;
165 AST_MUTEX_DEFINE_STATIC(usecnt_lock);
168 /* Protect the interface list (of sip_pvt's) */
169 AST_MUTEX_DEFINE_STATIC(iflock);
171 /* Protect the monitoring thread, so only one process can kill or start it, and not
172 when it's doing something critical. */
173 AST_MUTEX_DEFINE_STATIC(netlock);
175 AST_MUTEX_DEFINE_STATIC(monlock);
177 /* This is the thread for the monitor which checks for input on the channels
178 which are not currently in use. */
179 static pthread_t monitor_thread = AST_PTHREADT_NULL;
181 static int restart_monitor(void);
183 /* Codecs that we support by default: */
184 static int global_capability = AST_FORMAT_ULAW | AST_FORMAT_ALAW | AST_FORMAT_GSM | AST_FORMAT_H263;
185 static int noncodeccapability = AST_RTP_DTMF;
187 static char ourhost[256];
188 static struct in_addr __ourip;
191 static int sipdebug = 0;
192 static struct sockaddr_in debugaddr;
196 static int videosupport = 0;
198 static int compactheaders = 0; /* send compact sip headers */
200 static int global_dtmfmode = SIP_DTMF_RFC2833; /* DTMF mode default */
201 static int recordhistory = 0; /* Record SIP history. Off by default */
202 static int global_promiscredir; /* Support of 302 REDIR - Default off */
203 static int global_usereqphone; /* User=phone support, default 0 */
205 static char global_musicclass[MAX_LANGUAGE] = ""; /* Global music on hold class */
206 static char global_realm[AST_MAX_EXTENSION] = "asterisk"; /* Default realm */
207 static char regcontext[AST_MAX_EXTENSION] = ""; /* Context for auto-extensions */
210 #define DEFAULT_EXPIRY 900
211 static int expiry = DEFAULT_EXPIRY;
213 static struct sched_context *sched;
214 static struct io_context *io;
215 /* The private structures of the sip channels are linked for
216 selecting outgoing channels */
218 #define SIP_MAX_HEADERS 64
219 #define SIP_MAX_LINES 64
223 #define DEC_OUT_USE 2
224 #define INC_OUT_USE 3
226 static struct ast_codec_pref prefs;
229 /* sip_request: The data grabbed from the UDP socket */
231 char *rlPart1; /* SIP Method Name or "SIP/2.0" protocol version */
232 char *rlPart2; /* The Request URI or Response Status */
233 int len; /* Length */
234 int headers; /* # of SIP Headers */
235 char *header[SIP_MAX_HEADERS];
236 int lines; /* SDP Content */
237 char *line[SIP_MAX_LINES];
238 char data[SIP_MAX_PACKET];
244 struct sip_route *next;
250 struct sip_history *next;
253 /* sip_pvt: PVT structures are used for each SIP conversation, ie. a call */
254 static struct sip_pvt {
255 ast_mutex_t lock; /* Channel private lock */
256 char callid[80]; /* Global CallID */
257 char randdata[80]; /* Random data */
258 struct ast_codec_pref prefs; /* codec prefs */
259 unsigned int ocseq; /* Current outgoing seqno */
260 unsigned int icseq; /* Current incoming seqno */
261 unsigned int callgroup; /* Call group */
262 unsigned int pickupgroup; /* Pickup group */
263 int lastinvite; /* Last Cseq of invite */
264 int alreadygone; /* Whether or not we've already been destroyed by or peer */
265 int needdestroy; /* if we need to be destroyed */
266 int capability; /* Special capability (codec) */
267 int novideo; /* Didn't get video in invite, don't offer */
268 int jointcapability; /* Supported capability at both ends (codecs ) */
269 int peercapability; /* Supported peer capability */
270 int prefcodec; /* Preferred codec (outbound only) */
271 int noncodeccapability;
272 int callingpres; /* Calling presentation */
273 int outgoing; /* Outgoing or incoming call? */
274 int authtries; /* Times we've tried to authenticate */
275 int insecure; /* Don't check source port/ip */
276 int expiry; /* How long we take to expire */
277 int branch; /* One random number */
278 int canreinvite; /* Do we support reinvite */
279 int ringing; /* Have sent 180 ringing */
280 int progress; /* Have sent 183 message progress */
281 int useclientcode; /* Trust X-ClientCode info message */
282 int tag; /* Another random number */
283 int nat; /* Whether to try to support NAT */
284 int sessionid; /* SDP Session ID */
285 int sessionversion; /* SDP Session Version */
286 struct sockaddr_in sa; /* Our peer */
287 struct sockaddr_in redirip; /* Where our RTP should be going if not to us */
288 struct sockaddr_in vredirip; /* Where our Video RTP should be going if not to us */
289 int redircodecs; /* Redirect codecs */
290 struct sockaddr_in recv; /* Received as */
291 struct in_addr ourip; /* Our IP */
292 struct ast_channel *owner; /* Who owns us */
293 char exten[AST_MAX_EXTENSION]; /* Extension where to start */
294 char refer_to[AST_MAX_EXTENSION]; /* Place to store REFER-TO extension */
295 char referred_by[AST_MAX_EXTENSION]; /* Place to store REFERRED-BY extension */
296 char refer_contact[AST_MAX_EXTENSION]; /* Place to store Contact info from a REFER extension */
297 struct sip_pvt *refer_call; /* Call we are referring */
298 struct sip_route *route; /* Head of linked list of routing steps (fm Record-Route) */
299 int route_persistant; /* Is this the "real" route? */
300 char from[256]; /* The From: header */
301 char useragent[256]; /* User agent in SIP request */
302 char context[AST_MAX_EXTENSION]; /* Context for this call */
303 char fromdomain[AST_MAX_EXTENSION]; /* Domain to show in the from field */
304 char fromuser[AST_MAX_EXTENSION]; /* Domain to show in the user field */
305 char tohost[AST_MAX_EXTENSION]; /* Host we should put in the "to" field */
306 char language[MAX_LANGUAGE]; /* Default language for this call */
307 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
308 char rdnis[256]; /* Referring DNIS */
309 char theirtag[256]; /* Their tag */
312 char authname[256]; /* Who we use for authentication */
313 char uri[256]; /* Original requested URI */
314 char peersecret[256]; /* Password */
315 char peermd5secret[256];
316 char cid_num[256]; /* Caller*ID */
317 char cid_name[256]; /* Caller*ID */
318 char via[256]; /* Via: header */
319 char fullcontact[128]; /* The Contact: that the UA registers with us */
320 char accountcode[20]; /* Account code */
321 char our_contact[256]; /* Our contact header */
322 char realm[256]; /* Authorization realm */
323 char nonce[256]; /* Authorization nonce */
324 char opaque[256]; /* Opaque nonsense */
325 char qop[80]; /* Quality of Protection, since SIP wasn't complicated enough yet. */
326 char domain[256]; /* Authorization nonce */
327 char lastmsg[256]; /* Last Message sent/received */
328 int amaflags; /* AMA Flags */
329 int pendinginvite; /* Any pending invite */
330 int needreinvite; /* Do we need to send another reinvite? */
331 int pendingbye; /* Need to send bye after we ack? */
332 int gotrefer; /* Got a refer? */
334 int ospauth; /* Allow OSP Authentication */
335 int osphandle; /* OSP Handle for call */
336 time_t ospstart; /* OSP Start time */
338 struct sip_request initreq; /* Initial request */
340 int maxtime; /* Max time for first response */
341 int initid; /* Auto-congest ID if appropriate */
342 int autokillid; /* Auto-kill ID */
343 time_t lastrtprx; /* Last RTP received */
344 int rtptimeout; /* RTP timeout time */
345 int rtpholdtimeout; /* RTP timeout when on hold */
347 int subscribed; /* Is this call a subscription? */
350 int promiscredir; /* Promiscuous redirection */
351 int usereqphone; /* Add user=phone to numeric URI. Default off */
353 int trustrpid; /* Trust RPID headers? */
356 int dtmfmode; /* DTMF to use for this call */
359 struct sip_peer *peerpoke; /* If this calls is to poke a peer, which one */
360 struct sip_registry *registry; /* If this is a REGISTER call, to which registry */
361 struct ast_rtp *rtp; /* RTP Session */
362 struct ast_rtp *vrtp; /* Video RTP session */
363 struct sip_pkt *packets; /* Packets scheduled for re-transmission */
364 struct sip_history *history; /* History of this SIP dialog */
365 struct ast_variable *vars;
366 struct sip_pvt *next; /* Next call in chain */
369 #define FLAG_RESPONSE (1 << 0)
370 #define FLAG_FATAL (1 << 1)
372 /* sip packet - read in sipsock_read, transmitted in send_request */
374 struct sip_pkt *next; /* Next packet */
375 int retrans; /* Retransmission number */
376 int seqno; /* Sequence number */
377 int flags; /* non-zero if this is a response packet (e.g. 200 OK) */
378 struct sip_pvt *owner; /* Owner call */
379 int retransid; /* Retransmission ID */
380 int packetlen; /* Length of packet */
384 /* Structure for SIP user data. User's place calls to us */
386 /* Users who can access various contexts */
387 char name[80]; /* The name in sip.conf */
388 char secret[80]; /* Password */
389 char md5secret[80]; /* Password in md5 */
390 char context[80]; /* Default context for incoming calls */
391 char cid_num[80]; /* Caller ID num */
392 char cid_name[80]; /* Caller ID name */
393 char accountcode[20]; /* Account code */
394 char language[MAX_LANGUAGE]; /* Default language for this user */
395 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
396 char useragent[256]; /* User agent in SIP request */
397 struct ast_codec_pref prefs; /* codec prefs */
398 unsigned int callgroup; /* Call group */
399 unsigned int pickupgroup; /* Pickup Group */
400 int nat; /* NAT setting */
401 int amaflags; /* AMA flags for billing */
402 int callingpres; /* Calling id presentation */
403 int insecure; /* Insecure means don't check password */
404 int canreinvite; /* Do we support re-invites ? */
405 int capability; /* Codec capability */
407 int ospauth; /* Allow OSP Authentication */
409 int dtmfmode; /* DTMF setting */
414 int promiscredir; /* Support of 302 redirect */
415 int useclientcode; /* SNOM clientcode support */
416 int trustrpid; /* Trust remote party ID from this UA */
418 struct ast_ha *ha; /* ACL setting */
419 int temponly; /* Flag for temporary users (realtime) */
420 struct ast_variable *vars;
421 struct sip_user *next;
424 /* Structure for SIP peer data, we place calls to peers if registred or fixed IP address (host) */
426 char name[80]; /* Peer name in sip.conf */
427 char secret[80]; /* Password */
428 char md5secret[80]; /* Password in MD5 */
429 char context[80]; /* Default context for incoming calls */
430 char username[80]; /* Temporary username until registration */
431 char tohost[80]; /* If not dynamic, IP address */
432 char regexten[AST_MAX_EXTENSION]; /* Extension to register (if regcontext is used) */
433 char fromuser[80]; /* From: user when calling this peer */
434 char fromdomain[80]; /* From: domain when calling this peer */
435 char fullcontact[128]; /* Contact registred with us (not in sip.conf) */
436 char cid_num[80]; /* Caller ID num */
437 char cid_name[80]; /* Caller ID name */
438 char mailbox[AST_MAX_EXTENSION]; /* Mailbox setting for MWI checks */
439 char language[MAX_LANGUAGE]; /* Default language for prompts */
440 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
441 char useragent[256]; /* User agent in SIP request (saved from registration) */
442 struct ast_codec_pref prefs; /* codec prefs */
444 time_t lastmsgcheck; /* Last time we checked for MWI */
445 int dynamic; /* Dynamic? Yes or no. Dynamic hosts register with us */
446 int expire; /* Registration expiration */
448 int capability; /* Codec capability */
451 int insecure; /* Do we want to authenticate this peer? */
453 int ospauth; /* Allow OSP Authentication */
455 int nat; /* NAT support needed? */
456 int canreinvite; /* Does the peer support re-invites? */
457 unsigned int callgroup; /* Call group */
458 unsigned int pickupgroup; /* Pickup group */
459 int promiscredir; /* Support of 302 redirect? */
460 int dtmfmode; /* DTMF mode */
461 int trustrpid; /* Trust Remote Party ID headers? */
462 int useclientcode; /* SNOM clientcode support */
464 int usereqphone; /* Add user=phone to URI. Default off */
465 struct sockaddr_in addr; /* IP address of peer */
469 struct sip_pvt *call; /* Call pointer */
470 int pokeexpire; /* When to expire poke (qualify= checking) */
471 int lastms; /* How long last response took (in ms), or -1 for no response */
472 int maxms; /* Max ms we will accept for the host to be up, 0 to not monitor */
473 struct timeval ps; /* Ping send time */
475 struct sockaddr_in defaddr; /* Default IP address, used until registration */
476 struct ast_ha *ha; /* Access control list */
481 struct sip_peer *next;
484 AST_MUTEX_DEFINE_STATIC(sip_reload_lock);
485 static int sip_reloading = 0;
487 /* States for outbound registrations (with register= lines in sip.conf */
488 #define REG_STATE_UNREGISTERED 0
489 #define REG_STATE_REGSENT 1
490 #define REG_STATE_AUTHSENT 2
491 #define REG_STATE_REGISTERED 3
492 #define REG_STATE_REJECTED 4
493 #define REG_STATE_TIMEOUT 5
494 #define REG_STATE_NOAUTH 6
497 #define SIP_NAT_NEVER 0 /* No nat support */
498 #define SIP_NAT_RFC3581 (1 << 0)
499 #define SIP_NAT_ROUTE (1 << 2)
500 #define SIP_NAT_ALWAYS (SIP_NAT_ROUTE | SIP_NAT_RFC3581)
502 /* sip_registry: Registrations with other SIP proxies */
503 struct sip_registry {
504 int portno; /* Optional port override */
505 char username[80]; /* Who we are registering as */
506 char authuser[80]; /* Who we *authenticate* as */
507 char hostname[80]; /* Domain or host we register to */
508 char secret[80]; /* Password or key name in []'s */
510 char contact[80]; /* Contact extension */
512 int expire; /* Sched ID of expiration */
513 int timeout; /* sched id of sip_reg_timeout */
514 int refresh; /* How often to refresh */
515 struct sip_pvt *call; /* create a sip_pvt structure for each outbound "registration call" in progress */
516 int regstate; /* Registration state (see above) */
517 int callid_valid; /* 0 means we haven't chosen callid for this registry yet. */
518 char callid[80]; /* Global CallID for this registry */
519 unsigned int ocseq; /* Sequence number we got to for REGISTERs for this registry */
520 struct sockaddr_in us; /* Who the server thinks we are */
521 struct sip_registry *next;
524 /*--- The user list: Users and friends ---*/
525 static struct ast_user_list {
526 struct sip_user *users;
530 /*--- The peer list: Peers and Friends ---*/
531 static struct ast_peer_list {
532 struct sip_peer *peers;
536 /*--- The register list: Other SIP proxys we register with and call ---*/
537 static struct ast_register_list {
538 struct sip_registry *registrations;
544 #define REINVITE_INVITE 1
545 #define REINVITE_UPDATE 2
547 static int __sip_do_register(struct sip_registry *r);
549 static int sipsock = -1;
550 static int global_nat = SIP_NAT_RFC3581;
551 static int global_canreinvite = REINVITE_INVITE;
554 static struct sockaddr_in bindaddr;
555 static struct sockaddr_in externip;
556 static struct ast_ha *localaddr;
558 static struct ast_frame *sip_read(struct ast_channel *ast);
559 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req);
560 static int transmit_response_with_sdp(struct sip_pvt *p, char *msg, struct sip_request *req, int retrans);
561 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *rand, int reliable, char *header);
562 static int transmit_request(struct sip_pvt *p, char *msg, int inc, int reliable, int newbranch);
563 static int transmit_request_with_auth(struct sip_pvt *p, char *msg, int inc, int reliable, int newbranch);
564 static int transmit_invite(struct sip_pvt *p, char *msg, int sendsdp, char *auth, char *authheader, char *vxml_url, char *distinctive_ring, char *osptoken, int addsipheaders, int init);
565 static int transmit_reinvite_with_sdp(struct sip_pvt *p);
566 static int transmit_info_with_digit(struct sip_pvt *p, char digit);
567 static int transmit_message_with_text(struct sip_pvt *p, char *text);
568 static int transmit_refer(struct sip_pvt *p, char *dest);
569 static struct sip_peer *temp_peer(char *name);
570 static int do_proxy_auth(struct sip_pvt *p, struct sip_request *req, char *header, char *respheader, char *msg, int init);
571 static void free_old_route(struct sip_route *route);
572 static int build_reply_digest(struct sip_pvt *p, char *orig_header, char *digest, int digest_len);
573 static int update_user_counter(struct sip_pvt *fup, int event);
574 static void prune_peers(void);
575 static int sip_do_reload(void);
578 /*--- sip_debug_test_addr: See if we pass debug IP filter */
579 static inline int sip_debug_test_addr(struct sockaddr_in *addr)
583 if (debugaddr.sin_addr.s_addr) {
584 if (((ntohs(debugaddr.sin_port) != 0)
585 && (debugaddr.sin_port != addr->sin_port))
586 || (debugaddr.sin_addr.s_addr != addr->sin_addr.s_addr))
592 static inline int sip_debug_test_pvt(struct sip_pvt *p)
596 return sip_debug_test_addr(((p->nat & SIP_NAT_ROUTE) ? &p->recv : &p->sa));
600 /*--- __sip_xmit: Transmit SIP message ---*/
601 static int __sip_xmit(struct sip_pvt *p, char *data, int len)
604 char iabuf[INET_ADDRSTRLEN];
605 if (p->nat & SIP_NAT_ROUTE)
606 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->recv, sizeof(struct sockaddr_in));
608 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->sa, sizeof(struct sockaddr_in));
610 ast_log(LOG_WARNING, "sip_xmit of %p (len %d) to %s returned %d: %s\n", data, len, ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr), res, strerror(errno));
615 static void sip_destroy(struct sip_pvt *p);
617 /*--- ast_sip_ouraddrfor: NAT fix - decide which IP address to use for ASterisk server? ---*/
618 /* Only used for outbound registrations */
619 static int ast_sip_ouraddrfor(struct in_addr *them, struct in_addr *us)
622 * Using the localaddr structure built up with localnet statements
623 * apply it to their address to see if we need to substitute our
624 * externip or can get away with our internal bindaddr
626 struct sockaddr_in theirs;
627 theirs.sin_addr = *them;
628 if (localaddr && externip.sin_addr.s_addr &&
629 ast_apply_ha(localaddr, &theirs)) {
630 char iabuf[INET_ADDRSTRLEN];
631 memcpy(us, &externip.sin_addr, sizeof(struct in_addr));
632 ast_inet_ntoa(iabuf, sizeof(iabuf), *(struct in_addr *)&them->s_addr);
633 ast_log(LOG_DEBUG, "Target address %s is not local, substituting externip\n", iabuf);
635 else if (bindaddr.sin_addr.s_addr)
636 memcpy(us, &bindaddr.sin_addr, sizeof(struct in_addr));
638 return ast_ouraddrfor(them, us);
642 static int append_history(struct sip_pvt *p, char *event, char *data)
644 struct sip_history *hist, *prev;
648 hist = malloc(sizeof(struct sip_history));
650 memset(hist, 0, sizeof(struct sip_history));
651 snprintf(hist->event, sizeof(hist->event), "%-15s %s", event, data);
655 if ((*c == '\r') || (*c == '\n')) {
661 /* Enqueue into history */
674 /*--- retrans_pkt: Retransmit SIP message if no answer ---*/
675 static int retrans_pkt(void *data)
677 struct sip_pkt *pkt=data, *prev, *cur;
679 char iabuf[INET_ADDRSTRLEN];
680 ast_mutex_lock(&pkt->owner->lock);
681 if (pkt->retrans < MAX_RETRANS) {
683 if (sip_debug_test_pvt(pkt->owner)) {
684 if (pkt->owner->nat & SIP_NAT_ROUTE)
685 ast_verbose("Retransmitting #%d (NAT):\n%s\n to %s:%d\n", pkt->retrans, pkt->data, ast_inet_ntoa(iabuf, sizeof(iabuf), pkt->owner->recv.sin_addr), ntohs(pkt->owner->recv.sin_port));
687 ast_verbose("Retransmitting #%d (no NAT):\n%s\n to %s:%d\n", pkt->retrans, pkt->data, ast_inet_ntoa(iabuf, sizeof(iabuf), pkt->owner->sa.sin_addr), ntohs(pkt->owner->sa.sin_port));
689 append_history(pkt->owner, "ReTx", pkt->data);
690 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
693 ast_log(LOG_WARNING, "Maximum retries exceeded on call %s for seqno %d (%s %s)\n", pkt->owner->callid, pkt->seqno, (pkt->flags & FLAG_FATAL) ? "Critical" : "Non-critical", (pkt->flags & FLAG_RESPONSE) ? "Response" : "Request");
694 append_history(pkt->owner, "MaxRetries", pkt->flags & FLAG_FATAL ? "(Critical)" : "(Non-critical)");
696 if (pkt->flags & FLAG_FATAL) {
697 while(pkt->owner->owner && ast_mutex_trylock(&pkt->owner->owner->lock)) {
698 ast_mutex_unlock(&pkt->owner->lock);
700 ast_mutex_lock(&pkt->owner->lock);
702 if (pkt->owner->owner) {
703 pkt->owner->alreadygone=1;
704 ast_queue_hangup(pkt->owner->owner);
705 ast_mutex_unlock(&pkt->owner->owner->lock);
707 /* If no owner, destroy now */
708 pkt->owner->needdestroy = 1;
711 /* In any case, go ahead and remove the packet */
713 cur = pkt->owner->packets;
722 prev->next = cur->next;
724 pkt->owner->packets = cur->next;
725 ast_mutex_unlock(&pkt->owner->lock);
729 ast_log(LOG_WARNING, "Weird, couldn't find packet owner!\n");
732 ast_mutex_unlock(&pkt->owner->lock);
736 /*--- __sip_reliable_xmit: transmit packet with retransmits ---*/
737 static int __sip_reliable_xmit(struct sip_pvt *p, int seqno, int resp, char *data, int len, int fatal)
740 pkt = malloc(sizeof(struct sip_pkt) + len + 1);
743 memset(pkt, 0, sizeof(struct sip_pkt));
744 memcpy(pkt->data, data, len);
745 pkt->packetlen = len;
746 pkt->next = p->packets;
750 pkt->data[len] = '\0';
752 pkt->flags |= FLAG_FATAL;
753 /* Schedule retransmission */
754 pkt->retransid = ast_sched_add(sched, DEFAULT_RETRANS, retrans_pkt, pkt);
755 pkt->next = p->packets;
757 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
758 if (!strncasecmp(pkt->data, "INVITE", 6)) {
759 /* Note this is a pending invite */
760 p->pendinginvite = seqno;
765 /*--- __sip_autodestruct: Kill a call (called by scheduler) ---*/
766 static int __sip_autodestruct(void *data)
768 struct sip_pvt *p = data;
770 ast_log(LOG_DEBUG, "Auto destroying call '%s'\n", p->callid);
771 append_history(p, "AutoDestroy", "");
773 ast_log(LOG_WARNING, "Autodestruct on call '%s' with owner in place\n", p->callid);
774 ast_queue_hangup(p->owner);
781 /*--- sip_scheddestroy: Schedule destruction of SIP call ---*/
782 static int sip_scheddestroy(struct sip_pvt *p, int ms)
785 if (sip_debug_test_pvt(p))
786 ast_verbose("Scheduling destruction of call '%s' in %d ms\n", p->callid, ms);
788 snprintf(tmp, sizeof(tmp), "%d ms", ms);
789 append_history(p, "SchedDestroy", tmp);
791 if (p->autokillid > -1)
792 ast_sched_del(sched, p->autokillid);
793 p->autokillid = ast_sched_add(sched, ms, __sip_autodestruct, p);
797 /*--- sip_cancel_destroy: Cancel destruction of SIP call ---*/
798 static int sip_cancel_destroy(struct sip_pvt *p)
800 if (p->autokillid > -1)
801 ast_sched_del(sched, p->autokillid);
802 append_history(p, "CancelDestroy", "");
807 /*--- __sip_ack: Acknowledges receipt of a packet and stops retransmission ---*/
808 static int __sip_ack(struct sip_pvt *p, int seqno, int resp, const char *msg)
810 struct sip_pkt *cur, *prev = NULL;
813 /* Just in case... */
814 if (!msg) msg = "___NEVER___";
817 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp) &&
818 ((cur->flags & FLAG_RESPONSE) ||
819 (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
820 if (!resp && (seqno == p->pendinginvite)) {
821 ast_log(LOG_DEBUG, "Acked pending invite %d\n", p->pendinginvite);
822 p->pendinginvite = 0;
825 /* this is our baby */
827 prev->next = cur->next;
829 p->packets = cur->next;
830 if (cur->retransid > -1)
831 ast_sched_del(sched, cur->retransid);
839 ast_log(LOG_DEBUG, "Stopping retransmission on '%s' of %s %d: %s\n", p->callid, resp ? "Response" : "Request", seqno, res ? "Not Found" : "Found");
843 /* Pretend to ack all packets */
844 static int __sip_pretend_ack(struct sip_pvt *p)
847 __sip_ack(p, p->packets->seqno, (p->packets->flags & FLAG_RESPONSE), p->packets->data);
852 /*--- __sip_semi_ack: Acks receipt of packet, keep it around (used for provisional responses) ---*/
853 static int __sip_semi_ack(struct sip_pvt *p, int seqno, int resp, const char *msg)
859 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp) &&
860 ((cur->flags & FLAG_RESPONSE) ||
861 (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
862 /* this is our baby */
863 if (cur->retransid > -1)
864 ast_sched_del(sched, cur->retransid);
871 ast_log(LOG_DEBUG, "(Provisional) Stopping retransmission (but retaining packet) on '%s' %s %d: %s\n", p->callid, resp ? "Response" : "Request", seqno, res ? "Not Found" : "Found");
875 static void parse(struct sip_request *req);
876 static char *get_header(struct sip_request *req, char *name);
877 static void copy_request(struct sip_request *dst,struct sip_request *src);
879 static void parse_copy(struct sip_request *dst, struct sip_request *src)
881 memset(dst, 0, sizeof(*dst));
882 memcpy(dst->data, src->data, sizeof(dst->data));
886 /*--- send_response: Transmit response on SIP request---*/
887 static int send_response(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
890 char iabuf[INET_ADDRSTRLEN];
891 struct sip_request tmp;
893 if (sip_debug_test_pvt(p)) {
894 if (p->nat & SIP_NAT_ROUTE)
895 ast_verbose("%sTransmitting (NAT):\n%s\n to %s:%d\n", reliable ? "Reliably " : "", req->data, ast_inet_ntoa(iabuf, sizeof(iabuf), p->recv.sin_addr), ntohs(p->recv.sin_port));
897 ast_verbose("%sTransmitting (no NAT):\n%s\n to %s:%d\n", reliable ? "Reliably " : "", req->data, ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr), ntohs(p->sa.sin_port));
901 parse_copy(&tmp, req);
902 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
903 append_history(p, "TxRespRel", tmpmsg);
905 res = __sip_reliable_xmit(p, seqno, 1, req->data, req->len, (reliable > 1));
908 parse_copy(&tmp, req);
909 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
910 append_history(p, "TxResp", tmpmsg);
912 res = __sip_xmit(p, req->data, req->len);
919 /*--- send_request: Send SIP Request to the other part of the dialogue ---*/
920 static int send_request(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
923 char iabuf[INET_ADDRSTRLEN];
924 struct sip_request tmp;
926 if (sip_debug_test_pvt(p)) {
927 if (p->nat & SIP_NAT_ROUTE)
928 ast_verbose("%sTransmitting:\n%s (NAT) to %s:%d\n", reliable ? "Reliably " : "", req->data, ast_inet_ntoa(iabuf, sizeof(iabuf), p->recv.sin_addr), ntohs(p->recv.sin_port));
930 ast_verbose("%sTransmitting:\n%s (no NAT) to %s:%d\n", reliable ? "Reliably " : "", req->data, ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr), ntohs(p->sa.sin_port));
934 parse_copy(&tmp, req);
935 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
936 append_history(p, "TxReqRel", tmpmsg);
938 res = __sip_reliable_xmit(p, seqno, 0, req->data, req->len, (reliable > 1));
941 parse_copy(&tmp, req);
942 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
943 append_history(p, "TxReq", tmpmsg);
945 res = __sip_xmit(p, req->data, req->len);
950 /*--- url_decode: Decode SIP URL ---*/
951 static void url_decode(char *s)
959 if (sscanf(s + 1, "%2x", &tmp) == 1) {
961 s += 2; /* Will be incremented once more when we break out */
965 /* Fall through if something wasn't right with the formatting */
975 /*--- ditch_braces: Pick out text in braces from character string ---*/
976 static char *ditch_braces(char *tmp)
981 if ((q = strchr(tmp, '"')) ) {
983 if ((q = strchr(c, '"')) )
986 ast_log(LOG_WARNING, "No closing quote in '%s'\n", tmp);
990 if ((n = strchr(c, '<')) ) {
992 while(*c && *c != '>') c++;
994 ast_log(LOG_WARNING, "No closing brace in '%s'\n", tmp);
1003 /*--- sip_sendtext: Send SIP MESSAGE text within a call ---*/
1004 /* Called from PBX core text message functions */
1005 static int sip_sendtext(struct ast_channel *ast, char *text)
1007 struct sip_pvt *p = ast->pvt->pvt;
1008 int debug=sip_debug_test_pvt(p);
1011 ast_verbose("Sending text %s on %s\n", text, ast->name);
1014 if (!text || ast_strlen_zero(text))
1017 ast_verbose("Really sending text %s on %s\n", text, ast->name);
1018 transmit_message_with_text(p, text);
1022 static void realtime_update_peer(const char *peername, struct sockaddr_in *sin, const char *username, int expirey)
1026 char regseconds[20];
1031 snprintf(regseconds, sizeof(regseconds), "%ld", nowtime);
1032 ast_inet_ntoa(ipaddr, sizeof(ipaddr), sin->sin_addr);
1033 snprintf(port, sizeof(port), "%d", ntohs(sin->sin_port));
1034 ast_update_realtime("sipfriends", "name", peername, "ipaddr", ipaddr, "port", port, "regseconds", regseconds, "username", username, NULL);
1037 static void register_peer_exten(struct sip_peer *peer, int onoff)
1039 unsigned char multi[256]="";
1040 char *stringp, *ext;
1041 if (!ast_strlen_zero(regcontext)) {
1042 strncpy(multi, ast_strlen_zero(peer->regexten) ? peer->name : peer->regexten, sizeof(multi) - 1);
1044 while((ext = strsep(&stringp, "&"))) {
1046 ast_add_extension(regcontext, 1, ext, 1, NULL, NULL, "Noop", strdup(peer->name), free, channeltype);
1048 ast_context_remove_extension(regcontext, ext, 1, NULL);
1053 static void destroy_peer(struct sip_peer *peer)
1055 /* Delete it, it needs to disappear */
1057 sip_destroy(peer->call);
1058 if (peer->expire > -1)
1059 ast_sched_del(sched, peer->expire);
1060 if (peer->pokeexpire > -1)
1061 ast_sched_del(sched, peer->pokeexpire);
1062 register_peer_exten(peer, 0);
1063 ast_free_ha(peer->ha);
1067 /*--- update_peer: Update peer data in database (if used) ---*/
1068 static void update_peer(struct sip_peer *p, int expiry)
1071 realtime_update_peer(p->name, &p->addr, p->username, expiry);
1074 static struct sip_peer *build_peer(const char *name, struct ast_variable *v, int temponly);
1076 static struct sip_peer *realtime_peer(const char *peername, struct sockaddr_in *sin)
1078 struct ast_variable *var, *tmp=NULL;
1080 struct sip_peer *peer=NULL;
1081 time_t nowtime, regseconds;
1085 ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr);
1087 var = ast_load_realtime("sipfriends", "name", peername, NULL);
1089 var = ast_load_realtime("sipfriends", "ipaddr", iabuf, NULL);
1091 /* Make sure it's not a user only... */
1092 peer = build_peer(peername, var, 1);
1094 /* Add some finishing touches, addresses, etc */
1098 if (!strcasecmp(tmp->name, "type")) {
1099 if (strcasecmp(tmp->value, "friend") &&
1100 strcasecmp(tmp->value, "peer")) {
1101 /* Whoops, we weren't supposed to exist! */
1106 } else if (!strcasecmp(tmp->name, "regseconds")) {
1107 if (sscanf(tmp->value, "%li", ®seconds) != 1)
1109 } else if (!strcasecmp(tmp->name, "ipaddr")) {
1110 inet_aton(tmp->value, &(peer->addr.sin_addr));
1111 } else if (!strcasecmp(tmp->name, "port")) {
1112 peer->addr.sin_port = htons(atoi(tmp->value));
1113 } else if (!strcasecmp(tmp->name, "host")) {
1114 if (!strcasecmp(tmp->value, "dynamic"))
1119 if (peer && dynamic) {
1121 if ((nowtime - regseconds) > 0) {
1122 memset(&peer->addr, 0, sizeof(peer->addr));
1124 ast_log(LOG_DEBUG, "Bah, we're expired (%ld/%ld/%ld)!\n", nowtime - regseconds, regseconds, nowtime);
1128 ast_destroy_realtime(var);
1133 /*--- find_peer: Locate peer by name or ip address */
1134 static struct sip_peer *find_peer(const char *peer, struct sockaddr_in *sin)
1136 struct sip_peer *p = NULL;
1140 /* Find by peer name */
1142 if (!strcasecmp(p->name, peer)) {
1151 if (!inaddrcmp(&p->addr, sin) ||
1153 (p->addr.sin_addr.s_addr == sin->sin_addr.s_addr))) {
1161 p = realtime_peer(peer, sin);
1167 static void destroy_user(struct sip_user *user)
1169 ast_free_ha(user->ha);
1171 ast_destroy_realtime(user->vars);
1177 static struct sip_user *build_user(const char *name, struct ast_variable *v);
1178 static struct sip_user *realtime_user(const char *username)
1180 struct ast_variable *var;
1181 struct ast_variable *tmp;
1182 struct sip_user *user=NULL;
1183 var = ast_load_realtime("sipfriends", "name", username, NULL);
1185 /* Make sure it's not a user only... */
1186 user = build_user(username, var);
1188 /* Add some finishing touches, addresses, etc */
1192 if (!strcasecmp(tmp->name, "type")) {
1193 if (strcasecmp(tmp->value, "friend") &&
1194 strcasecmp(tmp->value, "user")) {
1195 /* Whoops, we weren't supposed to exist! */
1204 ast_destroy_realtime(var);
1209 /*--- find_user: Locate user by name */
1210 static struct sip_user *find_user(char *name)
1212 struct sip_user *u = NULL;
1216 if (!strcasecmp(u->name, name)) {
1222 u = realtime_user(name);
1227 /*--- create_addr: create address structure from peer definition ---*/
1228 /* Or, if peer not found, find it in the global DNS */
1229 /* returns TRUE on failure, FALSE on success */
1230 static int create_addr(struct sip_pvt *r, char *opeer)
1233 struct ast_hostent ahp;
1239 char host[256], *hostn;
1242 strncpy(peer, opeer, sizeof(peer) - 1);
1243 port = strchr(peer, ':');
1248 r->sa.sin_family = AF_INET;
1249 ast_mutex_lock(&peerl.lock);
1250 p = find_peer(peer, NULL);
1254 r->capability = p->capability;
1257 ast_log(LOG_DEBUG, "Setting NAT on RTP to %d\n", (r->nat & SIP_NAT_ROUTE));
1258 ast_rtp_setnat(r->rtp, (r->nat & SIP_NAT_ROUTE));
1261 ast_log(LOG_DEBUG, "Setting NAT on VRTP to %d\n", (r->nat & SIP_NAT_ROUTE));
1262 ast_rtp_setnat(r->vrtp, (r->nat & SIP_NAT_ROUTE));
1264 strncpy(r->peername, p->username, sizeof(r->peername)-1);
1265 strncpy(r->authname, p->username, sizeof(r->authname)-1);
1266 strncpy(r->peersecret, p->secret, sizeof(r->peersecret)-1);
1267 strncpy(r->peermd5secret, p->md5secret, sizeof(r->peermd5secret)-1);
1268 strncpy(r->username, p->username, sizeof(r->username)-1);
1269 strncpy(r->tohost, p->tohost, sizeof(r->tohost)-1);
1270 strncpy(r->fullcontact, p->fullcontact, sizeof(r->fullcontact)-1);
1271 if (!r->initreq.headers && !ast_strlen_zero(p->fromdomain)) {
1272 if ((callhost = strchr(r->callid, '@'))) {
1273 strncpy(callhost + 1, p->fromdomain, sizeof(r->callid) - (callhost - r->callid) - 2);
1276 if (ast_strlen_zero(r->tohost)) {
1277 if (p->addr.sin_addr.s_addr)
1278 ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->addr.sin_addr);
1280 ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->defaddr.sin_addr);
1282 if (!ast_strlen_zero(p->fromdomain))
1283 strncpy(r->fromdomain, p->fromdomain, sizeof(r->fromdomain)-1);
1284 if (!ast_strlen_zero(p->fromuser))
1285 strncpy(r->fromuser, p->fromuser, sizeof(r->fromuser)-1);
1286 r->insecure = p->insecure;
1287 r->canreinvite = p->canreinvite;
1288 r->maxtime = p->maxms;
1289 r->callgroup = p->callgroup;
1290 r->pickupgroup = p->pickupgroup;
1292 r->dtmfmode = p->dtmfmode;
1293 if (r->dtmfmode & SIP_DTMF_RFC2833)
1294 r->noncodeccapability |= AST_RTP_DTMF;
1296 r->noncodeccapability &= ~AST_RTP_DTMF;
1298 r->promiscredir = p->promiscredir;
1299 r->usereqphone = p->usereqphone;
1300 strncpy(r->context, p->context,sizeof(r->context)-1);
1301 if ((p->addr.sin_addr.s_addr || p->defaddr.sin_addr.s_addr) &&
1302 (!p->maxms || ((p->lastms >= 0) && (p->lastms <= p->maxms)))) {
1303 if (p->addr.sin_addr.s_addr) {
1304 r->sa.sin_addr = p->addr.sin_addr;
1305 r->sa.sin_port = p->addr.sin_port;
1307 r->sa.sin_addr = p->defaddr.sin_addr;
1308 r->sa.sin_port = p->defaddr.sin_port;
1310 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1318 ast_mutex_unlock(&peerl.lock);
1322 portno = atoi(port);
1324 portno = DEFAULT_SIP_PORT;
1329 snprintf(service, sizeof(service), "_sip._udp.%s", peer);
1330 ret = ast_get_srv(NULL, host, sizeof(host), &tportno, service);
1336 hp = ast_gethostbyname(hostn, &ahp);
1338 strncpy(r->tohost, peer, sizeof(r->tohost) - 1);
1339 memcpy(&r->sa.sin_addr, hp->h_addr, sizeof(r->sa.sin_addr));
1340 r->sa.sin_port = htons(portno);
1341 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1344 ast_log(LOG_WARNING, "No such host: %s\n", peer);
1357 /*--- auto_congest: Scheduled congestion on a call ---*/
1358 static int auto_congest(void *nothing)
1360 struct sip_pvt *p = nothing;
1361 ast_mutex_lock(&p->lock);
1364 if (!ast_mutex_trylock(&p->owner->lock)) {
1365 ast_log(LOG_NOTICE, "Auto-congesting %s\n", p->owner->name);
1366 ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
1367 ast_mutex_unlock(&p->owner->lock);
1370 ast_mutex_unlock(&p->lock);
1377 /*--- sip_call: Initiate SIP call from PBX ---*/
1378 /* used from the dial() application */
1379 static int sip_call(struct ast_channel *ast, char *dest, int timeout)
1383 char *vxml_url = NULL;
1384 char *distinctive_ring = NULL;
1385 char *osptoken = NULL;
1387 char *osphandle = NULL;
1389 struct varshead *headp;
1390 struct ast_var_t *current;
1391 int addsipheaders = 0;
1394 if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) {
1395 ast_log(LOG_WARNING, "sip_call called on %s, neither down nor reserved\n", ast->name);
1398 /* Check whether there is vxml_url, distinctive ring variables */
1400 headp=&ast->varshead;
1401 AST_LIST_TRAVERSE(headp,current,entries) {
1402 /* Check whether there is a VXML_URL variable */
1403 if (!vxml_url && !strcasecmp(ast_var_name(current),"VXML_URL")) {
1404 vxml_url = ast_var_value(current);
1405 } else if (!distinctive_ring && !strcasecmp(ast_var_name(current),"ALERT_INFO")) {
1406 /* Check whether there is a ALERT_INFO variable */
1407 distinctive_ring = ast_var_value(current);
1408 } else if (!addsipheaders && !strncasecmp(ast_var_name(current),"SIPADDHEADER",strlen("SIPADDHEADER"))) {
1409 /* Check whether there is a variable with a name starting with SIPADDHEADER */
1415 else if (!osptoken && !strcasecmp(ast_var_name(current), "OSPTOKEN")) {
1416 osptoken = ast_var_value(current);
1417 } else if (!osphandle && !strcasecmp(ast_var_name(current), "OSPHANDLE")) {
1418 osphandle = ast_var_value(current);
1426 if (!osptoken || !osphandle || (sscanf(osphandle, "%i", &p->osphandle) != 1)) {
1427 /* Force Disable OSP support */
1433 ast_log(LOG_DEBUG, "Outgoing Call for %s\n", p->username);
1434 res = update_user_counter(p,INC_OUT_USE);
1436 p->callingpres = ast->cid.cid_pres;
1437 p->jointcapability = p->capability;
1438 transmit_invite(p, "INVITE", 1, NULL, NULL, vxml_url,distinctive_ring, osptoken, addsipheaders, 1);
1440 /* Initialize auto-congest time */
1441 p->initid = ast_sched_add(sched, p->maxtime * 4, auto_congest, p);
1447 /*--- __sip_destroy: Execute destrucion of call structure, release memory---*/
1448 static void __sip_destroy(struct sip_pvt *p, int lockowner)
1450 struct sip_pvt *cur, *prev = NULL;
1452 struct sip_history *hist;
1454 if (sip_debug_test_pvt(p))
1455 ast_verbose("Destroying call '%s'\n", p->callid);
1456 if (p->stateid > -1)
1457 ast_extension_state_del(p->stateid, NULL);
1459 ast_sched_del(sched, p->initid);
1460 if (p->autokillid > -1)
1461 ast_sched_del(sched, p->autokillid);
1464 ast_rtp_destroy(p->rtp);
1467 ast_rtp_destroy(p->vrtp);
1470 free_old_route(p->route);
1474 /* Carefully unlink from registry */
1475 struct sip_registry *reg;
1476 ast_mutex_lock(®l.lock);
1477 reg = regl.registrations;
1479 if ((reg == p->registry) && (p->registry->call == p))
1480 p->registry->call=NULL;
1483 ast_mutex_unlock(®l.lock);
1485 /* Unlink us from the owner if we have one */
1488 ast_mutex_lock(&p->owner->lock);
1489 ast_log(LOG_DEBUG, "Detaching from %s\n", p->owner->name);
1490 p->owner->pvt->pvt = NULL;
1492 ast_mutex_unlock(&p->owner->lock);
1497 p->history = p->history->next;
1504 prev->next = cur->next;
1513 ast_log(LOG_WARNING, "%p is not in list?!?! \n", cur);
1516 ast_sched_del(sched, p->initid);
1517 while((cp = p->packets)) {
1518 p->packets = p->packets->next;
1519 if (cp->retransid > -1)
1520 ast_sched_del(sched, cp->retransid);
1523 ast_mutex_destroy(&p->lock);
1525 ast_destroy_realtime(p->vars);
1532 /*--- update_user_counter: Handle incominglimit and outgoinglimit for SIP users ---*/
1533 /* Note: This is going to be replaced by app_groupcount */
1534 static int update_user_counter(struct sip_pvt *fup, int event)
1536 char name[256] = "";
1538 strncpy(name, fup->username, sizeof(name) - 1);
1539 ast_mutex_lock(&userl.lock);
1540 u = find_user(name);
1542 ast_log(LOG_DEBUG, "%s is not a local user\n", name);
1543 ast_mutex_unlock(&userl.lock);
1547 /* incoming and outgoing affects the inUse counter */
1550 if ( u->inUse > 0 ) {
1558 if (u->incominglimit > 0 ) {
1559 if (u->inUse >= u->incominglimit) {
1560 ast_log(LOG_ERROR, "Call from user '%s' rejected due to usage limit of %d\n", u->name, u->incominglimit);
1561 /* inc inUse as well */
1562 if ( event == INC_OUT_USE ) {
1565 ast_mutex_unlock(&userl.lock);
1573 ast_log(LOG_DEBUG, "Call from user '%s' is %d out of %d\n", u->name, u->inUse, u->incominglimit);
1575 /* we don't use these anymore
1577 if ( u->outUse > 0 ) {
1584 if ( u->outgoinglimit > 0 ) {
1585 if ( u->outUse >= u->outgoinglimit ) {
1586 ast_log(LOG_ERROR, "Outgoing call from user '%s' rejected due to usage limit of %d\n", u->name, u->outgoinglimit);
1587 ast_mutex_unlock(&userl.lock);
1598 ast_log(LOG_ERROR, "update_user_counter(%s,%d) called with no event!\n",u->name,event);
1600 ast_mutex_unlock(&userl.lock);
1607 /*--- sip_destroy: Destroy SIP call structure ---*/
1608 static void sip_destroy(struct sip_pvt *p)
1610 ast_mutex_lock(&iflock);
1611 __sip_destroy(p, 1);
1612 ast_mutex_unlock(&iflock);
1616 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal);
1618 static int hangup_sip2cause(int cause)
1620 /* Possible values from causes.h
1621 AST_CAUSE_NOTDEFINED AST_CAUSE_NORMAL AST_CAUSE_BUSY
1622 AST_CAUSE_FAILURE AST_CAUSE_CONGESTION AST_CAUSE_UNALLOCATED
1626 case 404: /* Not found */
1627 return AST_CAUSE_UNALLOCATED;
1628 case 483: /* Too many hops */
1629 return AST_CAUSE_FAILURE;
1631 return AST_CAUSE_BUSY;
1633 return AST_CAUSE_NORMAL;
1639 static char *hangup_cause2sip(int cause)
1643 case AST_CAUSE_FAILURE:
1644 return "500 Server internal failure";
1645 case AST_CAUSE_CONGESTION:
1646 return "503 Service Unavailable";
1647 case AST_CAUSE_BUSY:
1656 /*--- sip_hangup: Hangup SIP call */
1657 static int sip_hangup(struct ast_channel *ast)
1659 struct sip_pvt *p = ast->pvt->pvt;
1661 int needdestroy = 0;
1663 ast_log(LOG_DEBUG, "sip_hangup(%s)\n", ast->name);
1664 if (!ast->pvt->pvt) {
1665 ast_log(LOG_DEBUG, "Asked to hangup channel not connected\n");
1668 ast_mutex_lock(&p->lock);
1670 if ((p->osphandle > -1) && (ast->_state == AST_STATE_UP)) {
1671 ast_osp_terminate(p->osphandle, AST_CAUSE_NORMAL, p->ospstart, time(NULL) - p->ospstart);
1674 if ( p->outgoing ) {
1675 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement outUse counter\n", p->username);
1676 update_user_counter(p, DEC_OUT_USE);
1678 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement inUse counter\n", p->username);
1679 update_user_counter(p, DEC_IN_USE);
1681 /* Determine how to disconnect */
1682 if (p->owner != ast) {
1683 ast_log(LOG_WARNING, "Huh? We aren't the owner?\n");
1684 ast_mutex_unlock(&p->lock);
1687 if (!ast || (ast->_state != AST_STATE_UP))
1692 ast_dsp_free(p->vad);
1695 ast->pvt->pvt = NULL;
1697 ast_mutex_lock(&usecnt_lock);
1699 ast_mutex_unlock(&usecnt_lock);
1700 ast_update_use_count();
1703 /* Start the process if it's not already started */
1704 if (!p->alreadygone && !ast_strlen_zero(p->initreq.data)) {
1707 transmit_request_with_auth(p, "CANCEL", p->ocseq, 1, 0);
1708 /* Actually don't destroy us yet, wait for the 487 on our original
1709 INVITE, but do set an autodestruct just in case we never get it. */
1711 sip_scheddestroy(p, 15000);
1712 if ( p->initid != -1 ) {
1713 /* channel still up - reverse dec of inUse counter
1714 only if the channel is not auto-congested */
1715 if ( p->outgoing ) {
1716 update_user_counter(p, INC_OUT_USE);
1719 update_user_counter(p, INC_IN_USE);
1724 if (ast->hangupcause && ((res = hangup_cause2sip(ast->hangupcause)))) {
1725 transmit_response_reliable(p, res, &p->initreq, 1);
1727 transmit_response_reliable(p, "403 Forbidden", &p->initreq, 1);
1730 if (!p->pendinginvite) {
1732 transmit_request_with_auth(p, "BYE", 0, 1, 1);
1734 /* Note we will need a BYE when this all settles out
1735 but we can't send one while we have "INVITE" outstanding. */
1737 p->needreinvite = 0;
1741 p->needdestroy = needdestroy;
1742 ast_mutex_unlock(&p->lock);
1746 /*--- sip_answer: Answer SIP call , send 200 OK on Invite */
1747 static int sip_answer(struct ast_channel *ast)
1751 struct sip_pvt *p = ast->pvt->pvt;
1753 ast_mutex_lock(&p->lock);
1754 if (ast->_state != AST_STATE_UP) {
1759 codec=pbx_builtin_getvar_helper(p->owner,"SIP_CODEC");
1761 fmt=ast_getformatbyname(codec);
1763 ast_log(LOG_NOTICE, "Changing codec to '%s' for this call because of ${SIP_CODEC) variable\n",codec);
1764 if (p->jointcapability & fmt) {
1765 p->jointcapability &= fmt;
1766 p->capability &= fmt;
1768 ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because it is not shared by both ends.\n");
1769 } else ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because of unrecognized/not configured codec (check allow/disallow in sip.conf): %s\n",codec);
1772 ast_setstate(ast, AST_STATE_UP);
1774 ast_log(LOG_DEBUG, "sip_answer(%s)\n", ast->name);
1775 res = transmit_response_with_sdp(p, "200 OK", &p->initreq, 1);
1777 ast_mutex_unlock(&p->lock);
1781 /*--- sip_write: Send response, support audio media ---*/
1782 static int sip_write(struct ast_channel *ast, struct ast_frame *frame)
1784 struct sip_pvt *p = ast->pvt->pvt;
1786 if (frame->frametype == AST_FRAME_VOICE) {
1787 if (!(frame->subclass & ast->nativeformats)) {
1788 ast_log(LOG_WARNING, "Asked to transmit frame type %d, while native formats is %d (read/write = %d/%d)\n",
1789 frame->subclass, ast->nativeformats, ast->readformat, ast->writeformat);
1793 ast_mutex_lock(&p->lock);
1795 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1796 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1799 res = ast_rtp_write(p->rtp, frame);
1801 ast_mutex_unlock(&p->lock);
1803 } else if (frame->frametype == AST_FRAME_VIDEO) {
1805 ast_mutex_lock(&p->lock);
1807 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1808 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1811 res = ast_rtp_write(p->vrtp, frame);
1813 ast_mutex_unlock(&p->lock);
1815 } else if (frame->frametype == AST_FRAME_IMAGE) {
1818 ast_log(LOG_WARNING, "Can't send %d type frames with SIP write\n", frame->frametype);
1825 /*--- sip_fixup: Fix up a channel: If a channel is consumed, this is called.
1826 Basically update any ->owner links ----*/
1827 static int sip_fixup(struct ast_channel *oldchan, struct ast_channel *newchan)
1829 struct sip_pvt *p = newchan->pvt->pvt;
1830 ast_mutex_lock(&p->lock);
1831 if (p->owner != oldchan) {
1832 ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, p->owner);
1833 ast_mutex_unlock(&p->lock);
1837 ast_mutex_unlock(&p->lock);
1841 /*--- sip_senddigit: Send DTMF character on SIP channel */
1842 /* within one call, we're able to transmit in many methods simultaneously */
1843 static int sip_senddigit(struct ast_channel *ast, char digit)
1845 struct sip_pvt *p = ast->pvt->pvt;
1846 if (p && (p->dtmfmode & SIP_DTMF_INFO)) {
1847 transmit_info_with_digit(p, digit);
1849 if (p && p->rtp && (p->dtmfmode & SIP_DTMF_RFC2833)) {
1850 ast_rtp_senddigit(p->rtp, digit);
1852 /* If in-band DTMF is desired, send that */
1853 if (p->dtmfmode & SIP_DTMF_INBAND)
1859 /*--- sip_transfer: Transfer SIP call */
1860 static int sip_transfer(struct ast_channel *ast, char *dest)
1862 struct sip_pvt *p = ast->pvt->pvt;
1864 res = transmit_refer(p, dest);
1868 /*--- sip_indicate: Play indication to user */
1869 /* With SIP a lot of indications is sent as messages, letting the device play
1870 the indication - busy signal, congestion etc */
1871 static int sip_indicate(struct ast_channel *ast, int condition)
1873 struct sip_pvt *p = ast->pvt->pvt;
1875 case AST_CONTROL_RINGING:
1876 if (ast->_state == AST_STATE_RING) {
1877 if (!p->progress || !p->progressinband) {
1878 /* Send 180 ringing if out-of-band seems reasonable */
1879 transmit_response(p, "180 Ringing", &p->initreq);
1881 if (p->progressinband < 2)
1884 /* Well, if it's not reasonable, just send in-band */
1888 case AST_CONTROL_BUSY:
1889 if (ast->_state != AST_STATE_UP) {
1890 transmit_response(p, "486 Busy Here", &p->initreq);
1892 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1896 case AST_CONTROL_CONGESTION:
1897 if (ast->_state != AST_STATE_UP) {
1898 transmit_response(p, "503 Service Unavailable", &p->initreq);
1900 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1904 case AST_CONTROL_PROGRESS:
1905 case AST_CONTROL_PROCEEDING:
1906 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1907 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1915 ast_log(LOG_WARNING, "Don't know how to indicate condition %d\n", condition);
1923 /*--- sip_new: Initiate a call in the SIP channel */
1924 /* called from sip_request_call (calls from the pbx ) */
1925 static struct ast_channel *sip_new(struct sip_pvt *i, int state, char *title)
1927 struct ast_channel *tmp;
1928 struct ast_variable *v = NULL;
1931 ast_mutex_unlock(&i->lock);
1932 /* Don't hold a sip pvt lock while we allocate a channel */
1933 tmp = ast_channel_alloc(1);
1934 ast_mutex_lock(&i->lock);
1936 /* Select our native format based on codec preference until we receive
1937 something from another device to the contrary. */
1938 ast_mutex_lock(&i->lock);
1939 if (i->jointcapability)
1940 tmp->nativeformats = ast_codec_choose(&i->prefs, i->jointcapability, 1);
1941 else if (i->capability)
1942 tmp->nativeformats = ast_codec_choose(&i->prefs, i->capability, 1);
1944 tmp->nativeformats = ast_codec_choose(&i->prefs, global_capability, 1);
1945 ast_mutex_unlock(&i->lock);
1946 fmt = ast_best_codec(tmp->nativeformats);
1948 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%04x", title, rand() & 0xffff);
1950 if (strchr(i->fromdomain,':'))
1952 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", strchr(i->fromdomain,':')+1, (int)(long)(i));
1956 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", i->fromdomain, (int)(long)(i));
1958 tmp->type = channeltype;
1959 if (i->dtmfmode & SIP_DTMF_INBAND) {
1960 i->vad = ast_dsp_new();
1961 ast_dsp_set_features(i->vad, DSP_FEATURE_DTMF_DETECT);
1963 ast_dsp_digitmode(i->vad, DSP_DIGITMODE_DTMF | DSP_DIGITMODE_RELAXDTMF);
1965 tmp->fds[0] = ast_rtp_fd(i->rtp);
1966 tmp->fds[1] = ast_rtcp_fd(i->rtp);
1968 tmp->fds[2] = ast_rtp_fd(i->vrtp);
1969 tmp->fds[3] = ast_rtcp_fd(i->vrtp);
1971 if (state == AST_STATE_RING)
1973 tmp->adsicpe = AST_ADSI_UNAVAILABLE;
1974 tmp->writeformat = fmt;
1975 tmp->pvt->rawwriteformat = fmt;
1976 tmp->readformat = fmt;
1977 tmp->pvt->rawreadformat = fmt;
1979 tmp->pvt->send_text = sip_sendtext;
1980 tmp->pvt->call = sip_call;
1981 tmp->pvt->hangup = sip_hangup;
1982 tmp->pvt->answer = sip_answer;
1983 tmp->pvt->read = sip_read;
1984 tmp->pvt->write = sip_write;
1985 tmp->pvt->write_video = sip_write;
1986 tmp->pvt->indicate = sip_indicate;
1987 tmp->pvt->transfer = sip_transfer;
1988 tmp->pvt->fixup = sip_fixup;
1989 tmp->pvt->send_digit = sip_senddigit;
1991 tmp->pvt->bridge = ast_rtp_bridge;
1993 tmp->callgroup = i->callgroup;
1994 tmp->pickupgroup = i->pickupgroup;
1995 tmp->cid.cid_pres = i->callingpres;
1996 if (!ast_strlen_zero(i->accountcode))
1997 strncpy(tmp->accountcode, i->accountcode, sizeof(tmp->accountcode)-1);
1999 tmp->amaflags = i->amaflags;
2000 if (!ast_strlen_zero(i->language))
2001 strncpy(tmp->language, i->language, sizeof(tmp->language)-1);
2002 if (!ast_strlen_zero(i->musicclass))
2003 strncpy(tmp->musicclass, i->musicclass, sizeof(tmp->musicclass)-1);
2005 ast_mutex_lock(&usecnt_lock);
2007 ast_mutex_unlock(&usecnt_lock);
2008 strncpy(tmp->context, i->context, sizeof(tmp->context)-1);
2009 strncpy(tmp->exten, i->exten, sizeof(tmp->exten)-1);
2010 if (!ast_strlen_zero(i->cid_num))
2011 tmp->cid.cid_num = strdup(i->cid_num);
2012 if (!ast_strlen_zero(i->cid_name))
2013 tmp->cid.cid_name = strdup(i->cid_name);
2014 if (!ast_strlen_zero(i->rdnis))
2015 tmp->cid.cid_rdnis = strdup(i->rdnis);
2016 if (!ast_strlen_zero(i->exten) && strcmp(i->exten, "s"))
2017 tmp->cid.cid_dnid = strdup(i->exten);
2019 if (!ast_strlen_zero(i->domain)) {
2020 pbx_builtin_setvar_helper(tmp, "SIPDOMAIN", i->domain);
2022 if (!ast_strlen_zero(i->useragent)) {
2023 pbx_builtin_setvar_helper(tmp, "SIPUSERAGENT", i->useragent);
2025 if (!ast_strlen_zero(i->callid)) {
2026 pbx_builtin_setvar_helper(tmp, "SIPCALLID", i->callid);
2028 ast_setstate(tmp, state);
2029 if (state != AST_STATE_DOWN) {
2030 if (ast_pbx_start(tmp)) {
2031 ast_log(LOG_WARNING, "Unable to start PBX on %s\n", tmp->name);
2036 for (v = i->vars ; v ; v = v->next)
2037 pbx_builtin_setvar_helper(tmp,v->name,v->value);
2040 ast_log(LOG_WARNING, "Unable to allocate channel structure\n");
2044 static struct cfalias {
2048 { "Content-Type", "c" },
2049 { "Content-Encoding", "e" },
2053 { "Content-Length", "l" },
2056 { "Supported", "k" },
2057 { "Refer-To", "r" },
2058 { "Allow-Events", "u" },
2063 /*--- get_sdp_by_line: Reads one line of SIP message body */
2064 static char* get_sdp_by_line(char* line, char *name, int nameLen) {
2065 if (strncasecmp(line, name, nameLen) == 0 && line[nameLen] == '=') {
2066 char* r = line + nameLen + 1;
2067 while (*r && (*r < 33)) ++r;
2074 /*--- get_sdp: Gets all kind of SIP message bodies, including SDP,
2075 but the name wrongly applies _only_ sdp */
2076 static char *get_sdp(struct sip_request *req, char *name) {
2078 int len = strlen(name);
2081 for (x=0; x<req->lines; x++) {
2082 r = get_sdp_by_line(req->line[x], name, len);
2083 if (r[0] != '\0') return r;
2089 static void sdpLineNum_iterator_init(int* iterator) {
2093 static char* get_sdp_iterate(int* iterator,
2094 struct sip_request *req, char *name) {
2095 int len = strlen(name);
2097 while (*iterator < req->lines) {
2098 r = get_sdp_by_line(req->line[(*iterator)++], name, len);
2099 if (r[0] != '\0') return r;
2104 static char *__get_header(struct sip_request *req, char *name, int *start)
2107 int len = strlen(name);
2109 if (pedanticsipchecking) {
2110 /* Technically you can place arbitrary whitespace both before and after the ':' in
2111 a header, although RFC3261 clearly says you shouldn't before, and place just
2112 one afterwards. If you shouldn't do it, what absolute idiot decided it was
2113 a good idea to say you can do it, and if you can do it, why in the hell would
2114 you say you shouldn't. */
2115 for (x=*start;x<req->headers;x++) {
2116 if (!strncasecmp(req->header[x], name, len)) {
2117 r = req->header[x] + len;
2118 while(*r && (*r < 33))
2122 while(*r && (*r < 33))
2130 /* We probably shouldn't even bother counting whitespace afterwards but
2131 I guess for backwards compatibility we will */
2132 for (x=*start;x<req->headers;x++) {
2133 if (!strncasecmp(req->header[x], name, len) &&
2134 (req->header[x][len] == ':')) {
2135 r = req->header[x] + len + 1;
2136 while(*r && (*r < 33))
2144 for (x=0;x<sizeof(aliases) / sizeof(aliases[0]); x++)
2145 if (!strcasecmp(aliases[x].fullname, name))
2146 return __get_header(req, aliases[x].shortname, start);
2148 /* Don't return NULL, so get_header is always a valid pointer */
2152 /*--- get_header: Get header from SIP request ---*/
2153 static char *get_header(struct sip_request *req, char *name)
2156 return __get_header(req, name, &start);
2159 /*--- sip_rtp_read: Read RTP from network ---*/
2160 static struct ast_frame *sip_rtp_read(struct ast_channel *ast, struct sip_pvt *p)
2162 /* Retrieve audio/etc from channel. Assumes p->lock is already held. */
2163 struct ast_frame *f;
2164 static struct ast_frame null_frame = { AST_FRAME_NULL, };
2167 f = ast_rtp_read(p->rtp); /* RTP Audio */
2170 f = ast_rtcp_read(p->rtp); /* RTCP Control Channel */
2173 f = ast_rtp_read(p->vrtp); /* RTP Video */
2176 f = ast_rtcp_read(p->vrtp); /* RTCP Control Channel for video */
2181 /* Don't send RFC2833 if we're not supposed to */
2182 if (f && (f->frametype == AST_FRAME_DTMF) && !(p->dtmfmode & SIP_DTMF_RFC2833))
2185 /* We already hold the channel lock */
2186 if (f->frametype == AST_FRAME_VOICE) {
2187 if (f->subclass != p->owner->nativeformats) {
2188 ast_log(LOG_DEBUG, "Oooh, format changed to %d\n", f->subclass);
2189 p->owner->nativeformats = f->subclass;
2190 ast_set_read_format(p->owner, p->owner->readformat);
2191 ast_set_write_format(p->owner, p->owner->writeformat);
2193 if ((p->dtmfmode & SIP_DTMF_INBAND) && p->vad) {
2194 f = ast_dsp_process(p->owner,p->vad,f);
2195 if (f && (f->frametype == AST_FRAME_DTMF))
2196 ast_log(LOG_DEBUG, "Detected DTMF '%c'\n", f->subclass);
2203 /*--- sip_read: Read SIP RTP from channel */
2204 static struct ast_frame *sip_read(struct ast_channel *ast)
2206 struct ast_frame *fr;
2207 struct sip_pvt *p = ast->pvt->pvt;
2208 ast_mutex_lock(&p->lock);
2209 fr = sip_rtp_read(ast, p);
2210 time(&p->lastrtprx);
2211 ast_mutex_unlock(&p->lock);
2215 /*--- build_callid: Build SIP CALLID header ---*/
2216 static void build_callid(char *callid, int len, struct in_addr ourip, char *fromdomain)
2221 char iabuf[INET_ADDRSTRLEN];
2224 res = snprintf(callid, len, "%08x", val);
2228 if (!ast_strlen_zero(fromdomain))
2229 snprintf(callid, len, "@%s", fromdomain);
2231 /* It's not important that we really use our right IP here... */
2232 snprintf(callid, len, "@%s", ast_inet_ntoa(iabuf, sizeof(iabuf), ourip));
2235 /*--- sip_alloc: Allocate SIP_PVT structure and set defaults ---*/
2236 static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useglobal_nat)
2239 char iabuf[INET_ADDRSTRLEN];
2241 p = malloc(sizeof(struct sip_pvt));
2244 /* Keep track of stuff */
2245 memset(p, 0, sizeof(struct sip_pvt));
2246 ast_mutex_init(&p->lock);
2256 memcpy(&p->sa, sin, sizeof(p->sa));
2257 if (ast_sip_ouraddrfor(&p->sa.sin_addr,&p->ourip))
2258 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2260 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2262 p->rtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2264 p->vrtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2268 /* Start with 101 instead of 1 */
2271 ast_log(LOG_WARNING, "Unable to create RTP session: %s\n", strerror(errno));
2272 ast_mutex_destroy(&p->lock);
2274 ast_destroy_realtime(p->vars);
2280 ast_rtp_settos(p->rtp, tos);
2282 ast_rtp_settos(p->vrtp, tos);
2283 if (useglobal_nat && sin) {
2284 /* Setup NAT structure according to global settings if we have an address */
2285 p->nat = global_nat;
2286 memcpy(&p->recv, sin, sizeof(p->recv));
2287 ast_rtp_setnat(p->rtp, (p->nat & SIP_NAT_ROUTE));
2289 ast_rtp_setnat(p->vrtp, (p->nat & SIP_NAT_ROUTE));
2292 strncpy(p->fromdomain, default_fromdomain, sizeof(p->fromdomain) - 1);
2293 /* z9hG4bK is a magic cookie. See RFC 3261 section 8.1.1.7 */
2294 if (p->nat != SIP_NAT_NEVER)
2295 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);
2297 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);
2299 build_callid(p->callid, sizeof(p->callid), p->ourip, p->fromdomain);
2301 strncpy(p->callid, callid, sizeof(p->callid) - 1);
2302 /* Assume reinvite OK and via INVITE */
2303 p->canreinvite = global_canreinvite;
2304 /* Assign default music on hold class */
2305 strncpy(p->musicclass, global_musicclass, sizeof(p->musicclass) - 1);
2306 p->dtmfmode = global_dtmfmode;
2307 p->promiscredir = global_promiscredir;
2308 p->trustrpid = global_trustrpid;
2309 p->progressinband = global_progressinband;
2311 p->ospauth = global_ospauth;
2313 p->rtptimeout = global_rtptimeout;
2314 p->rtpholdtimeout = global_rtpholdtimeout;
2315 p->capability = global_capability;
2316 if (p->dtmfmode & SIP_DTMF_RFC2833)
2317 p->noncodeccapability |= AST_RTP_DTMF;
2318 strncpy(p->context, default_context, sizeof(p->context) - 1);
2320 ast_mutex_lock(&iflock);
2323 ast_mutex_unlock(&iflock);
2325 ast_log(LOG_DEBUG, "Allocating new SIP call for %s\n", callid);
2329 /*--- find_call: Connect incoming SIP message to current call or create new call structure */
2330 /* Called by handle_request ,sipsock_read */
2331 static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *sin)
2336 char iabuf[INET_ADDRSTRLEN];
2340 callid = get_header(req, "Call-ID");
2342 if (pedanticsipchecking) {
2343 /* In principle Call-ID's uniquely identify a call, however some vendors
2344 (i.e. Pingtel) send multiple calls with the same Call-ID and different
2345 tags in order to simplify billing. The RFC does state that we have to
2346 compare tags in addition to the call-id, but this generate substantially
2347 more overhead which is totally unnecessary for the vast majority of sane
2348 SIP implementations, and thus Asterisk does not enable this behavior
2349 by default. Short version: You'll need this option to support conferencing
2351 strncpy(tmp, req->header[0], sizeof(tmp) - 1);
2353 c = strchr(tmp, ' ');
2356 if (!strcasecmp(cmd, "SIP/2.0"))
2357 strncpy(tmp, get_header(req, "To"), sizeof(tmp) - 1);
2359 strncpy(tmp, get_header(req, "From"), sizeof(tmp) - 1);
2360 tag = strstr(tmp, "tag=");
2363 c = strchr(tag, ';');
2370 if (ast_strlen_zero(callid)) {
2371 ast_log(LOG_WARNING, "Call missing call ID from '%s'\n", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr));
2374 ast_mutex_lock(&iflock);
2377 if (!strcmp(p->callid, callid) &&
2378 (!pedanticsipchecking || !tag || ast_strlen_zero(p->theirtag) || !strcmp(p->theirtag, tag))) {
2379 /* Found the call */
2380 ast_mutex_lock(&p->lock);
2381 ast_mutex_unlock(&iflock);
2386 ast_mutex_unlock(&iflock);
2387 p = sip_alloc(callid, sin, 1);
2389 ast_mutex_lock(&p->lock);
2393 /*--- sip_register: Parse register=> line in sip.conf and add to registry */
2394 static int sip_register(char *value, int lineno)
2396 struct sip_registry *reg;
2397 char copy[256] = "";
2398 char *username=NULL, *hostname=NULL, *secret=NULL, *authuser=NULL;
2405 strncpy(copy, value, sizeof(copy)-1);
2408 hostname = strrchr(stringp, '@');
2413 if (!username || ast_strlen_zero(username) || !hostname || ast_strlen_zero(hostname)) {
2414 ast_log(LOG_WARNING, "Format for registration is user[:secret[:authuser]]@host[:port][/contact] at line %d", lineno);
2418 username = strsep(&stringp, ":");
2420 secret = strsep(&stringp, ":");
2422 authuser = strsep(&stringp, ":");
2425 hostname = strsep(&stringp, "/");
2427 contact = strsep(&stringp, "/");
2428 if (!contact || ast_strlen_zero(contact))
2431 hostname = strsep(&stringp, ":");
2432 porta = strsep(&stringp, ":");
2434 if (porta && !atoi(porta)) {
2435 ast_log(LOG_WARNING, "%s is not a valid port number at line %d\n", porta, lineno);
2438 reg = malloc(sizeof(struct sip_registry));
2440 memset(reg, 0, sizeof(struct sip_registry));
2441 strncpy(reg->contact, contact, sizeof(reg->contact) - 1);
2443 strncpy(reg->username, username, sizeof(reg->username)-1);
2445 strncpy(reg->hostname, hostname, sizeof(reg->hostname)-1);
2447 strncpy(reg->authuser, authuser, sizeof(reg->authuser)-1);
2449 strncpy(reg->secret, secret, sizeof(reg->secret)-1);
2452 reg->refresh = default_expiry;
2453 reg->portno = porta ? atoi(porta) : 0;
2454 reg->callid_valid = 0;
2456 ast_mutex_lock(®l.lock);
2457 reg->next = regl.registrations;
2458 regl.registrations = reg;
2459 ast_mutex_unlock(®l.lock);
2461 ast_log(LOG_ERROR, "Out of memory\n");
2467 /*--- lws2sws: Parse multiline SIP headers into one header */
2468 /* This is enabled if pedanticsipchecking is enabled */
2469 static int lws2sws(char *msgbuf, int len)
2475 /* Eliminate all CRs */
2476 if (msgbuf[h] == '\r') {
2480 /* Check for end-of-line */
2481 if (msgbuf[h] == '\n') {
2482 /* Check for end-of-message */
2485 /* Check for a continuation line */
2486 if (msgbuf[h + 1] == ' ' || msgbuf[h + 1] == '\t') {
2487 /* Merge continuation line */
2491 /* Propagate LF and start new line */
2492 msgbuf[t++] = msgbuf[h++];
2496 if (msgbuf[h] == ' ' || msgbuf[h] == '\t') {
2501 msgbuf[t++] = msgbuf[h++];
2505 msgbuf[t++] = msgbuf[h++];
2513 /*--- parse: Parse a SIP message ----*/
2514 static void parse(struct sip_request *req)
2516 /* Divide fields by NULL's */
2521 /* First header starts immediately */
2525 /* We've got a new header */
2529 printf("Header: %s (%d)\n", req->header[f], strlen(req->header[f]));
2531 if (ast_strlen_zero(req->header[f])) {
2532 /* Line by itself means we're now in content */
2536 if (f >= SIP_MAX_HEADERS - 1) {
2537 ast_log(LOG_WARNING, "Too many SIP headers...\n");
2540 req->header[f] = c + 1;
2541 } else if (*c == '\r') {
2542 /* Ignore but eliminate \r's */
2547 /* Check for last header */
2548 if (!ast_strlen_zero(req->header[f]))
2551 /* Now we process any mime content */
2556 /* We've got a new line */
2559 printf("Line: %s (%d)\n", req->line[f], strlen(req->line[f]));
2561 if (f >= SIP_MAX_LINES - 1) {
2562 ast_log(LOG_WARNING, "Too many SDP lines...\n");
2565 req->line[f] = c + 1;
2566 } else if (*c == '\r') {
2567 /* Ignore and eliminate \r's */
2572 /* Check for last line */
2573 if (!ast_strlen_zero(req->line[f]))
2577 ast_log(LOG_WARNING, "Odd content, extra stuff left over ('%s')\n", c);
2580 /*--- process_sdp: Process SIP SDP ---*/
2581 static int process_sdp(struct sip_pvt *p, struct sip_request *req)
2587 char iabuf[INET_ADDRSTRLEN];
2591 int peercapability, peernoncodeccapability;
2592 int vpeercapability=0, vpeernoncodeccapability=0;
2593 struct sockaddr_in sin;
2596 struct ast_hostent ahp;
2601 int debug=sip_debug_test_pvt(p);
2603 /* Update our last rtprx when we receive an SDP, too */
2604 time(&p->lastrtprx);
2606 /* Get codec and RTP info from SDP */
2607 if (strcasecmp(get_header(req, "Content-Type"), "application/sdp")) {
2608 ast_log(LOG_NOTICE, "Content is '%s', not 'application/sdp'\n", get_header(req, "Content-Type"));
2611 m = get_sdp(req, "m");
2612 c = get_sdp(req, "c");
2613 if (ast_strlen_zero(m) || ast_strlen_zero(c)) {
2614 ast_log(LOG_WARNING, "Insufficient information for SDP (m = '%s', c = '%s')\n", m, c);
2617 if (sscanf(c, "IN IP4 %256s", host) != 1) {
2618 ast_log(LOG_WARNING, "Invalid host in c= line, '%s'\n", c);
2621 /* XXX This could block for a long time, and block the main thread! XXX */
2622 hp = ast_gethostbyname(host, &ahp);
2624 ast_log(LOG_WARNING, "Unable to lookup host in c= line, '%s'\n", c);
2627 sdpLineNum_iterator_init(&iterator);
2629 while ((m = get_sdp_iterate(&iterator, req, "m"))[0] != '\0') {
2630 if ((sscanf(m, "audio %d RTP/AVP %n", &x, &len) == 1) ||
2631 (sscanf(m, "audio %d/%d RTP/AVP %n", &x, &y, &len) == 2)) {
2633 /* Scan through the RTP payload types specified in a "m=" line: */
2634 ast_rtp_pt_clear(p->rtp);
2636 while(!ast_strlen_zero(codecs)) {
2637 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2638 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2642 ast_verbose("Found RTP audio format %d\n", codec);
2643 ast_rtp_set_m_type(p->rtp, codec);
2645 /* Skip over any whitespace */
2646 while(*codecs && (*codecs < 33)) codecs++;
2650 ast_rtp_pt_clear(p->vrtp); /* Must be cleared in case no m=video line exists */
2652 if (p->vrtp && (sscanf(m, "video %d RTP/AVP %n", &x, &len) == 1)) {
2655 /* Scan through the RTP payload types specified in a "m=" line: */
2657 while(!ast_strlen_zero(codecs)) {
2658 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2659 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2663 ast_verbose("Found video format %s\n", ast_getformatname(codec));
2664 ast_rtp_set_m_type(p->vrtp, codec);
2666 /* Skip over any whitespace */
2667 while(*codecs && (*codecs < 33)) codecs++;
2672 /* RTP addresses and ports for audio and video */
2673 sin.sin_family = AF_INET;
2674 memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
2676 /* Setup audio port number */
2677 sin.sin_port = htons(portno);
2678 if (p->rtp && sin.sin_port) {
2679 ast_rtp_set_peer(p->rtp, &sin);
2681 ast_verbose("Peer audio RTP is at port %s:%d\n", ast_inet_ntoa(iabuf,sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2682 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));
2685 /* Setup video port number */
2686 sin.sin_port = htons(vportno);
2687 if (p->vrtp && sin.sin_port) {
2688 ast_rtp_set_peer(p->vrtp, &sin);
2690 ast_verbose("Peer video RTP is at port %s:%d\n", ast_inet_ntoa(iabuf,sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2691 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));
2695 /* Next, scan through each "a=rtpmap:" line, noting each
2696 * specified RTP payload type (with corresponding MIME subtype):
2698 sdpLineNum_iterator_init(&iterator);
2699 while ((a = get_sdp_iterate(&iterator, req, "a"))[0] != '\0') {
2700 char* mimeSubtype = ast_strdupa(a); /* ensures we have enough space */
2701 if (!strcasecmp(a, "sendonly")) {
2705 if (!strcasecmp(a, "sendrecv")) {
2708 if (sscanf(a, "rtpmap: %u %[^/]/", &codec, mimeSubtype) != 2) continue;
2710 ast_verbose("Found description format %s\n", mimeSubtype);
2711 /* Note: should really look at the 'freq' and '#chans' params too */
2712 ast_rtp_set_rtpmap_type(p->rtp, codec, "audio", mimeSubtype);
2714 ast_rtp_set_rtpmap_type(p->vrtp, codec, "video", mimeSubtype);
2717 /* Now gather all of the codecs that were asked for: */
2718 ast_rtp_get_current_formats(p->rtp,
2719 &peercapability, &peernoncodeccapability);
2721 ast_rtp_get_current_formats(p->vrtp,
2722 &vpeercapability, &vpeernoncodeccapability);
2723 p->jointcapability = p->capability & (peercapability | vpeercapability);
2724 p->peercapability = (peercapability | vpeercapability);
2725 p->noncodeccapability = noncodeccapability & peernoncodeccapability;
2728 /* shame on whoever coded this.... */
2729 const unsigned slen=512;
2730 char s1[slen], s2[slen], s3[slen], s4[slen];
2732 ast_verbose("Capabilities: us - %s, peer - audio=%s/video=%s, combined - %s\n",
2733 ast_getformatname_multiple(s1, slen, p->capability),
2734 ast_getformatname_multiple(s2, slen, peercapability),
2735 ast_getformatname_multiple(s3, slen, vpeercapability),
2736 ast_getformatname_multiple(s4, slen, p->jointcapability));
2738 ast_verbose("Non-codec capabilities: us - %s, peer - %s, combined - %s\n",
2739 ast_getformatname_multiple(s1, slen, noncodeccapability),
2740 ast_getformatname_multiple(s2, slen, peernoncodeccapability),
2741 ast_getformatname_multiple(s3, slen, p->noncodeccapability));
2743 if (!p->jointcapability) {
2744 ast_log(LOG_WARNING, "No compatible codecs!\n");
2748 if (!(p->owner->nativeformats & p->jointcapability)) {
2749 const unsigned slen=512;
2750 char s1[slen], s2[slen];
2751 ast_log(LOG_DEBUG, "Oooh, we need to change our formats since our peer supports only %s and not %s\n",
2752 ast_getformatname_multiple(s1, slen, p->jointcapability),
2753 ast_getformatname_multiple(s2, slen, p->owner->nativeformats));
2754 p->owner->nativeformats = ast_codec_choose(&p->prefs, p->jointcapability, 1);
2755 ast_set_read_format(p->owner, p->owner->readformat);
2756 ast_set_write_format(p->owner, p->owner->writeformat);
2758 if (ast_bridged_channel(p->owner)) {
2759 /* Turn on/off music on hold if we are holding/unholding */
2760 if (sin.sin_addr.s_addr && !sendonly) {
2761 ast_moh_stop(ast_bridged_channel(p->owner));
2763 ast_moh_start(ast_bridged_channel(p->owner), NULL);
2771 /*--- add_header: Add header to SIP message */
2772 static int add_header(struct sip_request *req, char *var, char *value)
2775 char *shortname = "";
2776 if (req->len >= sizeof(req->data) - 4) {
2777 ast_log(LOG_WARNING, "Out of space, can't add anymore (%s:%s)\n", var, value);
2781 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2785 req->header[req->headers] = req->data + req->len;
2786 if (compactheaders) {
2787 for (x=0;x<sizeof(aliases) / sizeof(aliases[0]); x++)
2788 if (!strcasecmp(aliases[x].fullname, var))
2789 shortname = aliases[x].shortname;
2791 if(!ast_strlen_zero(shortname)) {
2792 snprintf(req->header[req->headers], sizeof(req->data) - req->len - 4, "%s: %s\r\n", shortname, value);
2794 snprintf(req->header[req->headers], sizeof(req->data) - req->len - 4, "%s: %s\r\n", var, value);
2796 req->len += strlen(req->header[req->headers]);
2797 if (req->headers < SIP_MAX_HEADERS)
2800 ast_log(LOG_WARNING, "Out of header space\n");
2806 /*--- add_blank_header: Add blank header to SIP message */
2807 static int add_blank_header(struct sip_request *req)
2809 if (req->len >= sizeof(req->data) - 4) {
2810 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2814 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2817 req->header[req->headers] = req->data + req->len;
2818 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "\r\n");
2819 req->len += strlen(req->header[req->headers]);
2820 if (req->headers < SIP_MAX_HEADERS)
2823 ast_log(LOG_WARNING, "Out of header space\n");
2829 /*--- add_line: Add content (not header) to SIP message */
2830 static int add_line(struct sip_request *req, char *line)
2832 if (req->len >= sizeof(req->data) - 4) {
2833 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2837 /* Add extra empty return */
2838 snprintf(req->data + req->len, sizeof(req->data) - req->len, "\r\n");
2839 req->len += strlen(req->data + req->len);
2841 req->line[req->lines] = req->data + req->len;
2842 snprintf(req->line[req->lines], sizeof(req->data) - req->len, "%s", line);
2843 req->len += strlen(req->line[req->lines]);
2844 if (req->lines < SIP_MAX_LINES)
2847 ast_log(LOG_WARNING, "Out of line space\n");
2853 /*--- copy_header: Copy one header field from one request to another */
2854 static int copy_header(struct sip_request *req, struct sip_request *orig, char *field)
2857 tmp = get_header(orig, field);
2858 if (!ast_strlen_zero(tmp)) {
2859 /* Add what we're responding to */
2860 return add_header(req, field, tmp);
2862 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2866 /*--- copy_all_header: Copy all headers from one request to another ---*/
2867 static int copy_all_header(struct sip_request *req, struct sip_request *orig, char *field)
2873 tmp = __get_header(orig, field, &start);
2874 if (!ast_strlen_zero(tmp)) {
2875 /* Add what we're responding to */
2876 add_header(req, field, tmp);
2881 return copied ? 0 : -1;
2884 /*--- copy_via_headers: Copy SIP VIA Headers from one request to another ---*/
2885 static int copy_via_headers(struct sip_pvt *p, struct sip_request *req, struct sip_request *orig, char *field)
2887 char tmp[256]="", *oh, *end;
2891 char iabuf[INET_ADDRSTRLEN];
2893 oh = __get_header(orig, field, &start);
2894 if (!ast_strlen_zero(oh)) {
2896 strncpy(tmp, oh, sizeof(tmp) - 1);
2897 oh = strstr(tmp, ";rport");
2899 end = strchr(oh + 1, ';');
2901 memmove(oh, end, strlen(end) + 1);
2905 if (!copied && (p->nat == SIP_NAT_ALWAYS)) {
2906 /* Whoo hoo! Now we can indicate port address translation too! Just
2907 another RFC (RFC3581). I'll leave the original comments in for
2909 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));
2910 add_header(req, field, new);
2912 /* Add what we're responding to */
2913 add_header(req, field, tmp);
2920 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2926 /*--- add_route: Add route header into request per learned route ---*/
2927 static void add_route(struct sip_request *req, struct sip_route *route)
2930 int n, rem = 255; /* sizeof(r)-1: Room for terminating 0 */
2936 n = strlen(route->hop);
2937 if ((n+3)>rem) break;
2943 strncpy(p, route->hop, rem); p += n;
2946 route = route->next;
2949 add_header(req, "Route", r);
2952 /*--- set_destination: Set destination from SIP URI ---*/
2953 static void set_destination(struct sip_pvt *p, char *uri)
2955 char *h, *maddr, hostname[256] = "";
2956 char iabuf[INET_ADDRSTRLEN];
2959 struct ast_hostent ahp;
2960 int debug=sip_debug_test_pvt(p);
2962 /* Parse uri to h (host) and port - uri is already just the part inside the <> */
2963 /* general form we are expecting is sip[s]:username[:password]@host[:port][;...] */
2966 ast_verbose("set_destination: Parsing <%s> for address/port to send to\n", uri);
2968 /* Find and parse hostname */
2969 h = strchr(uri, '@');
2974 if (strncmp(h, "sip:", 4) == 0)
2976 else if (strncmp(h, "sips:", 5) == 0)
2979 hn = strcspn(h, ":;>");
2980 if (hn > (sizeof(hostname) - 1)) hn = sizeof(hostname) - 1;
2981 strncpy(hostname, h, hn); hostname[hn] = '\0'; /* safe */
2984 /* Is "port" present? if not default to 5060 */
2988 port = strtol(h, &h, 10);
2993 /* Got the hostname:port - but maybe there's a "maddr=" to override address? */
2994 maddr = strstr(h, "maddr=");
2997 hn = strspn(maddr, "0123456789.");
2998 if (hn > (sizeof(hostname) - 1)) hn = sizeof(hostname) - 1;
2999 strncpy(hostname, maddr, hn); hostname[hn] = '\0'; /* safe */
3002 hp = ast_gethostbyname(hostname, &ahp);
3004 ast_log(LOG_WARNING, "Can't find address for host '%s'\n", hostname);
3007 p->sa.sin_family = AF_INET;
3008 memcpy(&p->sa.sin_addr, hp->h_addr, sizeof(p->sa.sin_addr));
3009 p->sa.sin_port = htons(port);
3011 ast_verbose("set_destination: set destination to %s, port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr), port);
3014 /*--- init_resp: Initialize SIP response, based on SIP request ---*/
3015 static int init_resp(struct sip_request *req, char *resp, struct sip_request *orig)
3017 /* Initialize a response */
3018 if (req->headers || req->len) {
3019 ast_log(LOG_WARNING, "Request already initialized?!?\n");
3022 req->header[req->headers] = req->data + req->len;
3023 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "SIP/2.0 %s\r\n", resp);
3024 req->len += strlen(req->header[req->headers]);
3025 if (req->headers < SIP_MAX_HEADERS)
3028 ast_log(LOG_WARNING, "Out of header space\n");
3032 /*--- init_req: Initialize SIP request ---*/
3033 static int init_req(struct sip_request *req, char *resp, char *recip)
3035 /* Initialize a response */
3036 if (req->headers || req->len) {
3037 ast_log(LOG_WARNING, "Request already initialized?!?\n");
3040 req->header[req->headers] = req->data + req->len;
3041 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "%s %s SIP/2.0\r\n", resp, recip);
3042 req->len += strlen(req->header[req->headers]);
3043 if (req->headers < SIP_MAX_HEADERS)
3046 ast_log(LOG_WARNING, "Out of header space\n");
3051 static int respprep(struct sip_request *resp, struct sip_pvt *p, char *msg, struct sip_request *req)
3053 char newto[256] = "", *ot;
3055 memset(resp, 0, sizeof(*resp));
3056 init_resp(resp, msg, req);
3057 copy_via_headers(p, resp, req, "Via");
3058 if (msg[0] == '2') copy_all_header(resp, req, "Record-Route");
3059 copy_header(resp, req, "From");
3060 ot = get_header(req, "To");
3061 if (!strstr(ot, "tag=")) {
3062 /* Add the proper tag if we don't have it already. If they have specified
3063 their tag, use it. Otherwise, use our own tag */
3064 if (!ast_strlen_zero(p->theirtag) && p->outgoing)
3065 snprintf(newto, sizeof(newto), "%s;tag=%s", ot, p->theirtag);
3066 else if (p->tag && !p->outgoing)
3067 snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag);
3069 strncpy(newto, ot, sizeof(newto) - 1);
3070 newto[sizeof(newto) - 1] = '\0';
3074 add_header(resp, "To", ot);
3075 copy_header(resp, req, "Call-ID");
3076 copy_header(resp, req, "CSeq");
3077 add_header(resp, "User-Agent", default_useragent);
3078 add_header(resp, "Allow", ALLOWED_METHODS);
3080 /* For registration responses, we also need expiry and
3084 snprintf(contact, sizeof(contact), "%s;expires=%d", p->our_contact, p->expiry);
3085 snprintf(tmp, sizeof(tmp), "%d", p->expiry);
3086 add_header(resp, "Expires", tmp);
3087 add_header(resp, "Contact", contact);
3089 add_header(resp, "Contact", p->our_contact);
3094 static int reqprep(struct sip_request *req, struct sip_pvt *p, char *msg, int seqno, int newbranch)
3096 struct sip_request *orig = &p->initreq;
3097 char stripped[80] ="";
3100 char iabuf[INET_ADDRSTRLEN];
3104 memset(req, 0, sizeof(struct sip_request));
3106 snprintf(p->lastmsg, sizeof(p->lastmsg), "Tx: %s", msg);
3114 p->branch ^= rand();
3115 if (p->nat & SIP_NAT_RFC3581)
3116 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);
3117 else /* Some implementations (e.g. Uniden UIP200) can't handle rport being in the message!! */
3118 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);
3120 if (!strcasecmp(msg, "CANCEL") || !strcasecmp(msg, "ACK")) {
3121 /* MUST use original URI */
3122 c = p->initreq.rlPart2;
3123 } else if (!ast_strlen_zero(p->uri)) {
3127 strncpy(stripped, get_header(orig, "To"), sizeof(stripped) - 1);
3129 strncpy(stripped, get_header(orig, "From"), sizeof(stripped) - 1);
3131 c = strchr(stripped, '<');
3143 init_req(req, msg, c);
3145 snprintf(tmp, sizeof(tmp), "%d %s", seqno, msg);
3147 add_header(req, "Via", p->via);
3149 set_destination(p, p->route->hop);
3150 add_route(req, p->route->next);
3153 ot = get_header(orig, "To");
3154 of = get_header(orig, "From");
3156 /* Add tag *unless* this is a CANCEL, in which case we need to send it exactly
3157 as our original request, including tag (or presumably lack thereof) */
3158 if (!strstr(ot, "tag=") && strcasecmp(msg, "CANCEL")) {
3159 /* Add the proper tag if we don't have it already. If they have specified
3160 their tag, use it. Otherwise, use our own tag */
3161 if (p->outgoing && !ast_strlen_zero(p->theirtag))
3162 snprintf(newto, sizeof(newto), "%s;tag=%s", ot, p->theirtag);
3163 else if (!p->outgoing)
3164 snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag);
3166 snprintf(newto, sizeof(newto), "%s", ot);
3171 add_header(req, "From", of);
3172 add_header(req, "To", ot);
3174 add_header(req, "From", ot);
3175 add_header(req, "To", of);
3177 add_header(req, "Contact", p->our_contact);
3178 copy_header(req, orig, "Call-ID");
3179 add_header(req, "CSeq", tmp);
3181 add_header(req, "User-Agent", default_useragent);
3185 static int __transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req, int reliable)
3187 struct sip_request resp;
3189 if (reliable && (sscanf(get_header(req, "CSeq"), "%i ", &seqno) != 1)) {
3190 ast_log(LOG_WARNING, "Unable to determine sequence number from '%s'\n", get_header(req, "CSeq"));
3193 respprep(&resp, p, msg, req);
3194 add_header(&resp, "Content-Length", "0");
3195 add_blank_header(&resp);
3196 return send_response(p, &resp, reliable, seqno);
3199 /*--- transmit_response: Transmit response, no retransmits */
3200 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req)
3202 return __transmit_response(p, msg, req, 0);
3205 /*--- transmit_response: Transmit response, Make sure you get a reply */
3206 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal)
3208 return __transmit_response(p, msg, req, fatal ? 2 : 1);
3211 /*--- append_date: Append date to SIP message ---*/
3212 static void append_date(struct sip_request *req)
3219 strftime(tmpdat, sizeof(tmpdat), "%a, %d %b %Y %T GMT", &tm);
3220 add_header(req, "Date", tmpdat);
3223 /*--- transmit_response_with_date: Append date and content length before transmitting response ---*/
3224 static int transmit_response_with_date(struct sip_pvt *p, char *msg, struct sip_request *req)
3226 struct sip_request resp;
3227 respprep(&resp, p, msg, req);
3229 add_header(&resp, "Content-Length", "0");
3230 add_blank_header(&resp);
3231 return send_response(p, &resp, 0, 0);
3234 /*--- transmit_response_with_allow: Append Accept header, content length before transmitting response ---*/
3235 static int transmit_response_with_allow(struct sip_pvt *p, char *msg, struct sip_request *req, int reliable)
3237 struct sip_request resp;
3238 respprep(&resp, p, msg, req);
3239 add_header(&resp, "Accept", "application/sdp");
3240 add_header(&resp, "Content-Length", "0");
3241 add_blank_header(&resp);
3242 return send_response(p, &resp, reliable, 0);
3245 /* transmit_response_with_auth: Respond with authorization request */
3246 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *randdata, int reliable, char *header)
3248 struct sip_request resp;
3251 if (reliable && (sscanf(get_header(req, "CSeq"), "%i ", &seqno) != 1)) {
3252 ast_log(LOG_WARNING, "Unable to determine sequence number from '%s'\n", get_header(req, "CSeq"));
3255 snprintf(tmp, sizeof(tmp), "Digest realm=\"%s\", nonce=\"%s\"", global_realm, randdata);
3256 respprep(&resp, p, msg, req);
3257 add_header(&resp, header, tmp);
3258 add_header(&resp, "Content-Length", "0");
3259 add_blank_header(&resp);
3260 return send_response(p, &resp, reliable, seqno);
3263 /*--- add_text: Add text body to SIP message ---*/
3264 static int add_text(struct sip_request *req, char *text)
3266 /* XXX Convert \n's to \r\n's XXX */
3267 int len = strlen(text);
3269 snprintf(clen, sizeof(clen), "%d", len);
3270 add_header(req, "Content-Type", "text/plain");
3271 add_header(req, "Content-Length", clen);
3272 add_line(req, text);
3276 /*--- add_digit: add DTMF INFO tone to sip message ---*/
3277 /* Always adds default duration 250 ms, regardless of what came in over the line */
3278 static int add_digit(struct sip_request *req, char digit)
3283 snprintf(tmp, sizeof(tmp), "Signal=%c\r\nDuration=250\r\n", digit);
3285 snprintf(clen, sizeof(clen), "%d", len);
3286 add_header(req, "Content-Type", "application/dtmf-relay");
3287 add_header(req, "Content-Length", clen);
3292 /*--- add_sdp: Add Session Description Protocol message ---*/
3293 static int add_sdp(struct sip_request *resp, struct sip_pvt *p)
3298 int alreadysent = 0;
3300 struct sockaddr_in sin;
3301 struct sockaddr_in vsin;
3311 char iabuf[INET_ADDRSTRLEN];
3313 int capability = 0 ;
3314 struct sockaddr_in dest;
3315 struct sockaddr_in vdest = { 0, };
3318 debug = sip_debug_test_pvt(p);
3320 /* XXX We break with the "recommendation" and send our IP, in order that our
3321 peer doesn't have to ast_gethostbyname() us XXX */
3324 ast_log(LOG_WARNING, "No way to add SDP without an RTP structure\n");
3327 capability = p->capability;
3329 if (!p->sessionid) {
3330 p->sessionid = getpid();
3331 p->sessionversion = p->sessionid;
3333 p->sessionversion++;
3334 ast_rtp_get_us(p->rtp, &sin);
3336 ast_rtp_get_us(p->vrtp, &vsin);
3338 if (p->redirip.sin_addr.s_addr) {
3339 dest.sin_port = p->redirip.sin_port;
3340 dest.sin_addr = p->redirip.sin_addr;
3342 capability = p->redircodecs;
3344 dest.sin_addr = p->ourip;
3345 dest.sin_port = sin.sin_port;
3348 /* Determine video destination */
3350 if (p->vredirip.sin_addr.s_addr) {
3351 vdest.sin_port = p->vredirip.sin_port;
3352 vdest.sin_addr = p->vredirip.sin_addr;
3354 vdest.sin_addr = p->ourip;
3355 vdest.sin_port = vsin.sin_port;
3359 ast_verbose("We're at %s port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ntohs(sin.sin_port));
3361 ast_verbose("Video is at %s port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ntohs(vsin.sin_port));
3363 snprintf(v, sizeof(v), "v=0\r\n");
3364 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));
3365 snprintf(s, sizeof(s), "s=session\r\n");
3366 snprintf(c, sizeof(c), "c=IN IP4 %s\r\n", ast_inet_ntoa(iabuf, sizeof(iabuf), dest.sin_addr));
3367 snprintf(t, sizeof(t), "t=0 0\r\n");
3368 snprintf(m, sizeof(m), "m=audio %d RTP/AVP", ntohs(dest.sin_port));
3369 snprintf(m2, sizeof(m2), "m=video %d RTP/AVP", ntohs(vdest.sin_port));
3370 /* Prefer the codec we were requested to use, first, no matter what */
3371 if (capability & p->prefcodec) {
3373 ast_verbose("Answering/Requesting with root capability %d\n", p->prefcodec);
3374 codec = ast_rtp_lookup_code(p->rtp, 1, p->prefcodec);
3376 snprintf(costr, sizeof(costr), " %d", codec);
3377 if (p->prefcodec <= AST_FORMAT_MAX_AUDIO) {
3378 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3379 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, p->prefcodec));
3380 strncpy(a, costr, sizeof(a) - 1);
3382 strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
3383 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, p->prefcodec));
3384 strncpy(a2, costr, sizeof(a2) - 1);
3387 alreadysent |= p->prefcodec;
3389 /* Start by sending our preferred codecs */
3390 for (x = 0 ; x < 32 ; x++) {
3391 if(!(pref_codec = ast_codec_pref_index(&p->prefs,x)))
3393 if ((capability & pref_codec) && !(alreadysent & pref_codec)) {
3395 ast_verbose("Answering with preferred capability 0x%x (%s)\n", pref_codec, ast_getformatname(pref_codec));
3396 codec = ast_rtp_lookup_code(p->rtp, 1, pref_codec);
3398 snprintf(costr, sizeof(costr), " %d", codec);
3399 if (pref_codec <= AST_FORMAT_MAX_AUDIO) {
3400 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3401 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, pref_codec));
3402 strncat(a, costr, sizeof(a) - strlen(a) - 1);
3404 strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
3405 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, pref_codec));
3406 strncat(a2, costr, sizeof(a2) - strlen(a) - 1);
3410 alreadysent |= pref_codec;
3413 /* Now send any other common codecs, and non-codec formats: */
3414 for (x = 1; x <= ((videosupport && p->vrtp) ? AST_FORMAT_MAX_VIDEO : AST_FORMAT_MAX_AUDIO); x <<= 1) {
3415 if ((capability & x) && !(alreadysent & x)) {
3417 ast_verbose("Answering with capability 0x%x (%s)\n", x, ast_getformatname(x));
3418 codec = ast_rtp_lookup_code(p->rtp, 1, x);
3420 snprintf(costr, sizeof(costr), " %d", codec);
3421 if (x <= AST_FORMAT_MAX_AUDIO) {
3422 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3423 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, x));
3424 strncat(a, costr, sizeof(a) - strlen(a) - 1);
3426 strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
3427 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, x));
3428 strncat(a2, costr, sizeof(a2) - strlen(a2) - 1);
3433 for (x = 1; x <= AST_RTP_MAX; x <<= 1) {
3434 if (p->noncodeccapability & x) {
3436 ast_verbose("Answering with non-codec capability 0x%x (%s)\n", x, ast_rtp_lookup_mime_subtype(0, x));
3437 codec = ast_rtp_lookup_code(p->rtp, 0, x);
3439 snprintf(costr, sizeof(costr), " %d", codec);
3440 strncat(m, costr, sizeof(m) - strlen(m) - 1);