2 * Asterisk -- A telephony toolkit for Linux.
4 * Implementation of Session Initiation Protocol
6 * Copyright (C) 2004 - 2005, 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.h>
22 #include <asterisk/logger.h>
23 #include <asterisk/module.h>
24 #include <asterisk/pbx.h>
25 #include <asterisk/options.h>
26 #include <asterisk/lock.h>
27 #include <asterisk/sched.h>
28 #include <asterisk/io.h>
29 #include <asterisk/rtp.h>
30 #include <asterisk/acl.h>
31 #include <asterisk/manager.h>
32 #include <asterisk/callerid.h>
33 #include <asterisk/cli.h>
34 #include <asterisk/md5.h>
35 #include <asterisk/app.h>
36 #include <asterisk/musiconhold.h>
37 #include <asterisk/dsp.h>
38 #include <asterisk/features.h>
39 #include <asterisk/acl.h>
40 #include <asterisk/srv.h>
41 #include <asterisk/astdb.h>
42 #include <asterisk/causes.h>
43 #include <asterisk/utils.h>
44 #include <asterisk/file.h>
45 #include <asterisk/astobj.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>
64 #ifndef DEFAULT_USERAGENT
65 #define DEFAULT_USERAGENT "Asterisk PBX"
68 #define VIDEO_CODEC_MASK 0x1fc0000 /* Video codecs from H.261 thru AST_FORMAT_MAX_VIDEO */
70 #define IPTOS_MINCOST 0x02
73 /* #define VOCAL_DATA_HACK */
76 #define DEFAULT_DEFAULT_EXPIRY 120
77 #define DEFAULT_MAX_EXPIRY 3600
78 #define DEFAULT_REGISTRATION_TIMEOUT 20
80 /* guard limit must be larger than guard secs */
81 /* guard min must be < 1000, and should be >= 250 */
82 #define EXPIRY_GUARD_SECS 15 /* How long before expiry do we reregister */
83 #define EXPIRY_GUARD_LIMIT 30 /* Below here, we use EXPIRY_GUARD_PCT instead of
85 #define EXPIRY_GUARD_MIN 500 /* This is the minimum guard time applied. If
86 GUARD_PCT turns out to be lower than this, it
87 will use this time instead.
88 This is in milliseconds. */
89 #define EXPIRY_GUARD_PCT 0.20 /* Percentage of expires timeout to use when
90 below EXPIRY_GUARD_LIMIT */
92 static int max_expiry = DEFAULT_MAX_EXPIRY;
93 static int default_expiry = DEFAULT_DEFAULT_EXPIRY;
96 #define MAX(a,b) ((a) > (b) ? (a) : (b))
99 #define CALLERID_UNKNOWN "Unknown"
103 #define DEFAULT_MAXMS 2000 /* Must be faster than 2 seconds by default */
104 #define DEFAULT_FREQ_OK 60 * 1000 /* How often to check for the host to be up */
105 #define DEFAULT_FREQ_NOTOK 10 * 1000 /* How often to check, if the host is down... */
107 #define DEFAULT_RETRANS 1000 /* How frequently to retransmit */
108 #define MAX_RETRANS 5 /* Try only 5 times for retransmissions */
111 #define DEBUG_READ 0 /* Recieved data */
112 #define DEBUG_SEND 1 /* Transmit data */
114 static char *desc = "Session Initiation Protocol (SIP)";
115 static char *channeltype = "SIP";
116 static char *tdesc = "Session Initiation Protocol (SIP)";
117 static char *config = "sip.conf";
118 static char *notify_config = "sip_notify.conf";
120 #define DEFAULT_SIP_PORT 5060 /* From RFC 2543 */
121 #define SIP_MAX_PACKET 4096 /* Also from RFC 2543, should sub headers tho */
123 #define ALLOWED_METHODS "INVITE, ACK, CANCEL, OPTIONS, BYE, REFER"
125 static char default_useragent[AST_MAX_EXTENSION] = DEFAULT_USERAGENT;
127 #define DEFAULT_CONTEXT "default"
128 static char default_context[AST_MAX_EXTENSION] = DEFAULT_CONTEXT;
130 static char default_language[MAX_LANGUAGE] = "";
132 #define DEFAULT_CALLERID "asterisk"
133 static char default_callerid[AST_MAX_EXTENSION] = DEFAULT_CALLERID;
135 static char default_fromdomain[AST_MAX_EXTENSION] = "";
137 #define DEFAULT_NOTIFYMIME "application/simple-message-summary"
138 static char default_notifymime[AST_MAX_EXTENSION] = DEFAULT_NOTIFYMIME;
140 static struct ast_flags global_flags = {0}; /* global SIP_ flags */
142 static int srvlookup = 0; /* SRV Lookup on or off. Default is off, RFC behavior is on */
144 static int pedanticsipchecking = 0; /* Extra checking ? Default off */
146 static int autocreatepeer = 0; /* Auto creation of peers at registration? Default off. */
148 static int relaxdtmf = 0;
150 static int global_rtptimeout = 0;
152 static int global_rtpholdtimeout = 0;
154 static int global_rtpkeepalive = 0;
156 static int global_reg_timeout = DEFAULT_REGISTRATION_TIMEOUT;
158 /* Object counters */
159 static int suserobjs = 0;
160 static int ruserobjs = 0;
161 static int speerobjs = 0;
162 static int rpeerobjs = 0;
163 static int apeerobjs = 0;
164 static int regobjs = 0;
166 static int global_allowguest = 0; /* allow unauthenticated users/peers to connect? */
168 #define DEFAULT_MWITIME 10
169 static int global_mwitime = DEFAULT_MWITIME; /* Time between MWI checks for peers */
171 static int usecnt =0;
172 AST_MUTEX_DEFINE_STATIC(usecnt_lock);
175 /* Protect the interface list (of sip_pvt's) */
176 AST_MUTEX_DEFINE_STATIC(iflock);
178 /* Protect the monitoring thread, so only one process can kill or start it, and not
179 when it's doing something critical. */
180 AST_MUTEX_DEFINE_STATIC(netlock);
182 AST_MUTEX_DEFINE_STATIC(monlock);
184 /* This is the thread for the monitor which checks for input on the channels
185 which are not currently in use. */
186 static pthread_t monitor_thread = AST_PTHREADT_NULL;
188 static int restart_monitor(void);
190 /* Codecs that we support by default: */
191 static int global_capability = AST_FORMAT_ULAW | AST_FORMAT_ALAW | AST_FORMAT_GSM | AST_FORMAT_H263;
192 static int noncodeccapability = AST_RTP_DTMF;
194 static struct in_addr __ourip;
195 static struct sockaddr_in outboundproxyip;
198 static int sipdebug = 0;
199 static struct sockaddr_in debugaddr;
203 static int videosupport = 0;
205 static int compactheaders = 0; /* send compact sip headers */
207 static int recordhistory = 0; /* Record SIP history. Off by default */
209 static char global_musicclass[MAX_LANGUAGE] = ""; /* Global music on hold class */
210 #define DEFAULT_REALM "asterisk"
211 static char global_realm[AST_MAX_EXTENSION] = DEFAULT_REALM; /* Default realm */
212 static char regcontext[AST_MAX_EXTENSION] = ""; /* Context for auto-extensions */
215 #define DEFAULT_EXPIRY 900
216 static int expiry = DEFAULT_EXPIRY;
218 static struct sched_context *sched;
219 static struct io_context *io;
220 /* The private structures of the sip channels are linked for
221 selecting outgoing channels */
223 #define SIP_MAX_HEADERS 64
224 #define SIP_MAX_LINES 64
228 #define DEC_OUT_USE 2
229 #define INC_OUT_USE 3
231 static struct ast_codec_pref prefs;
234 /* sip_request: The data grabbed from the UDP socket */
236 char *rlPart1; /* SIP Method Name or "SIP/2.0" protocol version */
237 char *rlPart2; /* The Request URI or Response Status */
238 int len; /* Length */
239 int headers; /* # of SIP Headers */
240 char *header[SIP_MAX_HEADERS];
241 int lines; /* SDP Content */
242 char *line[SIP_MAX_LINES];
243 char data[SIP_MAX_PACKET];
249 struct sip_route *next;
255 struct sip_history *next;
258 #define SIP_ALREADYGONE (1 << 0) /* Whether or not we've already been destroyed by our peer */
259 #define SIP_NEEDDESTROY (1 << 1) /* if we need to be destroyed */
260 #define SIP_NOVIDEO (1 << 2) /* Didn't get video in invite, don't offer */
261 #define SIP_RINGING (1 << 3) /* Have sent 180 ringing */
262 #define SIP_PROGRESS_SENT (1 << 4) /* Have sent 183 message progress */
263 #define SIP_NEEDREINVITE (1 << 5) /* Do we need to send another reinvite? */
264 #define SIP_PENDINGBYE (1 << 6) /* Need to send bye after we ack? */
265 #define SIP_GOTREFER (1 << 7) /* Got a refer? */
266 #define SIP_PROMISCREDIR (1 << 8) /* Promiscuous redirection */
267 #define SIP_TRUSTRPID (1 << 9) /* Trust RPID headers? */
268 #define SIP_USEREQPHONE (1 << 10) /* Add user=phone to numeric URI. Default off */
269 #define SIP_REALTIME (1 << 11) /* Flag for realtime users */
270 #define SIP_USECLIENTCODE (1 << 12) /* Trust X-ClientCode info message */
271 #define SIP_OUTGOING (1 << 13) /* Is this an outgoing call? */
272 #define SIP_SELFDESTRUCT (1 << 14)
273 #define SIP_DYNAMIC (1 << 15) /* Is this a dynamic peer? */
274 /* --- Choices for DTMF support in SIP channel */
275 #define SIP_DTMF (3 << 16) /* three settings, uses two bits */
276 #define SIP_DTMF_RFC2833 (0 << 16) /* RTP DTMF */
277 #define SIP_DTMF_INBAND (1 << 16) /* Inband audio, only for ULAW/ALAW */
278 #define SIP_DTMF_INFO (2 << 16) /* SIP Info messages */
280 #define SIP_NAT (3 << 18) /* four settings, uses two bits */
281 #define SIP_NAT_NEVER (0 << 18) /* No nat support */
282 #define SIP_NAT_RFC3581 (1 << 18)
283 #define SIP_NAT_ROUTE (2 << 18)
284 #define SIP_NAT_ALWAYS (3 << 18)
285 /* re-INVITE related settings */
286 #define SIP_REINVITE (3 << 20) /* two bits used */
287 #define SIP_CAN_REINVITE (1 << 20) /* allow peers to be reinvited to send media directly p2p */
288 #define SIP_REINVITE_UPDATE (2 << 20) /* use UPDATE (RFC3311) when reinviting this peer */
289 /* "insecure" settings */
290 #define SIP_INSECURE (3 << 22) /* three settings, uses two bits */
291 #define SIP_SECURE (0 << 22)
292 #define SIP_INSECURE_NORMAL (1 << 22)
293 #define SIP_INSECURE_VERY (2 << 22)
294 /* Sending PROGRESS in-band settings */
295 #define SIP_PROG_INBAND (3 << 24) /* three settings, uses two bits */
296 #define SIP_PROG_INBAND_NEVER (0 << 24)
297 #define SIP_PROG_INBAND_NO (1 << 24)
298 #define SIP_PROG_INBAND_YES (2 << 24)
299 /* Open Settlement Protocol authentication */
300 #define SIP_OSPAUTH (3 << 26) /* three settings, uses two bits */
301 #define SIP_OSPAUTH_NO (0 << 26)
302 #define SIP_OSPAUTH_YES (1 << 26)
303 #define SIP_OSPAUTH_EXCLUSIVE (2 << 26)
305 /* sip_pvt: PVT structures are used for each SIP conversation, ie. a call */
306 static struct sip_pvt {
307 ast_mutex_t lock; /* Channel private lock */
308 char callid[80]; /* Global CallID */
309 char randdata[80]; /* Random data */
310 struct ast_codec_pref prefs; /* codec prefs */
311 unsigned int ocseq; /* Current outgoing seqno */
312 unsigned int icseq; /* Current incoming seqno */
313 ast_group_t callgroup; /* Call group */
314 ast_group_t pickupgroup; /* Pickup group */
315 int lastinvite; /* Last Cseq of invite */
316 unsigned int flags; /* SIP_ flags */
317 int capability; /* Special capability (codec) */
318 int jointcapability; /* Supported capability at both ends (codecs ) */
319 int peercapability; /* Supported peer capability */
320 int prefcodec; /* Preferred codec (outbound only) */
321 int noncodeccapability;
322 int callingpres; /* Calling presentation */
323 int authtries; /* Times we've tried to authenticate */
324 int expiry; /* How long we take to expire */
325 int branch; /* One random number */
326 int tag; /* Another random number */
327 int sessionid; /* SDP Session ID */
328 int sessionversion; /* SDP Session Version */
329 struct sockaddr_in sa; /* Our peer */
330 struct sockaddr_in redirip; /* Where our RTP should be going if not to us */
331 struct sockaddr_in vredirip; /* Where our Video RTP should be going if not to us */
332 int redircodecs; /* Redirect codecs */
333 struct sockaddr_in recv; /* Received as */
334 struct in_addr ourip; /* Our IP */
335 struct ast_channel *owner; /* Who owns us */
336 char exten[AST_MAX_EXTENSION]; /* Extension where to start */
337 char refer_to[AST_MAX_EXTENSION]; /* Place to store REFER-TO extension */
338 char referred_by[AST_MAX_EXTENSION]; /* Place to store REFERRED-BY extension */
339 char refer_contact[AST_MAX_EXTENSION]; /* Place to store Contact info from a REFER extension */
340 struct sip_pvt *refer_call; /* Call we are referring */
341 struct sip_route *route; /* Head of linked list of routing steps (fm Record-Route) */
342 int route_persistant; /* Is this the "real" route? */
343 char from[256]; /* The From: header */
344 char useragent[256]; /* User agent in SIP request */
345 char context[AST_MAX_EXTENSION]; /* Context for this call */
346 char fromdomain[AST_MAX_EXTENSION]; /* Domain to show in the from field */
347 char fromuser[AST_MAX_EXTENSION]; /* User to show in the user field */
348 char fromname[AST_MAX_EXTENSION]; /* Name to show in the user field */
349 char tohost[AST_MAX_EXTENSION]; /* Host we should put in the "to" field */
350 char language[MAX_LANGUAGE]; /* Default language for this call */
351 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
352 char rdnis[256]; /* Referring DNIS */
353 char theirtag[256]; /* Their tag */
356 char authname[256]; /* Who we use for authentication */
357 char uri[256]; /* Original requested URI */
358 char okcontacturi[256]; /* URI from the 200 OK on INVITE */
359 char peersecret[256]; /* Password */
360 char peermd5secret[256];
361 char cid_num[256]; /* Caller*ID */
362 char cid_name[256]; /* Caller*ID */
363 char via[256]; /* Via: header */
364 char fullcontact[128]; /* The Contact: that the UA registers with us */
365 char accountcode[20]; /* Account code */
366 char our_contact[256]; /* Our contact header */
367 char realm[256]; /* Authorization realm */
368 char nonce[256]; /* Authorization nonce */
369 char opaque[256]; /* Opaque nonsense */
370 char qop[80]; /* Quality of Protection, since SIP wasn't complicated enough yet. */
371 char domain[256]; /* Authorization domain */
372 char lastmsg[256]; /* Last Message sent/received */
373 int amaflags; /* AMA Flags */
374 int pendinginvite; /* Any pending invite */
376 int osphandle; /* OSP Handle for call */
377 time_t ospstart; /* OSP Start time */
379 struct sip_request initreq; /* Initial request */
381 int maxtime; /* Max time for first response */
382 int initid; /* Auto-congest ID if appropriate */
383 int autokillid; /* Auto-kill ID */
384 time_t lastrtprx; /* Last RTP received */
385 time_t lastrtptx; /* Last RTP sent */
386 int rtptimeout; /* RTP timeout time */
387 int rtpholdtimeout; /* RTP timeout when on hold */
388 int rtpkeepalive; /* Send RTP packets for keepalive */
390 int subscribed; /* Is this call a subscription? */
396 struct sip_peer *peerpoke; /* If this calls is to poke a peer, which one */
397 struct sip_registry *registry; /* If this is a REGISTER call, to which registry */
398 struct ast_rtp *rtp; /* RTP Session */
399 struct ast_rtp *vrtp; /* Video RTP session */
400 struct sip_pkt *packets; /* Packets scheduled for re-transmission */
401 struct sip_history *history; /* History of this SIP dialog */
402 struct ast_variable *vars;
403 struct sip_pvt *next; /* Next call in chain */
404 int onhold; /* call on hold */
407 #define FLAG_RESPONSE (1 << 0)
408 #define FLAG_FATAL (1 << 1)
410 /* sip packet - read in sipsock_read, transmitted in send_request */
412 struct sip_pkt *next; /* Next packet */
413 int retrans; /* Retransmission number */
414 int seqno; /* Sequence number */
415 unsigned int flags; /* non-zero if this is a response packet (e.g. 200 OK) */
416 struct sip_pvt *owner; /* Owner call */
417 int retransid; /* Retransmission ID */
418 int packetlen; /* Length of packet */
422 /* Structure for SIP user data. User's place calls to us */
424 /* Users who can access various contexts */
425 ASTOBJ_COMPONENTS(struct sip_user);
426 char secret[80]; /* Password */
427 char md5secret[80]; /* Password in md5 */
428 char context[80]; /* Default context for incoming calls */
429 char cid_num[80]; /* Caller ID num */
430 char cid_name[80]; /* Caller ID name */
431 char accountcode[20]; /* Account code */
432 char language[MAX_LANGUAGE]; /* Default language for this user */
433 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
434 char useragent[256]; /* User agent in SIP request */
435 struct ast_codec_pref prefs; /* codec prefs */
436 ast_group_t callgroup; /* Call group */
437 ast_group_t pickupgroup; /* Pickup Group */
438 unsigned int flags; /* SIP_ flags */
439 int amaflags; /* AMA flags for billing */
440 int callingpres; /* Calling id presentation */
441 int capability; /* Codec capability */
446 struct ast_ha *ha; /* ACL setting */
447 struct ast_variable *vars;
450 /* Structure for SIP peer data, we place calls to peers if registred or fixed IP address (host) */
452 ASTOBJ_COMPONENTS(struct sip_peer);
453 char secret[80]; /* Password */
454 char md5secret[80]; /* Password in MD5 */
455 char context[80]; /* Default context for incoming calls */
456 char username[80]; /* Temporary username until registration */
457 char tohost[80]; /* If not dynamic, IP address */
458 char regexten[AST_MAX_EXTENSION]; /* Extension to register (if regcontext is used) */
459 char fromuser[80]; /* From: user when calling this peer */
460 char fromdomain[80]; /* From: domain when calling this peer */
461 char fullcontact[128]; /* Contact registred with us (not in sip.conf) */
462 char cid_num[80]; /* Caller ID num */
463 char cid_name[80]; /* Caller ID name */
464 char mailbox[AST_MAX_EXTENSION]; /* Mailbox setting for MWI checks */
465 char language[MAX_LANGUAGE]; /* Default language for prompts */
466 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
467 char useragent[256]; /* User agent in SIP request (saved from registration) */
468 struct ast_codec_pref prefs; /* codec prefs */
470 time_t lastmsgcheck; /* Last time we checked for MWI */
471 unsigned int flags; /* SIP_ flags */
472 int expire; /* Registration expiration */
474 int capability; /* Codec capability */
477 int rtpkeepalive; /* Send RTP packets for keepalive */
478 ast_group_t callgroup; /* Call group */
479 ast_group_t pickupgroup; /* Pickup group */
480 struct sockaddr_in addr; /* IP address of peer */
484 struct sip_pvt *call; /* Call pointer */
485 int pokeexpire; /* When to expire poke (qualify= checking) */
486 int lastms; /* How long last response took (in ms), or -1 for no response */
487 int maxms; /* Max ms we will accept for the host to be up, 0 to not monitor */
488 struct timeval ps; /* Ping send time */
490 struct sockaddr_in defaddr; /* Default IP address, used until registration */
491 struct ast_ha *ha; /* Access control list */
495 AST_MUTEX_DEFINE_STATIC(sip_reload_lock);
496 static int sip_reloading = 0;
498 /* States for outbound registrations (with register= lines in sip.conf */
499 #define REG_STATE_UNREGISTERED 0
500 #define REG_STATE_REGSENT 1
501 #define REG_STATE_AUTHSENT 2
502 #define REG_STATE_REGISTERED 3
503 #define REG_STATE_REJECTED 4
504 #define REG_STATE_TIMEOUT 5
505 #define REG_STATE_NOAUTH 6
508 /* sip_registry: Registrations with other SIP proxies */
509 struct sip_registry {
510 ASTOBJ_COMPONENTS_FULL(struct sip_registry,1,1);
511 int portno; /* Optional port override */
512 char username[80]; /* Who we are registering as */
513 char authuser[80]; /* Who we *authenticate* as */
514 char hostname[80]; /* Domain or host we register to */
515 char secret[80]; /* Password or key name in []'s */
517 char contact[80]; /* Contact extension */
519 int expire; /* Sched ID of expiration */
520 int timeout; /* sched id of sip_reg_timeout */
521 int refresh; /* How often to refresh */
522 struct sip_pvt *call; /* create a sip_pvt structure for each outbound "registration call" in progress */
523 int regstate; /* Registration state (see above) */
524 int callid_valid; /* 0 means we haven't chosen callid for this registry yet. */
525 char callid[80]; /* Global CallID for this registry */
526 unsigned int ocseq; /* Sequence number we got to for REGISTERs for this registry */
527 struct sockaddr_in us; /* Who the server thinks we are */
530 char realm[256]; /* Authorization realm */
531 char nonce[256]; /* Authorization nonce */
532 char domain[256]; /* Authorization domain */
533 char opaque[256]; /* Opaque nonsense */
534 char qop[80]; /* Quality of Protection. */
536 char lastmsg[256]; /* Last Message sent/received */
539 /*--- The user list: Users and friends ---*/
540 static struct ast_user_list {
541 ASTOBJ_CONTAINER_COMPONENTS(struct sip_user);
544 /*--- The peer list: Peers and Friends ---*/
545 static struct ast_peer_list {
546 ASTOBJ_CONTAINER_COMPONENTS(struct sip_peer);
549 /*--- The register list: Other SIP proxys we register with and call ---*/
550 static struct ast_register_list {
551 ASTOBJ_CONTAINER_COMPONENTS(struct sip_registry);
556 static int __sip_do_register(struct sip_registry *r);
558 static int sipsock = -1;
561 static struct sockaddr_in bindaddr;
562 static struct sockaddr_in externip;
563 static char externhost[256] = "";
564 static time_t externexpire = 0;
565 static int externrefresh = 10;
566 static struct ast_ha *localaddr;
568 /* The list of manual NOTIFY types we know how to send */
569 struct ast_config *notify_types;
571 static struct ast_frame *sip_read(struct ast_channel *ast);
572 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req);
573 static int transmit_response_with_sdp(struct sip_pvt *p, char *msg, struct sip_request *req, int retrans);
574 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *rand, int reliable, char *header);
575 static int transmit_request(struct sip_pvt *p, char *msg, int inc, int reliable, int newbranch);
576 static int transmit_request_with_auth(struct sip_pvt *p, char *msg, int inc, int reliable, int newbranch);
577 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);
578 static int transmit_reinvite_with_sdp(struct sip_pvt *p);
579 static int transmit_info_with_digit(struct sip_pvt *p, char digit);
580 static int transmit_message_with_text(struct sip_pvt *p, char *text);
581 static int transmit_refer(struct sip_pvt *p, char *dest);
582 static struct sip_peer *temp_peer(char *name);
583 static int do_proxy_auth(struct sip_pvt *p, struct sip_request *req, char *header, char *respheader, char *msg, int init);
584 static void free_old_route(struct sip_route *route);
585 static int build_reply_digest(struct sip_pvt *p, char *orig_header, char *digest, int digest_len);
586 static int update_user_counter(struct sip_pvt *fup, int event);
587 static void prune_peers(void);
588 static int sip_do_reload(void);
590 static int callevents = 0;
592 /*--- sip_debug_test_addr: See if we pass debug IP filter */
593 static inline int sip_debug_test_addr(struct sockaddr_in *addr)
597 if (debugaddr.sin_addr.s_addr) {
598 if (((ntohs(debugaddr.sin_port) != 0)
599 && (debugaddr.sin_port != addr->sin_port))
600 || (debugaddr.sin_addr.s_addr != addr->sin_addr.s_addr))
606 static inline int sip_debug_test_pvt(struct sip_pvt *p)
610 return sip_debug_test_addr(((ast_test_flag(p, SIP_NAT) & SIP_NAT_ROUTE) ? &p->recv : &p->sa));
614 /*--- __sip_xmit: Transmit SIP message ---*/
615 static int __sip_xmit(struct sip_pvt *p, char *data, int len)
618 char iabuf[INET_ADDRSTRLEN];
619 if (ast_test_flag(p, SIP_NAT) & SIP_NAT_ROUTE)
620 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->recv, sizeof(struct sockaddr_in));
622 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->sa, sizeof(struct sockaddr_in));
624 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));
629 static void sip_destroy(struct sip_pvt *p);
631 /*--- build_via: Build a Via header for a request ---*/
632 static void build_via(struct sip_pvt *p, char *buf, int len)
634 char iabuf[INET_ADDRSTRLEN];
636 /* z9hG4bK is a magic cookie. See RFC 3261 section 8.1.1.7 */
637 if (ast_test_flag(p, SIP_NAT) != SIP_NAT_NEVER)
638 snprintf(buf, len, "SIP/2.0/UDP %s:%d;branch=z9hG4bK%08x;rport", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ourport, p->branch);
639 else /* Work around buggy UNIDEN UIP200 firmware */
640 snprintf(buf, len, "SIP/2.0/UDP %s:%d;branch=z9hG4bK%08x", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ourport, p->branch);
643 /*--- ast_sip_ouraddrfor: NAT fix - decide which IP address to use for ASterisk server? ---*/
644 /* Only used for outbound registrations */
645 static int ast_sip_ouraddrfor(struct in_addr *them, struct in_addr *us)
648 * Using the localaddr structure built up with localnet statements
649 * apply it to their address to see if we need to substitute our
650 * externip or can get away with our internal bindaddr
652 struct sockaddr_in theirs;
653 theirs.sin_addr = *them;
654 if (localaddr && externip.sin_addr.s_addr &&
655 ast_apply_ha(localaddr, &theirs)) {
656 char iabuf[INET_ADDRSTRLEN];
657 if (externexpire && (time(NULL) >= externexpire)) {
658 struct ast_hostent ahp;
661 externexpire += externrefresh;
662 if ((hp = ast_gethostbyname(externhost, &ahp))) {
663 memcpy(&externip.sin_addr, hp->h_addr, sizeof(externip.sin_addr));
665 ast_log(LOG_NOTICE, "Warning: Re-lookup of '%s' failed!\n", externhost);
667 memcpy(us, &externip.sin_addr, sizeof(struct in_addr));
668 ast_inet_ntoa(iabuf, sizeof(iabuf), *(struct in_addr *)&them->s_addr);
669 ast_log(LOG_DEBUG, "Target address %s is not local, substituting externip\n", iabuf);
671 else if (bindaddr.sin_addr.s_addr)
672 memcpy(us, &bindaddr.sin_addr, sizeof(struct in_addr));
674 return ast_ouraddrfor(them, us);
678 static int append_history(struct sip_pvt *p, char *event, char *data)
680 struct sip_history *hist, *prev;
684 hist = malloc(sizeof(struct sip_history));
686 memset(hist, 0, sizeof(struct sip_history));
687 snprintf(hist->event, sizeof(hist->event), "%-15s %s", event, data);
691 if ((*c == '\r') || (*c == '\n')) {
697 /* Enqueue into history */
710 /*--- retrans_pkt: Retransmit SIP message if no answer ---*/
711 static int retrans_pkt(void *data)
713 struct sip_pkt *pkt=data, *prev, *cur;
715 char iabuf[INET_ADDRSTRLEN];
716 ast_mutex_lock(&pkt->owner->lock);
717 if (pkt->retrans < MAX_RETRANS) {
719 if (sip_debug_test_pvt(pkt->owner)) {
720 if (ast_test_flag(pkt->owner, SIP_NAT) & SIP_NAT_ROUTE)
721 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));
723 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));
725 append_history(pkt->owner, "ReTx", pkt->data);
726 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
729 ast_log(LOG_WARNING, "Maximum retries exceeded on call %s for seqno %d (%s %s)\n", pkt->owner->callid, pkt->seqno, (ast_test_flag(pkt, FLAG_FATAL)) ? "Critical" : "Non-critical", (ast_test_flag(pkt, FLAG_RESPONSE)) ? "Response" : "Request");
730 append_history(pkt->owner, "MaxRetries", (ast_test_flag(pkt, FLAG_FATAL)) ? "(Critical)" : "(Non-critical)");
732 if (ast_test_flag(pkt, FLAG_FATAL)) {
733 while(pkt->owner->owner && ast_mutex_trylock(&pkt->owner->owner->lock)) {
734 ast_mutex_unlock(&pkt->owner->lock);
736 ast_mutex_lock(&pkt->owner->lock);
738 if (pkt->owner->owner) {
739 ast_set_flag(pkt->owner, SIP_ALREADYGONE);
740 ast_queue_hangup(pkt->owner->owner);
741 ast_mutex_unlock(&pkt->owner->owner->lock);
743 /* If no owner, destroy now */
744 ast_set_flag(pkt->owner, SIP_NEEDDESTROY);
747 /* In any case, go ahead and remove the packet */
749 cur = pkt->owner->packets;
758 prev->next = cur->next;
760 pkt->owner->packets = cur->next;
761 ast_mutex_unlock(&pkt->owner->lock);
765 ast_log(LOG_WARNING, "Weird, couldn't find packet owner!\n");
768 ast_mutex_unlock(&pkt->owner->lock);
772 /*--- __sip_reliable_xmit: transmit packet with retransmits ---*/
773 static int __sip_reliable_xmit(struct sip_pvt *p, int seqno, int resp, char *data, int len, int fatal)
776 pkt = malloc(sizeof(struct sip_pkt) + len + 1);
779 memset(pkt, 0, sizeof(struct sip_pkt));
780 memcpy(pkt->data, data, len);
781 pkt->packetlen = len;
782 pkt->next = p->packets;
786 pkt->data[len] = '\0';
788 ast_set_flag(pkt, FLAG_FATAL);
789 /* Schedule retransmission */
790 pkt->retransid = ast_sched_add(sched, DEFAULT_RETRANS, retrans_pkt, pkt);
791 pkt->next = p->packets;
793 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
794 if (!strncasecmp(pkt->data, "INVITE", 6)) {
795 /* Note this is a pending invite */
796 p->pendinginvite = seqno;
801 /*--- __sip_autodestruct: Kill a call (called by scheduler) ---*/
802 static int __sip_autodestruct(void *data)
804 struct sip_pvt *p = data;
806 ast_log(LOG_DEBUG, "Auto destroying call '%s'\n", p->callid);
807 append_history(p, "AutoDestroy", "");
809 ast_log(LOG_WARNING, "Autodestruct on call '%s' with owner in place\n", p->callid);
810 ast_queue_hangup(p->owner);
817 /*--- sip_scheddestroy: Schedule destruction of SIP call ---*/
818 static int sip_scheddestroy(struct sip_pvt *p, int ms)
821 if (sip_debug_test_pvt(p))
822 ast_verbose("Scheduling destruction of call '%s' in %d ms\n", p->callid, ms);
824 snprintf(tmp, sizeof(tmp), "%d ms", ms);
825 append_history(p, "SchedDestroy", tmp);
827 if (p->autokillid > -1)
828 ast_sched_del(sched, p->autokillid);
829 p->autokillid = ast_sched_add(sched, ms, __sip_autodestruct, p);
833 /*--- sip_cancel_destroy: Cancel destruction of SIP call ---*/
834 static int sip_cancel_destroy(struct sip_pvt *p)
836 if (p->autokillid > -1)
837 ast_sched_del(sched, p->autokillid);
838 append_history(p, "CancelDestroy", "");
843 /*--- __sip_ack: Acknowledges receipt of a packet and stops retransmission ---*/
844 static int __sip_ack(struct sip_pvt *p, int seqno, int resp, const char *msg)
846 struct sip_pkt *cur, *prev = NULL;
849 /* Just in case... */
850 if (!msg) msg = "___NEVER___";
853 if ((cur->seqno == seqno) && ((ast_test_flag(cur, FLAG_RESPONSE)) == resp) &&
854 ((ast_test_flag(cur, FLAG_RESPONSE)) ||
855 (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
856 if (!resp && (seqno == p->pendinginvite)) {
857 ast_log(LOG_DEBUG, "Acked pending invite %d\n", p->pendinginvite);
858 p->pendinginvite = 0;
861 /* this is our baby */
863 prev->next = cur->next;
865 p->packets = cur->next;
866 if (cur->retransid > -1)
867 ast_sched_del(sched, cur->retransid);
875 ast_log(LOG_DEBUG, "Stopping retransmission on '%s' of %s %d: %s\n", p->callid, resp ? "Response" : "Request", seqno, res ? "Not Found" : "Found");
879 /* Pretend to ack all packets */
880 static int __sip_pretend_ack(struct sip_pvt *p)
883 __sip_ack(p, p->packets->seqno, (ast_test_flag(p->packets, FLAG_RESPONSE)), p->packets->data);
888 /*--- __sip_semi_ack: Acks receipt of packet, keep it around (used for provisional responses) ---*/
889 static int __sip_semi_ack(struct sip_pvt *p, int seqno, int resp, const char *msg)
895 if ((cur->seqno == seqno) && ((ast_test_flag(cur, FLAG_RESPONSE)) == resp) &&
896 ((ast_test_flag(cur, FLAG_RESPONSE)) ||
897 (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
898 /* this is our baby */
899 if (cur->retransid > -1)
900 ast_sched_del(sched, cur->retransid);
907 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");
911 static void parse(struct sip_request *req);
912 static char *get_header(struct sip_request *req, char *name);
913 static void copy_request(struct sip_request *dst,struct sip_request *src);
915 static void parse_copy(struct sip_request *dst, struct sip_request *src)
917 memset(dst, 0, sizeof(*dst));
918 memcpy(dst->data, src->data, sizeof(dst->data));
922 /*--- send_response: Transmit response on SIP request---*/
923 static int send_response(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
926 char iabuf[INET_ADDRSTRLEN];
927 struct sip_request tmp;
929 if (sip_debug_test_pvt(p)) {
930 if (ast_test_flag(p, SIP_NAT) & SIP_NAT_ROUTE)
931 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));
933 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));
937 parse_copy(&tmp, req);
938 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
939 append_history(p, "TxRespRel", tmpmsg);
941 res = __sip_reliable_xmit(p, seqno, 1, req->data, req->len, (reliable > 1));
944 parse_copy(&tmp, req);
945 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
946 append_history(p, "TxResp", tmpmsg);
948 res = __sip_xmit(p, req->data, req->len);
955 /*--- send_request: Send SIP Request to the other part of the dialogue ---*/
956 static int send_request(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
959 char iabuf[INET_ADDRSTRLEN];
960 struct sip_request tmp;
962 if (sip_debug_test_pvt(p)) {
963 if (ast_test_flag(p, SIP_NAT) & SIP_NAT_ROUTE)
964 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));
966 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));
970 parse_copy(&tmp, req);
971 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
972 append_history(p, "TxReqRel", tmpmsg);
974 res = __sip_reliable_xmit(p, seqno, 0, req->data, req->len, (reliable > 1));
977 parse_copy(&tmp, req);
978 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
979 append_history(p, "TxReq", tmpmsg);
981 res = __sip_xmit(p, req->data, req->len);
986 /*--- url_decode: Decode SIP URL ---*/
987 static void url_decode(char *s)
995 if (sscanf(s + 1, "%2x", &tmp) == 1) {
997 s += 2; /* Will be incremented once more when we break out */
1001 /* Fall through if something wasn't right with the formatting */
1011 /*--- ditch_braces: Pick out text in braces from character string ---*/
1012 static char *ditch_braces(char *tmp)
1017 if ((q = strchr(tmp, '"')) ) {
1019 if ((q = strchr(c, '"')) )
1022 ast_log(LOG_WARNING, "No closing quote in '%s'\n", tmp);
1026 if ((n = strchr(c, '<')) ) {
1028 while(*c && *c != '>') c++;
1030 ast_log(LOG_WARNING, "No closing brace in '%s'\n", tmp);
1039 /*--- sip_sendtext: Send SIP MESSAGE text within a call ---*/
1040 /* Called from PBX core text message functions */
1041 static int sip_sendtext(struct ast_channel *ast, char *text)
1043 struct sip_pvt *p = ast->pvt->pvt;
1044 int debug=sip_debug_test_pvt(p);
1047 ast_verbose("Sending text %s on %s\n", text, ast->name);
1050 if (!text || ast_strlen_zero(text))
1053 ast_verbose("Really sending text %s on %s\n", text, ast->name);
1054 transmit_message_with_text(p, text);
1058 static void realtime_update_peer(const char *peername, struct sockaddr_in *sin, const char *username, int expirey)
1062 char regseconds[20];
1067 snprintf(regseconds, sizeof(regseconds), "%ld", nowtime);
1068 ast_inet_ntoa(ipaddr, sizeof(ipaddr), sin->sin_addr);
1069 snprintf(port, sizeof(port), "%d", ntohs(sin->sin_port));
1070 ast_update_realtime("sipfriends", "name", peername, "ipaddr", ipaddr, "port", port, "regseconds", regseconds, "username", username, NULL);
1073 static void register_peer_exten(struct sip_peer *peer, int onoff)
1075 unsigned char multi[256]="";
1076 char *stringp, *ext;
1077 if (!ast_strlen_zero(regcontext)) {
1078 strncpy(multi, ast_strlen_zero(peer->regexten) ? peer->name : peer->regexten, sizeof(multi) - 1);
1080 while((ext = strsep(&stringp, "&"))) {
1082 ast_add_extension(regcontext, 1, ext, 1, NULL, NULL, "Noop", strdup(peer->name), free, channeltype);
1084 ast_context_remove_extension(regcontext, ext, 1, NULL);
1089 static void sip_destroy_peer(struct sip_peer *peer)
1091 /* Delete it, it needs to disappear */
1093 sip_destroy(peer->call);
1094 if (peer->expire > -1)
1095 ast_sched_del(sched, peer->expire);
1096 if (peer->pokeexpire > -1)
1097 ast_sched_del(sched, peer->pokeexpire);
1098 register_peer_exten(peer, 0);
1099 ast_free_ha(peer->ha);
1100 if (ast_test_flag(peer, SIP_SELFDESTRUCT))
1102 else if (ast_test_flag(peer, SIP_REALTIME))
1109 /*--- update_peer: Update peer data in database (if used) ---*/
1110 static void update_peer(struct sip_peer *p, int expiry)
1112 if (ast_test_flag(p, SIP_REALTIME))
1113 realtime_update_peer(p->name, &p->addr, p->username, expiry);
1116 static struct sip_peer *build_peer(const char *name, struct ast_variable *v, int realtime);
1118 static struct sip_peer *realtime_peer(const char *peername, struct sockaddr_in *sin)
1120 struct sip_peer *peer=NULL;
1121 struct ast_variable *var;
1122 struct ast_variable *tmp;
1125 var = ast_load_realtime("sipfriends", "name", peername, NULL);
1129 ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr);
1130 var = ast_load_realtime("sipfriends", "ipaddr", iabuf, NULL);
1139 if (!strcasecmp(tmp->name, "type") &&
1140 !strcasecmp(tmp->value, "user")) {
1141 ast_variables_destroy(var);
1147 peer = build_peer(peername, var, 1);
1149 ast_set_flag(peer, SIP_REALTIME);
1150 ast_variables_destroy(var);
1154 static int sip_addrcmp(char *name, struct sockaddr_in *sin)
1156 /* We know name is the first field, so we can cast */
1157 struct sip_peer *p = (struct sip_peer *)name;
1158 return !(!inaddrcmp(&p->addr, sin) ||
1159 (ast_test_flag(p, SIP_INSECURE) &&
1160 (p->addr.sin_addr.s_addr == sin->sin_addr.s_addr)));
1163 /*--- find_peer: Locate peer by name or ip address */
1164 static struct sip_peer *find_peer(const char *peer, struct sockaddr_in *sin)
1166 struct sip_peer *p = NULL;
1169 p = ASTOBJ_CONTAINER_FIND(&peerl,peer);
1171 p = ASTOBJ_CONTAINER_FIND_FULL(&peerl,sin,name,sip_addr_hashfunc,1,sip_addrcmp);
1174 p = realtime_peer(peer, sin);
1180 static void sip_destroy_user(struct sip_user *user)
1182 ast_free_ha(user->ha);
1184 ast_variables_destroy(user->vars);
1187 if (ast_test_flag(user, SIP_REALTIME))
1194 static struct sip_user *build_user(const char *name, struct ast_variable *v, int realtime);
1195 static struct sip_user *realtime_user(const char *username)
1197 struct ast_variable *var;
1198 struct ast_variable *tmp;
1199 struct sip_user *user = NULL;
1201 var = ast_load_realtime("sipfriends", "name", username, NULL);
1208 if (!strcasecmp(tmp->name, "type") &&
1209 !strcasecmp(tmp->value, "peer")) {
1210 ast_variables_destroy(var);
1216 user = build_user(username, var, 1);
1218 /* Move counter from s to r... */
1221 /* Add some finishing touches, addresses, etc */
1222 ast_set_flag(user, SIP_REALTIME);
1224 ast_variables_destroy(var);
1228 /*--- find_user: Locate user by name */
1229 static struct sip_user *find_user(const char *name)
1231 struct sip_user *u = NULL;
1232 u = ASTOBJ_CONTAINER_FIND(&userl,name);
1234 u = realtime_user(name);
1239 /*--- create_addr: create address structure from peer definition ---*/
1240 /* Or, if peer not found, find it in the global DNS */
1241 /* returns TRUE on failure, FALSE on success */
1242 static int create_addr(struct sip_pvt *r, char *opeer)
1245 struct ast_hostent ahp;
1251 char host[256], *hostn;
1254 strncpy(peer, opeer, sizeof(peer) - 1);
1255 port = strchr(peer, ':');
1260 r->sa.sin_family = AF_INET;
1261 p = find_peer(peer, NULL);
1265 ast_copy_flags(r, p, SIP_PROMISCREDIR | SIP_USEREQPHONE | SIP_DTMF | SIP_NAT | SIP_REINVITE | SIP_INSECURE);
1266 r->capability = p->capability;
1268 ast_log(LOG_DEBUG, "Setting NAT on RTP to %d\n", (ast_test_flag(r, SIP_NAT) & SIP_NAT_ROUTE));
1269 ast_rtp_setnat(r->rtp, (ast_test_flag(r, SIP_NAT) & SIP_NAT_ROUTE));
1272 ast_log(LOG_DEBUG, "Setting NAT on VRTP to %d\n", (ast_test_flag(r, SIP_NAT) & SIP_NAT_ROUTE));
1273 ast_rtp_setnat(r->vrtp, (ast_test_flag(r, SIP_NAT) & SIP_NAT_ROUTE));
1275 strncpy(r->peername, p->username, sizeof(r->peername)-1);
1276 strncpy(r->authname, p->username, sizeof(r->authname)-1);
1277 strncpy(r->peersecret, p->secret, sizeof(r->peersecret)-1);
1278 strncpy(r->peermd5secret, p->md5secret, sizeof(r->peermd5secret)-1);
1279 strncpy(r->username, p->username, sizeof(r->username)-1);
1280 strncpy(r->tohost, p->tohost, sizeof(r->tohost)-1);
1281 strncpy(r->fullcontact, p->fullcontact, sizeof(r->fullcontact)-1);
1282 if (!r->initreq.headers && !ast_strlen_zero(p->fromdomain)) {
1283 if ((callhost = strchr(r->callid, '@'))) {
1284 strncpy(callhost + 1, p->fromdomain, sizeof(r->callid) - (callhost - r->callid) - 2);
1287 if (ast_strlen_zero(r->tohost)) {
1288 if (p->addr.sin_addr.s_addr)
1289 ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->addr.sin_addr);
1291 ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->defaddr.sin_addr);
1293 if (!ast_strlen_zero(p->fromdomain))
1294 strncpy(r->fromdomain, p->fromdomain, sizeof(r->fromdomain)-1);
1295 if (!ast_strlen_zero(p->fromuser))
1296 strncpy(r->fromuser, p->fromuser, sizeof(r->fromuser)-1);
1297 r->maxtime = p->maxms;
1298 r->callgroup = p->callgroup;
1299 r->pickupgroup = p->pickupgroup;
1300 if (ast_test_flag(r, SIP_DTMF) == SIP_DTMF_RFC2833)
1301 r->noncodeccapability |= AST_RTP_DTMF;
1303 r->noncodeccapability &= ~AST_RTP_DTMF;
1304 strncpy(r->context, p->context,sizeof(r->context)-1);
1305 if ((p->addr.sin_addr.s_addr || p->defaddr.sin_addr.s_addr) &&
1306 (!p->maxms || ((p->lastms >= 0) && (p->lastms <= p->maxms)))) {
1307 if (p->addr.sin_addr.s_addr) {
1308 r->sa.sin_addr = p->addr.sin_addr;
1309 r->sa.sin_port = p->addr.sin_port;
1311 r->sa.sin_addr = p->defaddr.sin_addr;
1312 r->sa.sin_port = p->defaddr.sin_port;
1314 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1316 ASTOBJ_UNREF(p,sip_destroy_peer);
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);
1350 ASTOBJ_UNREF(p,sip_destroy_peer);
1355 /*--- auto_congest: Scheduled congestion on a call ---*/
1356 static int auto_congest(void *nothing)
1358 struct sip_pvt *p = nothing;
1359 ast_mutex_lock(&p->lock);
1362 if (!ast_mutex_trylock(&p->owner->lock)) {
1363 ast_log(LOG_NOTICE, "Auto-congesting %s\n", p->owner->name);
1364 ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
1365 ast_mutex_unlock(&p->owner->lock);
1368 ast_mutex_unlock(&p->lock);
1375 /*--- sip_call: Initiate SIP call from PBX ---*/
1376 /* used from the dial() application */
1377 static int sip_call(struct ast_channel *ast, char *dest, int timeout)
1381 char *vxml_url = NULL;
1382 char *distinctive_ring = NULL;
1383 char *osptoken = NULL;
1385 char *osphandle = NULL;
1387 struct varshead *headp;
1388 struct ast_var_t *current;
1389 int addsipheaders = 0;
1392 if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) {
1393 ast_log(LOG_WARNING, "sip_call called on %s, neither down nor reserved\n", ast->name);
1396 /* Check whether there is vxml_url, distinctive ring variables */
1398 headp=&ast->varshead;
1399 AST_LIST_TRAVERSE(headp,current,entries) {
1400 /* Check whether there is a VXML_URL variable */
1401 if (!vxml_url && !strcasecmp(ast_var_name(current),"VXML_URL")) {
1402 vxml_url = ast_var_value(current);
1403 } else if (!distinctive_ring && !strcasecmp(ast_var_name(current),"ALERT_INFO")) {
1404 /* Check whether there is a ALERT_INFO variable */
1405 distinctive_ring = ast_var_value(current);
1406 } else if (!addsipheaders && !strncasecmp(ast_var_name(current),"SIPADDHEADER",strlen("SIPADDHEADER"))) {
1407 /* Check whether there is a variable with a name starting with SIPADDHEADER */
1413 else if (!osptoken && !strcasecmp(ast_var_name(current), "OSPTOKEN")) {
1414 osptoken = ast_var_value(current);
1415 } else if (!osphandle && !strcasecmp(ast_var_name(current), "OSPHANDLE")) {
1416 osphandle = ast_var_value(current);
1422 ast_set_flag(p, SIP_OUTGOING);
1424 if (!osptoken || !osphandle || (sscanf(osphandle, "%i", &p->osphandle) != 1)) {
1425 /* Force Disable OSP support */
1426 ast_log(LOG_DEBUG, "Disabling OSP support for this call. osptoken = %s, osphandle = %s\n", osptoken, osphandle);
1432 ast_log(LOG_DEBUG, "Outgoing Call for %s\n", p->username);
1433 res = update_user_counter(p,INC_OUT_USE);
1435 p->callingpres = ast->cid.cid_pres;
1436 p->jointcapability = p->capability;
1437 transmit_invite(p, "INVITE", 1, NULL, NULL, vxml_url,distinctive_ring, osptoken, addsipheaders, 1);
1439 /* Initialize auto-congest time */
1440 p->initid = ast_sched_add(sched, p->maxtime * 4, auto_congest, p);
1446 static void sip_registry_destroy(struct sip_registry *reg)
1450 /* Clear registry before destroying to ensure
1451 we don't get reentered trying to grab the registry lock */
1452 reg->call->registry = NULL;
1453 sip_destroy(reg->call);
1455 if (reg->expire > -1)
1456 ast_sched_del(sched, reg->expire);
1457 if (reg->timeout > -1)
1458 ast_sched_del(sched, reg->timeout);
1464 /*--- __sip_destroy: Execute destrucion of call structure, release memory---*/
1465 static void __sip_destroy(struct sip_pvt *p, int lockowner)
1467 struct sip_pvt *cur, *prev = NULL;
1469 struct sip_history *hist;
1471 if (sip_debug_test_pvt(p))
1472 ast_verbose("Destroying call '%s'\n", p->callid);
1473 if (p->stateid > -1)
1474 ast_extension_state_del(p->stateid, NULL);
1476 ast_sched_del(sched, p->initid);
1477 if (p->autokillid > -1)
1478 ast_sched_del(sched, p->autokillid);
1481 ast_rtp_destroy(p->rtp);
1484 ast_rtp_destroy(p->vrtp);
1487 free_old_route(p->route);
1491 if (p->registry->call == p)
1492 p->registry->call = NULL;
1493 ASTOBJ_UNREF(p->registry,sip_registry_destroy);
1495 /* Unlink us from the owner if we have one */
1498 ast_mutex_lock(&p->owner->lock);
1499 ast_log(LOG_DEBUG, "Detaching from %s\n", p->owner->name);
1500 p->owner->pvt->pvt = NULL;
1502 ast_mutex_unlock(&p->owner->lock);
1507 p->history = p->history->next;
1514 prev->next = cur->next;
1523 ast_log(LOG_WARNING, "%p is not in list?!?! \n", cur);
1526 ast_sched_del(sched, p->initid);
1527 while((cp = p->packets)) {
1528 p->packets = p->packets->next;
1529 if (cp->retransid > -1)
1530 ast_sched_del(sched, cp->retransid);
1533 ast_mutex_destroy(&p->lock);
1535 ast_variables_destroy(p->vars);
1542 /*--- update_user_counter: Handle incominglimit and outgoinglimit for SIP users ---*/
1543 /* Note: This is going to be replaced by app_groupcount */
1544 static int update_user_counter(struct sip_pvt *fup, int event)
1546 char name[256] = "";
1548 strncpy(name, fup->username, sizeof(name) - 1);
1549 u = find_user(name);
1551 ast_log(LOG_DEBUG, "%s is not a local user\n", name);
1555 /* incoming and outgoing affects the inUse counter */
1558 if ( u->inUse > 0 ) {
1566 if (u->incominglimit > 0 ) {
1567 if (u->inUse >= u->incominglimit) {
1568 ast_log(LOG_ERROR, "Call from user '%s' rejected due to usage limit of %d\n", u->name, u->incominglimit);
1569 /* inc inUse as well */
1570 if ( event == INC_OUT_USE ) {
1573 ASTOBJ_UNREF(u,sip_destroy_user);
1578 ast_log(LOG_DEBUG, "Call from user '%s' is %d out of %d\n", u->name, u->inUse, u->incominglimit);
1580 /* we don't use these anymore
1582 if ( u->outUse > 0 ) {
1589 if ( u->outgoinglimit > 0 ) {
1590 if ( u->outUse >= u->outgoinglimit ) {
1591 ast_log(LOG_ERROR, "Outgoing call from user '%s' rejected due to usage limit of %d\n", u->name, u->outgoinglimit);
1592 ast_mutex_unlock(&userl.lock);
1603 ast_log(LOG_ERROR, "update_user_counter(%s,%d) called with no event!\n",u->name,event);
1605 ASTOBJ_UNREF(u,sip_destroy_user);
1609 /*--- sip_destroy: Destroy SIP call structure ---*/
1610 static void sip_destroy(struct sip_pvt *p)
1612 ast_mutex_lock(&iflock);
1613 __sip_destroy(p, 1);
1614 ast_mutex_unlock(&iflock);
1618 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal);
1620 static int hangup_sip2cause(int cause)
1622 /* Possible values from causes.h
1623 AST_CAUSE_NOTDEFINED AST_CAUSE_NORMAL AST_CAUSE_BUSY
1624 AST_CAUSE_FAILURE AST_CAUSE_CONGESTION AST_CAUSE_UNALLOCATED
1628 case 404: /* Not found */
1629 return AST_CAUSE_UNALLOCATED;
1630 case 483: /* Too many hops */
1631 return AST_CAUSE_FAILURE;
1633 return AST_CAUSE_BUSY;
1635 return AST_CAUSE_NORMAL;
1641 static char *hangup_cause2sip(int cause)
1645 case AST_CAUSE_FAILURE:
1646 return "500 Server internal failure";
1647 case AST_CAUSE_CONGESTION:
1648 return "503 Service Unavailable";
1649 case AST_CAUSE_BUSY:
1658 /*--- sip_hangup: Hangup SIP call */
1659 static int sip_hangup(struct ast_channel *ast)
1661 struct sip_pvt *p = ast->pvt->pvt;
1663 struct ast_flags locflags = {0};
1665 ast_log(LOG_DEBUG, "sip_hangup(%s)\n", ast->name);
1666 if (!ast->pvt->pvt) {
1667 ast_log(LOG_DEBUG, "Asked to hangup channel not connected\n");
1670 ast_mutex_lock(&p->lock);
1672 if ((p->osphandle > -1) && (ast->_state == AST_STATE_UP)) {
1673 ast_osp_terminate(p->osphandle, AST_CAUSE_NORMAL, p->ospstart, time(NULL) - p->ospstart);
1676 if (ast_test_flag(p, SIP_OUTGOING)) {
1677 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement outUse counter\n", p->username);
1678 update_user_counter(p, DEC_OUT_USE);
1680 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement inUse counter\n", p->username);
1681 update_user_counter(p, DEC_IN_USE);
1683 /* Determine how to disconnect */
1684 if (p->owner != ast) {
1685 ast_log(LOG_WARNING, "Huh? We aren't the owner?\n");
1686 ast_mutex_unlock(&p->lock);
1689 if (!ast || (ast->_state != AST_STATE_UP))
1694 ast_dsp_free(p->vad);
1697 ast->pvt->pvt = NULL;
1699 ast_mutex_lock(&usecnt_lock);
1701 ast_mutex_unlock(&usecnt_lock);
1702 ast_update_use_count();
1704 ast_set_flag(&locflags, SIP_NEEDDESTROY);
1705 /* Start the process if it's not already started */
1706 if (!ast_test_flag(p, SIP_ALREADYGONE) && !ast_strlen_zero(p->initreq.data)) {
1708 if (ast_test_flag(p, SIP_OUTGOING)) {
1709 transmit_request_with_auth(p, "CANCEL", p->ocseq, 1, 0);
1710 /* Actually don't destroy us yet, wait for the 487 on our original
1711 INVITE, but do set an autodestruct just in case we never get it. */
1712 ast_clear_flag(&locflags, SIP_NEEDDESTROY);
1713 sip_scheddestroy(p, 15000);
1714 if ( p->initid != -1 ) {
1715 /* channel still up - reverse dec of inUse counter
1716 only if the channel is not auto-congested */
1717 if (ast_test_flag(p, SIP_OUTGOING)) {
1718 update_user_counter(p, INC_OUT_USE);
1721 update_user_counter(p, INC_IN_USE);
1726 if (ast->hangupcause && ((res = hangup_cause2sip(ast->hangupcause)))) {
1727 transmit_response_reliable(p, res, &p->initreq, 1);
1729 transmit_response_reliable(p, "403 Forbidden", &p->initreq, 1);
1732 if (!p->pendinginvite) {
1734 transmit_request_with_auth(p, "BYE", 0, 1, 1);
1736 /* Note we will need a BYE when this all settles out
1737 but we can't send one while we have "INVITE" outstanding. */
1738 ast_set_flag(p, SIP_PENDINGBYE);
1739 ast_clear_flag(p, SIP_NEEDREINVITE);
1743 ast_copy_flags(p, (&locflags), SIP_NEEDDESTROY);
1744 ast_mutex_unlock(&p->lock);
1748 /*--- sip_answer: Answer SIP call , send 200 OK on Invite */
1749 static int sip_answer(struct ast_channel *ast)
1753 struct sip_pvt *p = ast->pvt->pvt;
1755 ast_mutex_lock(&p->lock);
1756 if (ast->_state != AST_STATE_UP) {
1761 codec=pbx_builtin_getvar_helper(p->owner,"SIP_CODEC");
1763 fmt=ast_getformatbyname(codec);
1765 ast_log(LOG_NOTICE, "Changing codec to '%s' for this call because of ${SIP_CODEC) variable\n",codec);
1766 if (p->jointcapability & fmt) {
1767 p->jointcapability &= fmt;
1768 p->capability &= fmt;
1770 ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because it is not shared by both ends.\n");
1771 } else ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because of unrecognized/not configured codec (check allow/disallow in sip.conf): %s\n",codec);
1774 ast_setstate(ast, AST_STATE_UP);
1776 ast_log(LOG_DEBUG, "sip_answer(%s)\n", ast->name);
1777 res = transmit_response_with_sdp(p, "200 OK", &p->initreq, 1);
1779 ast_mutex_unlock(&p->lock);
1783 /*--- sip_write: Send response, support audio media ---*/
1784 static int sip_write(struct ast_channel *ast, struct ast_frame *frame)
1786 struct sip_pvt *p = ast->pvt->pvt;
1788 if (frame->frametype == AST_FRAME_VOICE) {
1789 if (!(frame->subclass & ast->nativeformats)) {
1790 ast_log(LOG_WARNING, "Asked to transmit frame type %d, while native formats is %d (read/write = %d/%d)\n",
1791 frame->subclass, ast->nativeformats, ast->readformat, ast->writeformat);
1795 ast_mutex_lock(&p->lock);
1797 if ((ast->_state != AST_STATE_UP) && !ast_test_flag(p, SIP_PROGRESS_SENT) && !ast_test_flag(p, SIP_OUTGOING)) {
1798 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1799 ast_set_flag(p, SIP_PROGRESS_SENT);
1801 time(&p->lastrtptx);
1802 res = ast_rtp_write(p->rtp, frame);
1804 ast_mutex_unlock(&p->lock);
1806 } else if (frame->frametype == AST_FRAME_VIDEO) {
1808 ast_mutex_lock(&p->lock);
1810 if ((ast->_state != AST_STATE_UP) && !ast_test_flag(p, SIP_PROGRESS_SENT) && !ast_test_flag(p, SIP_OUTGOING)) {
1811 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1812 ast_set_flag(p, SIP_PROGRESS_SENT);
1814 time(&p->lastrtptx);
1815 res = ast_rtp_write(p->vrtp, frame);
1817 ast_mutex_unlock(&p->lock);
1819 } else if (frame->frametype == AST_FRAME_IMAGE) {
1822 ast_log(LOG_WARNING, "Can't send %d type frames with SIP write\n", frame->frametype);
1829 /*--- sip_fixup: Fix up a channel: If a channel is consumed, this is called.
1830 Basically update any ->owner links ----*/
1831 static int sip_fixup(struct ast_channel *oldchan, struct ast_channel *newchan)
1833 struct sip_pvt *p = newchan->pvt->pvt;
1834 ast_mutex_lock(&p->lock);
1835 if (p->owner != oldchan) {
1836 ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, p->owner);
1837 ast_mutex_unlock(&p->lock);
1841 ast_mutex_unlock(&p->lock);
1845 /*--- sip_senddigit: Send DTMF character on SIP channel */
1846 /* within one call, we're able to transmit in many methods simultaneously */
1847 static int sip_senddigit(struct ast_channel *ast, char digit)
1849 struct sip_pvt *p = ast->pvt->pvt;
1851 ast_mutex_lock(&p->lock);
1852 switch (ast_test_flag(p, SIP_DTMF)) {
1854 transmit_info_with_digit(p, digit);
1856 case SIP_DTMF_RFC2833:
1858 ast_rtp_senddigit(p->rtp, digit);
1860 case SIP_DTMF_INBAND:
1864 ast_mutex_unlock(&p->lock);
1869 /*--- sip_transfer: Transfer SIP call */
1870 static int sip_transfer(struct ast_channel *ast, char *dest)
1872 struct sip_pvt *p = ast->pvt->pvt;
1874 ast_mutex_lock(&p->lock);
1875 res = transmit_refer(p, dest);
1876 ast_mutex_unlock(&p->lock);
1880 /*--- sip_indicate: Play indication to user */
1881 /* With SIP a lot of indications is sent as messages, letting the device play
1882 the indication - busy signal, congestion etc */
1883 static int sip_indicate(struct ast_channel *ast, int condition)
1885 struct sip_pvt *p = ast->pvt->pvt;
1888 ast_mutex_lock(&p->lock);
1890 case AST_CONTROL_RINGING:
1891 if (ast->_state == AST_STATE_RING) {
1892 if (!ast_test_flag(p, SIP_PROGRESS_SENT) ||
1893 (ast_test_flag(p, SIP_PROG_INBAND) == SIP_PROG_INBAND_NEVER)) {
1894 /* Send 180 ringing if out-of-band seems reasonable */
1895 transmit_response(p, "180 Ringing", &p->initreq);
1896 ast_set_flag(p, SIP_RINGING);
1897 if (ast_test_flag(p, SIP_PROG_INBAND) != SIP_PROG_INBAND_YES)
1900 /* Well, if it's not reasonable, just send in-band */
1905 case AST_CONTROL_BUSY:
1906 if (ast->_state != AST_STATE_UP) {
1907 transmit_response(p, "486 Busy Here", &p->initreq);
1908 ast_set_flag(p, SIP_ALREADYGONE);
1909 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1914 case AST_CONTROL_CONGESTION:
1915 if (ast->_state != AST_STATE_UP) {
1916 transmit_response(p, "503 Service Unavailable", &p->initreq);
1917 ast_set_flag(p, SIP_ALREADYGONE);
1918 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1923 case AST_CONTROL_PROGRESS:
1924 case AST_CONTROL_PROCEEDING:
1925 if ((ast->_state != AST_STATE_UP) && !ast_test_flag(p, SIP_PROGRESS_SENT) && !ast_test_flag(p, SIP_OUTGOING)) {
1926 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1927 ast_set_flag(p, SIP_PROGRESS_SENT);
1936 ast_log(LOG_WARNING, "Don't know how to indicate condition %d\n", condition);
1940 ast_mutex_unlock(&p->lock);
1946 /*--- sip_new: Initiate a call in the SIP channel */
1947 /* called from sip_request_call (calls from the pbx ) */
1948 static struct ast_channel *sip_new(struct sip_pvt *i, int state, char *title)
1950 struct ast_channel *tmp;
1951 struct ast_variable *v = NULL;
1954 ast_mutex_unlock(&i->lock);
1955 /* Don't hold a sip pvt lock while we allocate a channel */
1956 tmp = ast_channel_alloc(1);
1957 ast_mutex_lock(&i->lock);
1959 /* Select our native format based on codec preference until we receive
1960 something from another device to the contrary. */
1961 ast_mutex_lock(&i->lock);
1962 if (i->jointcapability)
1963 tmp->nativeformats = ast_codec_choose(&i->prefs, i->jointcapability, 1);
1964 else if (i->capability)
1965 tmp->nativeformats = ast_codec_choose(&i->prefs, i->capability, 1);
1967 tmp->nativeformats = ast_codec_choose(&i->prefs, global_capability, 1);
1968 ast_mutex_unlock(&i->lock);
1969 fmt = ast_best_codec(tmp->nativeformats);
1971 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%04x", title, rand() & 0xffff);
1973 if (strchr(i->fromdomain,':'))
1975 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", strchr(i->fromdomain,':')+1, (int)(long)(i));
1979 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", i->fromdomain, (int)(long)(i));
1981 tmp->type = channeltype;
1982 if (ast_test_flag(i, SIP_DTMF) == SIP_DTMF_INBAND) {
1983 i->vad = ast_dsp_new();
1984 ast_dsp_set_features(i->vad, DSP_FEATURE_DTMF_DETECT);
1986 ast_dsp_digitmode(i->vad, DSP_DIGITMODE_DTMF | DSP_DIGITMODE_RELAXDTMF);
1988 tmp->fds[0] = ast_rtp_fd(i->rtp);
1989 tmp->fds[1] = ast_rtcp_fd(i->rtp);
1991 tmp->fds[2] = ast_rtp_fd(i->vrtp);
1992 tmp->fds[3] = ast_rtcp_fd(i->vrtp);
1994 if (state == AST_STATE_RING)
1996 tmp->adsicpe = AST_ADSI_UNAVAILABLE;
1997 tmp->writeformat = fmt;
1998 tmp->pvt->rawwriteformat = fmt;
1999 tmp->readformat = fmt;
2000 tmp->pvt->rawreadformat = fmt;
2002 tmp->pvt->send_text = sip_sendtext;
2003 tmp->pvt->call = sip_call;
2004 tmp->pvt->hangup = sip_hangup;
2005 tmp->pvt->answer = sip_answer;
2006 tmp->pvt->read = sip_read;
2007 tmp->pvt->write = sip_write;
2008 tmp->pvt->write_video = sip_write;
2009 tmp->pvt->indicate = sip_indicate;
2010 tmp->pvt->transfer = sip_transfer;
2011 tmp->pvt->fixup = sip_fixup;
2012 tmp->pvt->send_digit = sip_senddigit;
2014 tmp->pvt->bridge = ast_rtp_bridge;
2016 tmp->callgroup = i->callgroup;
2017 tmp->pickupgroup = i->pickupgroup;
2018 tmp->cid.cid_pres = i->callingpres;
2019 if (!ast_strlen_zero(i->accountcode))
2020 strncpy(tmp->accountcode, i->accountcode, sizeof(tmp->accountcode)-1);
2022 tmp->amaflags = i->amaflags;
2023 if (!ast_strlen_zero(i->language))
2024 strncpy(tmp->language, i->language, sizeof(tmp->language)-1);
2025 if (!ast_strlen_zero(i->musicclass))
2026 strncpy(tmp->musicclass, i->musicclass, sizeof(tmp->musicclass)-1);
2028 ast_mutex_lock(&usecnt_lock);
2030 ast_mutex_unlock(&usecnt_lock);
2031 strncpy(tmp->context, i->context, sizeof(tmp->context)-1);
2032 strncpy(tmp->exten, i->exten, sizeof(tmp->exten)-1);
2033 if (!ast_strlen_zero(i->cid_num))
2034 tmp->cid.cid_num = strdup(i->cid_num);
2035 if (!ast_strlen_zero(i->cid_name))
2036 tmp->cid.cid_name = strdup(i->cid_name);
2037 if (!ast_strlen_zero(i->rdnis))
2038 tmp->cid.cid_rdnis = strdup(i->rdnis);
2039 if (!ast_strlen_zero(i->exten) && strcmp(i->exten, "s"))
2040 tmp->cid.cid_dnid = strdup(i->exten);
2042 if (!ast_strlen_zero(i->uri)) {
2043 pbx_builtin_setvar_helper(tmp, "SIPURI", i->uri);
2045 if (!ast_strlen_zero(i->domain)) {
2046 pbx_builtin_setvar_helper(tmp, "SIPDOMAIN", i->domain);
2048 if (!ast_strlen_zero(i->useragent)) {
2049 pbx_builtin_setvar_helper(tmp, "SIPUSERAGENT", i->useragent);
2051 if (!ast_strlen_zero(i->callid)) {
2052 pbx_builtin_setvar_helper(tmp, "SIPCALLID", i->callid);
2054 ast_setstate(tmp, state);
2055 if (state != AST_STATE_DOWN) {
2056 if (ast_pbx_start(tmp)) {
2057 ast_log(LOG_WARNING, "Unable to start PBX on %s\n", tmp->name);
2062 for (v = i->vars ; v ; v = v->next)
2063 pbx_builtin_setvar_helper(tmp,v->name,v->value);
2066 ast_log(LOG_WARNING, "Unable to allocate channel structure\n");
2070 static struct cfalias {
2074 { "Content-Type", "c" },
2075 { "Content-Encoding", "e" },
2079 { "Content-Length", "l" },
2082 { "Supported", "k" },
2083 { "Refer-To", "r" },
2084 { "Allow-Events", "u" },
2089 /*--- get_sdp_by_line: Reads one line of SIP message body */
2090 static char* get_sdp_by_line(char* line, char *name, int nameLen) {
2091 if (strncasecmp(line, name, nameLen) == 0 && line[nameLen] == '=') {
2092 char* r = line + nameLen + 1;
2093 while (*r && (*r < 33)) ++r;
2100 /*--- get_sdp: Gets all kind of SIP message bodies, including SDP,
2101 but the name wrongly applies _only_ sdp */
2102 static char *get_sdp(struct sip_request *req, char *name) {
2104 int len = strlen(name);
2107 for (x=0; x<req->lines; x++) {
2108 r = get_sdp_by_line(req->line[x], name, len);
2109 if (r[0] != '\0') return r;
2115 static void sdpLineNum_iterator_init(int* iterator) {
2119 static char* get_sdp_iterate(int* iterator,
2120 struct sip_request *req, char *name) {
2121 int len = strlen(name);
2123 while (*iterator < req->lines) {
2124 r = get_sdp_by_line(req->line[(*iterator)++], name, len);
2125 if (r[0] != '\0') return r;
2130 static char *__get_header(struct sip_request *req, char *name, int *start)
2133 int len = strlen(name);
2135 if (pedanticsipchecking) {
2136 /* Technically you can place arbitrary whitespace both before and after the ':' in
2137 a header, although RFC3261 clearly says you shouldn't before, and place just
2138 one afterwards. If you shouldn't do it, what absolute idiot decided it was
2139 a good idea to say you can do it, and if you can do it, why in the hell would
2140 you say you shouldn't. */
2141 for (x=*start;x<req->headers;x++) {
2142 if (!strncasecmp(req->header[x], name, len)) {
2143 r = req->header[x] + len;
2144 while(*r && (*r < 33))
2148 while(*r && (*r < 33))
2156 /* We probably shouldn't even bother counting whitespace afterwards but
2157 I guess for backwards compatibility we will */
2158 for (x=*start;x<req->headers;x++) {
2159 if (!strncasecmp(req->header[x], name, len) &&
2160 (req->header[x][len] == ':')) {
2161 r = req->header[x] + len + 1;
2162 while(*r && (*r < 33))
2170 for (x=0;x<sizeof(aliases) / sizeof(aliases[0]); x++)
2171 if (!strcasecmp(aliases[x].fullname, name))
2172 return __get_header(req, aliases[x].shortname, start);
2174 /* Don't return NULL, so get_header is always a valid pointer */
2178 /*--- get_header: Get header from SIP request ---*/
2179 static char *get_header(struct sip_request *req, char *name)
2182 return __get_header(req, name, &start);
2185 /*--- sip_rtp_read: Read RTP from network ---*/
2186 static struct ast_frame *sip_rtp_read(struct ast_channel *ast, struct sip_pvt *p)
2188 /* Retrieve audio/etc from channel. Assumes p->lock is already held. */
2189 struct ast_frame *f;
2190 static struct ast_frame null_frame = { AST_FRAME_NULL, };
2193 f = ast_rtp_read(p->rtp); /* RTP Audio */
2196 f = ast_rtcp_read(p->rtp); /* RTCP Control Channel */
2199 f = ast_rtp_read(p->vrtp); /* RTP Video */
2202 f = ast_rtcp_read(p->vrtp); /* RTCP Control Channel for video */
2207 /* Don't send RFC2833 if we're not supposed to */
2208 if (f && (f->frametype == AST_FRAME_DTMF) && (ast_test_flag(p, SIP_DTMF) != SIP_DTMF_RFC2833))
2211 /* We already hold the channel lock */
2212 if (f->frametype == AST_FRAME_VOICE) {
2213 if (f->subclass != p->owner->nativeformats) {
2214 ast_log(LOG_DEBUG, "Oooh, format changed to %d\n", f->subclass);
2215 p->owner->nativeformats = f->subclass;
2216 ast_set_read_format(p->owner, p->owner->readformat);
2217 ast_set_write_format(p->owner, p->owner->writeformat);
2219 if ((ast_test_flag(p, SIP_DTMF) == SIP_DTMF_INBAND) && p->vad) {
2220 f = ast_dsp_process(p->owner,p->vad,f);
2221 if (f && (f->frametype == AST_FRAME_DTMF))
2222 ast_log(LOG_DEBUG, "Detected DTMF '%c'\n", f->subclass);
2229 /*--- sip_read: Read SIP RTP from channel */
2230 static struct ast_frame *sip_read(struct ast_channel *ast)
2232 struct ast_frame *fr;
2233 struct sip_pvt *p = ast->pvt->pvt;
2234 ast_mutex_lock(&p->lock);
2235 fr = sip_rtp_read(ast, p);
2236 time(&p->lastrtprx);
2237 ast_mutex_unlock(&p->lock);
2241 /*--- build_callid: Build SIP CALLID header ---*/
2242 static void build_callid(char *callid, int len, struct in_addr ourip, char *fromdomain)
2247 char iabuf[INET_ADDRSTRLEN];
2250 res = snprintf(callid, len, "%08x", val);
2254 if (!ast_strlen_zero(fromdomain))
2255 snprintf(callid, len, "@%s", fromdomain);
2257 /* It's not important that we really use our right IP here... */
2258 snprintf(callid, len, "@%s", ast_inet_ntoa(iabuf, sizeof(iabuf), ourip));
2261 /*--- sip_alloc: Allocate SIP_PVT structure and set defaults ---*/
2262 static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useglobal_nat)
2266 p = malloc(sizeof(struct sip_pvt));
2269 /* Keep track of stuff */
2270 memset(p, 0, sizeof(struct sip_pvt));
2271 ast_mutex_init(&p->lock);
2281 memcpy(&p->sa, sin, sizeof(p->sa));
2282 if (ast_sip_ouraddrfor(&p->sa.sin_addr,&p->ourip))
2283 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2285 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2287 p->rtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2289 p->vrtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2293 /* Start with 101 instead of 1 */
2296 ast_log(LOG_WARNING, "Unable to create RTP session: %s\n", strerror(errno));
2297 ast_mutex_destroy(&p->lock);
2299 ast_variables_destroy(p->vars);
2305 ast_rtp_settos(p->rtp, tos);
2307 ast_rtp_settos(p->vrtp, tos);
2308 if (useglobal_nat && sin) {
2309 /* Setup NAT structure according to global settings if we have an address */
2310 ast_copy_flags(p, &global_flags, SIP_NAT);
2311 memcpy(&p->recv, sin, sizeof(p->recv));
2312 ast_rtp_setnat(p->rtp, (ast_test_flag(p, SIP_NAT) & SIP_NAT_ROUTE));
2314 ast_rtp_setnat(p->vrtp, (ast_test_flag(p, SIP_NAT) & SIP_NAT_ROUTE));
2317 strncpy(p->fromdomain, default_fromdomain, sizeof(p->fromdomain) - 1);
2318 build_via(p, p->via, sizeof(p->via));
2320 build_callid(p->callid, sizeof(p->callid), p->ourip, p->fromdomain);
2322 strncpy(p->callid, callid, sizeof(p->callid) - 1);
2323 ast_copy_flags(p, (&global_flags), SIP_PROMISCREDIR | SIP_TRUSTRPID | SIP_DTMF | SIP_REINVITE | SIP_PROG_INBAND | SIP_OSPAUTH);
2324 /* Assign default music on hold class */
2325 strncpy(p->musicclass, global_musicclass, sizeof(p->musicclass) - 1);
2326 p->rtptimeout = global_rtptimeout;
2327 p->rtpholdtimeout = global_rtpholdtimeout;
2328 p->rtpkeepalive = global_rtpkeepalive;
2329 p->capability = global_capability;
2330 if (ast_test_flag(p, SIP_DTMF) == SIP_DTMF_RFC2833)
2331 p->noncodeccapability |= AST_RTP_DTMF;
2332 strncpy(p->context, default_context, sizeof(p->context) - 1);
2334 ast_mutex_lock(&iflock);
2337 ast_mutex_unlock(&iflock);
2339 ast_log(LOG_DEBUG, "Allocating new SIP call for %s\n", callid);
2343 /*--- find_call: Connect incoming SIP message to current call or create new call structure */
2344 /* Called by handle_request ,sipsock_read */
2345 static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *sin)
2350 char iabuf[INET_ADDRSTRLEN];
2354 callid = get_header(req, "Call-ID");
2356 if (pedanticsipchecking) {
2357 /* In principle Call-ID's uniquely identify a call, however some vendors
2358 (i.e. Pingtel) send multiple calls with the same Call-ID and different
2359 tags in order to simplify billing. The RFC does state that we have to
2360 compare tags in addition to the call-id, but this generate substantially
2361 more overhead which is totally unnecessary for the vast majority of sane
2362 SIP implementations, and thus Asterisk does not enable this behavior
2363 by default. Short version: You'll need this option to support conferencing
2365 strncpy(tmp, req->header[0], sizeof(tmp) - 1);
2367 c = strchr(tmp, ' ');
2370 if (!strcasecmp(cmd, "SIP/2.0"))
2371 strncpy(tmp, get_header(req, "To"), sizeof(tmp) - 1);
2373 strncpy(tmp, get_header(req, "From"), sizeof(tmp) - 1);
2374 tag = strstr(tmp, "tag=");
2377 c = strchr(tag, ';');
2384 if (ast_strlen_zero(callid)) {
2385 ast_log(LOG_WARNING, "Call missing call ID from '%s'\n", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr));
2388 ast_mutex_lock(&iflock);
2391 if (!strcmp(p->callid, callid) &&
2392 (!pedanticsipchecking || !tag || ast_strlen_zero(p->theirtag) || !strcmp(p->theirtag, tag))) {
2393 /* Found the call */
2394 ast_mutex_lock(&p->lock);
2395 ast_mutex_unlock(&iflock);
2400 ast_mutex_unlock(&iflock);
2401 p = sip_alloc(callid, sin, 1);
2403 ast_mutex_lock(&p->lock);
2407 /*--- sip_register: Parse register=> line in sip.conf and add to registry */
2408 static int sip_register(char *value, int lineno)
2410 struct sip_registry *reg;
2411 char copy[256] = "";
2412 char *username=NULL, *hostname=NULL, *secret=NULL, *authuser=NULL;
2419 strncpy(copy, value, sizeof(copy)-1);
2422 hostname = strrchr(stringp, '@');
2427 if (!username || ast_strlen_zero(username) || !hostname || ast_strlen_zero(hostname)) {
2428 ast_log(LOG_WARNING, "Format for registration is user[:secret[:authuser]]@host[:port][/contact] at line %d", lineno);
2432 username = strsep(&stringp, ":");
2434 secret = strsep(&stringp, ":");
2436 authuser = strsep(&stringp, ":");
2439 hostname = strsep(&stringp, "/");
2441 contact = strsep(&stringp, "/");
2442 if (!contact || ast_strlen_zero(contact))
2445 hostname = strsep(&stringp, ":");
2446 porta = strsep(&stringp, ":");
2448 if (porta && !atoi(porta)) {
2449 ast_log(LOG_WARNING, "%s is not a valid port number at line %d\n", porta, lineno);
2452 reg = malloc(sizeof(struct sip_registry));
2454 memset(reg, 0, sizeof(struct sip_registry));
2457 strncpy(reg->contact, contact, sizeof(reg->contact) - 1);
2459 strncpy(reg->username, username, sizeof(reg->username)-1);
2461 strncpy(reg->hostname, hostname, sizeof(reg->hostname)-1);
2463 strncpy(reg->authuser, authuser, sizeof(reg->authuser)-1);
2465 strncpy(reg->secret, secret, sizeof(reg->secret)-1);
2468 reg->refresh = default_expiry;
2469 reg->portno = porta ? atoi(porta) : 0;
2470 reg->callid_valid = 0;
2472 ASTOBJ_CONTAINER_LINK(®l, reg);
2473 ASTOBJ_UNREF(reg,sip_registry_destroy);
2475 ast_log(LOG_ERROR, "Out of memory\n");
2481 /*--- lws2sws: Parse multiline SIP headers into one header */
2482 /* This is enabled if pedanticsipchecking is enabled */
2483 static int lws2sws(char *msgbuf, int len)
2489 /* Eliminate all CRs */
2490 if (msgbuf[h] == '\r') {
2494 /* Check for end-of-line */
2495 if (msgbuf[h] == '\n') {
2496 /* Check for end-of-message */
2499 /* Check for a continuation line */
2500 if (msgbuf[h + 1] == ' ' || msgbuf[h + 1] == '\t') {
2501 /* Merge continuation line */
2505 /* Propagate LF and start new line */
2506 msgbuf[t++] = msgbuf[h++];
2510 if (msgbuf[h] == ' ' || msgbuf[h] == '\t') {
2515 msgbuf[t++] = msgbuf[h++];
2519 msgbuf[t++] = msgbuf[h++];
2527 /*--- parse: Parse a SIP message ----*/
2528 static void parse(struct sip_request *req)
2530 /* Divide fields by NULL's */
2535 /* First header starts immediately */
2539 /* We've got a new header */
2543 printf("Header: %s (%d)\n", req->header[f], strlen(req->header[f]));
2545 if (ast_strlen_zero(req->header[f])) {
2546 /* Line by itself means we're now in content */
2550 if (f >= SIP_MAX_HEADERS - 1) {
2551 ast_log(LOG_WARNING, "Too many SIP headers...\n");
2554 req->header[f] = c + 1;
2555 } else if (*c == '\r') {
2556 /* Ignore but eliminate \r's */
2561 /* Check for last header */
2562 if (!ast_strlen_zero(req->header[f]))
2565 /* Now we process any mime content */
2570 /* We've got a new line */
2573 printf("Line: %s (%d)\n", req->line[f], strlen(req->line[f]));
2575 if (f >= SIP_MAX_LINES - 1) {
2576 ast_log(LOG_WARNING, "Too many SDP lines...\n");
2579 req->line[f] = c + 1;
2580 } else if (*c == '\r') {
2581 /* Ignore and eliminate \r's */
2586 /* Check for last line */
2587 if (!ast_strlen_zero(req->line[f]))
2591 ast_log(LOG_WARNING, "Odd content, extra stuff left over ('%s')\n", c);
2594 /*--- process_sdp: Process SIP SDP ---*/
2595 static int process_sdp(struct sip_pvt *p, struct sip_request *req)
2601 char iabuf[INET_ADDRSTRLEN];
2605 int peercapability, peernoncodeccapability;
2606 int vpeercapability=0, vpeernoncodeccapability=0;
2607 struct sockaddr_in sin;
2610 struct ast_hostent ahp;
2612 int destiterator = 0;
2616 int debug=sip_debug_test_pvt(p);
2618 /* Update our last rtprx when we receive an SDP, too */
2619 time(&p->lastrtprx);
2620 time(&p->lastrtptx);
2622 /* Get codec and RTP info from SDP */
2623 if (strcasecmp(get_header(req, "Content-Type"), "application/sdp")) {
2624 ast_log(LOG_NOTICE, "Content is '%s', not 'application/sdp'\n", get_header(req, "Content-Type"));
2627 m = get_sdp(req, "m");
2628 sdpLineNum_iterator_init(&destiterator);
2629 c = get_sdp_iterate(&destiterator, req, "c");
2630 if (ast_strlen_zero(m) || ast_strlen_zero(c)) {
2631 ast_log(LOG_WARNING, "Insufficient information for SDP (m = '%s', c = '%s')\n", m, c);
2634 if (sscanf(c, "IN IP4 %256s", host) != 1) {
2635 ast_log(LOG_WARNING, "Invalid host in c= line, '%s'\n", c);
2638 /* XXX This could block for a long time, and block the main thread! XXX */
2639 hp = ast_gethostbyname(host, &ahp);
2641 ast_log(LOG_WARNING, "Unable to lookup host in c= line, '%s'\n", c);
2644 sdpLineNum_iterator_init(&iterator);
2645 ast_set_flag(p, SIP_NOVIDEO);
2646 while ((m = get_sdp_iterate(&iterator, req, "m"))[0] != '\0') {
2647 if ((sscanf(m, "audio %d RTP/AVP %n", &x, &len) == 1) ||
2648 (sscanf(m, "audio %d/%d RTP/AVP %n", &x, &y, &len) == 2)) {
2650 /* Scan through the RTP payload types specified in a "m=" line: */
2651 ast_rtp_pt_clear(p->rtp);
2653 while(!ast_strlen_zero(codecs)) {
2654 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2655 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2659 ast_verbose("Found RTP audio format %d\n", codec);
2660 ast_rtp_set_m_type(p->rtp, codec);
2662 /* Skip over any whitespace */
2663 while(*codecs && (*codecs < 33)) codecs++;
2667 ast_rtp_pt_clear(p->vrtp); /* Must be cleared in case no m=video line exists */
2669 if (p->vrtp && (sscanf(m, "video %d RTP/AVP %n", &x, &len) == 1)) {
2670 ast_clear_flag(p, SIP_NOVIDEO);
2672 /* Scan through the RTP payload types specified in a "m=" line: */
2674 while(!ast_strlen_zero(codecs)) {
2675 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2676 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2680 ast_verbose("Found video format %s\n", ast_getformatname(codec));
2681 ast_rtp_set_m_type(p->vrtp, codec);
2683 /* Skip over any whitespace */
2684 while(*codecs && (*codecs < 33)) codecs++;
2688 /* Check for Media-description-level-address for audio */
2689 if (pedanticsipchecking) {
2690 c = get_sdp_iterate(&destiterator, req, "c");
2691 if (!ast_strlen_zero(c)) {
2692 if (sscanf(c, "IN IP4 %256s", host) != 1) {
2693 ast_log(LOG_WARNING, "Invalid secondary host in c= line, '%s'\n", c);
2695 /* XXX This could block for a long time, and block the main thread! XXX */
2696 hp = ast_gethostbyname(host, &ahp);
2698 ast_log(LOG_WARNING, "Unable to lookup host in secondary c= line, '%s'\n", c);
2703 /* RTP addresses and ports for audio and video */
2704 sin.sin_family = AF_INET;
2705 memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
2707 /* Setup audio port number */
2708 sin.sin_port = htons(portno);
2709 if (p->rtp && sin.sin_port) {
2710 ast_rtp_set_peer(p->rtp, &sin);
2712 ast_verbose("Peer audio RTP is at port %s:%d\n", ast_inet_ntoa(iabuf,sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2713 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));
2716 /* Check for Media-description-level-address for video */
2717 if (pedanticsipchecking) {
2718 c = get_sdp_iterate(&destiterator, req, "c");
2719 if (!ast_strlen_zero(c)) {
2720 if (sscanf(c, "IN IP4 %256s", host) != 1) {
2721 ast_log(LOG_WARNING, "Invalid secondary host in c= line, '%s'\n", c);
2723 /* XXX This could block for a long time, and block the main thread! XXX */
2724 hp = ast_gethostbyname(host, &ahp);
2726 ast_log(LOG_WARNING, "Unable to lookup host in secondary c= line, '%s'\n", c);
2731 /* Setup video port number */
2732 sin.sin_port = htons(vportno);
2733 if (p->vrtp && sin.sin_port) {
2734 ast_rtp_set_peer(p->vrtp, &sin);
2736 ast_verbose("Peer video RTP is at port %s:%d\n", ast_inet_ntoa(iabuf,sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2737 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));
2741 /* Next, scan through each "a=rtpmap:" line, noting each
2742 * specified RTP payload type (with corresponding MIME subtype):
2744 sdpLineNum_iterator_init(&iterator);
2745 while ((a = get_sdp_iterate(&iterator, req, "a"))[0] != '\0') {
2746 char* mimeSubtype = ast_strdupa(a); /* ensures we have enough space */
2747 if (!strcasecmp(a, "sendonly")) {
2751 if (!strcasecmp(a, "sendrecv")) {
2754 if (sscanf(a, "rtpmap: %u %[^/]/", &codec, mimeSubtype) != 2) continue;
2756 ast_verbose("Found description format %s\n", mimeSubtype);
2757 /* Note: should really look at the 'freq' and '#chans' params too */
2758 ast_rtp_set_rtpmap_type(p->rtp, codec, "audio", mimeSubtype);
2760 ast_rtp_set_rtpmap_type(p->vrtp, codec, "video", mimeSubtype);
2763 /* Now gather all of the codecs that were asked for: */
2764 ast_rtp_get_current_formats(p->rtp,
2765 &peercapability, &peernoncodeccapability);
2767 ast_rtp_get_current_formats(p->vrtp,
2768 &vpeercapability, &vpeernoncodeccapability);
2769 p->jointcapability = p->capability & (peercapability | vpeercapability);
2770 p->peercapability = (peercapability | vpeercapability);
2771 p->noncodeccapability = noncodeccapability & peernoncodeccapability;
2774 /* shame on whoever coded this.... */
2775 const unsigned slen=512;
2776 char s1[slen], s2[slen], s3[slen], s4[slen];
2778 ast_verbose("Capabilities: us - %s, peer - audio=%s/video=%s, combined - %s\n",
2779 ast_getformatname_multiple(s1, slen, p->capability),
2780 ast_getformatname_multiple(s2, slen, peercapability),
2781 ast_getformatname_multiple(s3, slen, vpeercapability),
2782 ast_getformatname_multiple(s4, slen, p->jointcapability));
2784 ast_verbose("Non-codec capabilities: us - %s, peer - %s, combined - %s\n",
2785 ast_getformatname_multiple(s1, slen, noncodeccapability),
2786 ast_getformatname_multiple(s2, slen, peernoncodeccapability),
2787 ast_getformatname_multiple(s3, slen, p->noncodeccapability));
2789 if (!p->jointcapability) {
2790 ast_log(LOG_NOTICE, "No compatible codecs!\n");
2794 if (!(p->owner->nativeformats & p->jointcapability)) {
2795 const unsigned slen=512;
2796 char s1[slen], s2[slen];
2797 ast_log(LOG_DEBUG, "Oooh, we need to change our formats since our peer supports only %s and not %s\n",
2798 ast_getformatname_multiple(s1, slen, p->jointcapability),
2799 ast_getformatname_multiple(s2, slen, p->owner->nativeformats));
2800 p->owner->nativeformats = ast_codec_choose(&p->prefs, p->jointcapability, 1);
2801 ast_set_read_format(p->owner, p->owner->readformat);
2802 ast_set_write_format(p->owner, p->owner->writeformat);
2804 if (ast_bridged_channel(p->owner)) {
2805 /* Turn on/off music on hold if we are holding/unholding */
2806 if (sin.sin_addr.s_addr && !sendonly) {
2807 ast_moh_stop(ast_bridged_channel(p->owner));
2808 if (callevents && p->onhold) {
2809 manager_event(EVENT_FLAG_CALL, "Unhold",
2813 p->owner->uniqueid);
2817 if (callevents && !p->onhold) {
2818 manager_event(EVENT_FLAG_CALL, "Hold",
2822 p->owner->uniqueid);
2825 ast_moh_start(ast_bridged_channel(p->owner), NULL);
2827 ast_rtp_stop(p->rtp);
2835 /*--- add_header: Add header to SIP message */
2836 static int add_header(struct sip_request *req, char *var, char *value)
2839 char *shortname = "";
2840 if (req->len >= sizeof(req->data) - 4) {
2841 ast_log(LOG_WARNING, "Out of space, can't add anymore (%s:%s)\n", var, value);
2845 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2849 req->header[req->headers] = req->data + req->len;
2850 if (compactheaders) {
2851 for (x=0;x<sizeof(aliases) / sizeof(aliases[0]); x++)
2852 if (!strcasecmp(aliases[x].fullname, var))
2853 shortname = aliases[x].shortname;
2855 if(!ast_strlen_zero(shortname)) {
2856 snprintf(req->header[req->headers], sizeof(req->data) - req->len - 4, "%s: %s\r\n", shortname, value);
2858 snprintf(req->header[req->headers], sizeof(req->data) - req->len - 4, "%s: %s\r\n", var, value);
2860 req->len += strlen(req->header[req->headers]);
2861 if (req->headers < SIP_MAX_HEADERS)
2864 ast_log(LOG_WARNING, "Out of header space\n");
2870 /*--- add_blank_header: Add blank header to SIP message */
2871 static int add_blank_header(struct sip_request *req)
2873 if (req->len >= sizeof(req->data) - 4) {
2874 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2878 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2881 req->header[req->headers] = req->data + req->len;
2882 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "\r\n");
2883 req->len += strlen(req->header[req->headers]);
2884 if (req->headers < SIP_MAX_HEADERS)
2887 ast_log(LOG_WARNING, "Out of header space\n");
2893 /*--- add_line: Add content (not header) to SIP message */
2894 static int add_line(struct sip_request *req, char *line)
2896 if (req->len >= sizeof(req->data) - 4) {
2897 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2901 /* Add extra empty return */
2902 snprintf(req->data + req->len, sizeof(req->data) - req->len, "\r\n");
2903 req->len += strlen(req->data + req->len);
2905 req->line[req->lines] = req->data + req->len;
2906 snprintf(req->line[req->lines], sizeof(req->data) - req->len, "%s", line);
2907 req->len += strlen(req->line[req->lines]);
2908 if (req->lines < SIP_MAX_LINES)
2911 ast_log(LOG_WARNING, "Out of line space\n");
2917 /*--- copy_header: Copy one header field from one request to another */
2918 static int copy_header(struct sip_request *req, struct sip_request *orig, char *field)
2921 tmp = get_header(orig, field);
2922 if (!ast_strlen_zero(tmp)) {
2923 /* Add what we're responding to */
2924 return add_header(req, field, tmp);
2926 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2930 /*--- copy_all_header: Copy all headers from one request to another ---*/
2931 static int copy_all_header(struct sip_request *req, struct sip_request *orig, char *field)
2937 tmp = __get_header(orig, field, &start);
2938 if (!ast_strlen_zero(tmp)) {
2939 /* Add what we're responding to */
2940 add_header(req, field, tmp);
2945 return copied ? 0 : -1;
2948 /*--- copy_via_headers: Copy SIP VIA Headers from one request to another ---*/
2949 static int copy_via_headers(struct sip_pvt *p, struct sip_request *req, struct sip_request *orig, char *field)
2951 char tmp[256]="", *oh, *end;
2955 char iabuf[INET_ADDRSTRLEN];
2957 oh = __get_header(orig, field, &start);
2958 if (!ast_strlen_zero(oh)) {
2960 strncpy(tmp, oh, sizeof(tmp) - 1);
2961 oh = strstr(tmp, ";rport");
2963 end = strchr(oh + 1, ';');
2965 memmove(oh, end, strlen(end) + 1);
2969 if (!copied && (ast_test_flag(p, SIP_NAT) == SIP_NAT_ALWAYS)) {
2970 /* Whoo hoo! Now we can indicate port address translation too! Just
2971 another RFC (RFC3581). I'll leave the original comments in for
2973 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));
2974 add_header(req, field, new);
2976 /* Add what we're responding to */
2977 add_header(req, field, tmp);
2984 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2990 /*--- add_route: Add route header into request per learned route ---*/
2991 static void add_route(struct sip_request *req, struct sip_route *route)
2994 int n, rem = 255; /* sizeof(r)-1: Room for terminating 0 */
3000 n = strlen(route->hop);
3001 if ((n+3)>rem) break;
3007 strncpy(p, route->hop, rem); p += n;
3010 route = route->next;
3013 add_header(req, "Route", r);
3016 /*--- set_destination: Set destination from SIP URI ---*/
3017 static void set_destination(struct sip_pvt *p, char *uri)
3019 char *h, *maddr, hostname[256] = "";
3020 char iabuf[INET_ADDRSTRLEN];
3023 struct ast_hostent ahp;
3024 int debug=sip_debug_test_pvt(p);
3026 /* Parse uri to h (host) and port - uri is already just the part inside the <> */
3027 /* general form we are expecting is sip[s]:username[:password]@host[:port][;...] */
3030 ast_verbose("set_destination: Parsing <%s> for address/port to send to\n", uri);
3032 /* Find and parse hostname */
3033 h = strchr(uri, '@');
3038 if (strncmp(h, "sip:", 4) == 0)
3040 else if (strncmp(h, "sips:", 5) == 0)
3043 hn = strcspn(h, ":;>");
3044 if (hn > (sizeof(hostname) - 1)) hn = sizeof(hostname) - 1;
3045 strncpy(hostname, h, hn); hostname[hn] = '\0'; /* safe */
3048 /* Is "port" present? if not default to 5060 */
3052 port = strtol(h, &h, 10);
3057 /* Got the hostname:port - but maybe there's a "maddr=" to override address? */
3058 maddr = strstr(h, "maddr=");
3061 hn = strspn(maddr, "0123456789.");
3062 if (hn > (sizeof(hostname) - 1)) hn = sizeof(hostname) - 1;
3063 strncpy(hostname, maddr, hn); hostname[hn] = '\0'; /* safe */
3066 hp = ast_gethostbyname(hostname, &ahp);
3068 ast_log(LOG_WARNING, "Can't find address for host '%s'\n", hostname);
3071 p->sa.sin_family = AF_INET;
3072 memcpy(&p->sa.sin_addr, hp->h_addr, sizeof(p->sa.sin_addr));
3073 p->sa.sin_port = htons(port);
3075 ast_verbose("set_destination: set destination to %s, port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr), port);
3078 /*--- init_resp: Initialize SIP response, based on SIP request ---*/
3079 static int init_resp(struct sip_request *req, char *resp, struct sip_request *orig)
3081 /* Initialize a response */
3082 if (req->headers || req->len) {
3083 ast_log(LOG_WARNING, "Request already initialized?!?\n");
3086 req->header[req->headers] = req->data + req->len;
3087 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "SIP/2.0 %s\r\n", resp);
3088 req->len += strlen(req->header[req->headers]);
3089 if (req->headers < SIP_MAX_HEADERS)
3092 ast_log(LOG_WARNING, "Out of header space\n");
3096 /*--- init_req: Initialize SIP request ---*/
3097 static int init_req(struct sip_request *req, char *resp, char *recip)
3099 /* Initialize a response */
3100 if (req->headers || req->len) {
3101 ast_log(LOG_WARNING, "Request already initialized?!?\n");
3104 req->header[req->headers] = req->data + req->len;
3105 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "%s %s SIP/2.0\r\n", resp, recip);
3106 req->len += strlen(req->header[req->headers]);
3107 if (req->headers < SIP_MAX_HEADERS)
3110 ast_log(LOG_WARNING, "Out of header space\n");
3115 /*--- respprep: Prepare SIP response packet ---*/
3116 static int respprep(struct sip_request *resp, struct sip_pvt *p, char *msg, struct sip_request *req)
3118 char newto[256] = "", *ot;
3120 memset(resp, 0, sizeof(*resp));
3121 init_resp(resp, msg, req);
3122 copy_via_headers(p, resp, req, "Via");
3124 copy_all_header(resp, req, "Record-Route");
3125 copy_header(resp, req, "From");
3126 ot = get_header(req, "To");
3127 if (!strstr(ot, "tag=")) {
3128 /* Add the proper tag if we don't have it already. If they have specified
3129 their tag, use it. Otherwise, use our own tag */
3130 if (!ast_strlen_zero(p->theirtag) && ast_test_flag(p, SIP_OUTGOING))
3131 snprintf(newto, sizeof(newto), "%s;tag=%s", ot, p->theirtag);
3132 else if (p->tag && !ast_test_flag(p, SIP_OUTGOING))
3133 snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag);
3135 strncpy(newto, ot, sizeof(newto) - 1);
3136 newto[sizeof(newto) - 1] = '\0';
3140 add_header(resp, "To", ot);
3141 copy_header(resp, req, "Call-ID");
3142 copy_header(resp, req, "CSeq");
3143 add_header(resp, "User-Agent", default_useragent);
3144 add_header(resp, "Allow", ALLOWED_METHODS);
3146 /* For registration responses, we also need expiry and
3150 snprintf(contact, sizeof(contact), "%s;expires=%d", p->our_contact, p->expiry);
3151 snprintf(tmp, sizeof(tmp), "%d", p->expiry);
3152 add_header(resp, "Expires", tmp);
3153 add_header(resp, "Contact", contact);
3155 add_header(resp, "Contact", p->our_contact);
3160 /*--- reqprep: Initialize a SIP request packet ---*/
3161 static int reqprep(struct sip_request *req, struct sip_pvt *p, char *msg, int seqno, int newbranch)
3163 struct sip_request *orig = &p->initreq;
3164 char stripped[80] ="";
3170 memset(req, 0, sizeof(struct sip_request));
3172 snprintf(p->lastmsg, sizeof(p->lastmsg), "Tx: %s", msg);
3180 p->branch ^= rand();
3181 build_via(p, p->via, sizeof(p->via));
3183 if (!strcasecmp(msg, "CANCEL")) {
3184 c = p->initreq.rlPart2; /* Use original URI */
3185 } else if (!strcasecmp(msg, "ACK")) {
3186 /* Use URI from Contact: in 200 OK (if INVITE)
3187 (we only have the contacturi on INVITEs) */
3188 if (!ast_strlen_zero(p->okcontacturi))
3189 c = p->okcontacturi;
3191 c = p->initreq.rlPart2;
3192 } else if (!ast_strlen_zero(p->okcontacturi)) {
3193 c = p->okcontacturi; /* Use for BYE or REINVITE */
3194 } else if (!ast_strlen_zero(p->uri)) {
3197 /* We have no URI, use To: or From: header as URI (depending on direction) */
3198 if (ast_test_flag(p, SIP_OUTGOING))
3199 strncpy(stripped, get_header(orig, "To"), sizeof(stripped) - 1);
3201 strncpy(stripped, get_header(orig, "From"), sizeof(stripped) - 1);
3203 c = strchr(stripped, '<');
3215 init_req(req, msg, c);
3217 snprintf(tmp, sizeof(tmp), "%d %s", seqno, msg);
3219 add_header(req, "Via", p->via);
3221 set_destination(p, p->route->hop);
3222 add_route(req, p->route->next);
3225 ot = get_header(orig, "To");
3226 of = get_header(orig, "From");
3228 /* Add tag *unless* this is a CANCEL, in which case we need to send it exactly
3229 as our original request, including tag (or presumably lack thereof) */
3230 if (!strstr(ot, "tag=") && strcasecmp(msg, "CANCEL")) {
3231 /* Add the proper tag if we don't have it already. If they have specified
3232 their tag, use it. Otherwise, use our own tag */
3233 if (ast_test_flag(p, SIP_OUTGOING) && !ast_strlen_zero(p->theirtag))
3234 snprintf(newto, sizeof(newto), "%s;tag=%s", ot, p->theirtag);
3235 else if (!ast_test_flag(p, SIP_OUTGOING))
3236 snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag);
3238 snprintf(newto, sizeof(newto), "%s", ot);
3242 if (ast_test_flag(p, SIP_OUTGOING)) {
3243 add_header(req, "From", of);
3244 add_header(req, "To", ot);
3246 add_header(req, "From", ot);
3247 add_header(req, "To", of);
3249 add_header(req, "Contact", p->our_contact);
3250 copy_header(req, orig, "Call-ID");
3251 add_header(req, "CSeq", tmp);
3253 add_header(req, "User-Agent", default_useragent);
3257 static int __transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req, int reliable)
3259 struct sip_request resp;
3261 if (reliable && (sscanf(get_header(req, "CSeq"), "%i ", &seqno) != 1)) {
3262 ast_log(LOG_WARNING, "Unable to determine sequence number from '%s'\n", get_header(req, "CSeq"));
3265 respprep(&resp, p, msg, req);
3266 add_header(&resp, "Content-Length", "0");
3267 add_blank_header(&resp);
3268 return send_response(p, &resp, reliable, seqno);
3271 /*--- transmit_response: Transmit response, no retransmits */
3272 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req)
3274 return __transmit_response(p, msg, req, 0);
3277 /*--- transmit_response: Transmit response, Make sure you get a reply */
3278 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal)
3280 return __transmit_response(p, msg, req, fatal ? 2 : 1);
3283 /*--- append_date: Append date to SIP message ---*/
3284 static void append_date(struct sip_request *req)
3291 strftime(tmpdat, sizeof(tmpdat), "%a, %d %b %Y %T GMT", &tm);
3292 add_header(req, "Date", tmpdat);
3295 /*--- transmit_response_with_date: Append date and content length before transmitting response ---*/
3296 static int transmit_response_with_date(struct sip_pvt *p, char *msg, struct sip_request *req)
3298 struct sip_request resp;
3299 respprep(&resp, p, msg, req);
3301 add_header(&resp, "Content-Length", "0");
3302 add_blank_header(&resp);
3303 return send_response(p, &resp, 0, 0);
3306 /*--- transmit_response_with_allow: Append Accept header, content length before transmitting response ---*/
3307 static int transmit_response_with_allow(struct sip_pvt *p, char *msg, struct sip_request *req, int reliable)
3309 struct sip_request resp;
3310 respprep(&resp, p, msg, req);
3311 add_header(&resp, "Accept", "application/sdp");
3312 add_header(&resp, "Content-Length", "0");
3313 add_blank_header(&resp);
3314 return send_response(p, &resp, reliable, 0);
3317 /* transmit_response_with_auth: Respond with authorization request */
3318 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *randdata, int reliable, char *header)
3320 struct sip_request resp;
3323 if (reliable && (sscanf(get_header(req, "CSeq"), "%i ", &seqno) != 1)) {
3324 ast_log(LOG_WARNING, "Unable to determine sequence number from '%s'\n", get_header(req, "CSeq"));
3327 snprintf(tmp, sizeof(tmp), "Digest realm=\"%s\", nonce=\"%s\"", global_realm, randdata);
3328 respprep(&resp, p, msg, req);
3329 add_header(&resp, header, tmp);
3330 add_header(&resp, "Content-Length", "0");
3331 add_blank_header(&resp);
3332 return send_response(p, &resp, reliable, seqno);
3335 /*--- add_text: Add text body to SIP message ---*/
3336 static int add_text(struct sip_request *req, char *text)
3338 /* XXX Convert \n's to \r\n's XXX */
3339 int len = strlen(text);
3341 snprintf(clen, sizeof(clen), "%d", len);
3342 add_header(req, "Content-Type", "text/plain");
3343 add_header(req, "Content-Length", clen);
3344 add_line(req, text);
3348 /*--- add_digit: add DTMF INFO tone to sip message ---*/
3349 /* Always adds default duration 250 ms, regardless of what came in over the line */
3350 static int add_digit(struct sip_request *req, char digit)
3355 snprintf(tmp, sizeof(tmp), "Signal=%c\r\nDuration=250\r\n", digit);
3357 snprintf(clen, sizeof(clen), "%d", len);
3358 add_header(req, "Content-Type", "application/dtmf-relay");
3359 add_header(req, "Content-Length", clen);
3364 /*--- add_sdp: Add Session Description Protocol message ---*/
3365 static int add_sdp(struct sip_request *resp, struct sip_pvt *p)
3370 int alreadysent = 0;
3372 struct sockaddr_in sin;
3373 struct sockaddr_in vsin;
3383 char iabuf[INET_ADDRSTRLEN];
3385 int capability = 0 ;
3386 struct sockaddr_in dest;
3387 struct sockaddr_in vdest = { 0, };
3390 debug = sip_debug_test_pvt(p);
3392 /* XXX We break with the "recommendation" and send our IP, in order that our
3393 peer doesn't have to ast_gethostbyname() us XXX */
3396 ast_log(LOG_WARNING, "No way to add SDP without an RTP structure\n");
3399 capability = p->capability;
3401 if (!p->sessionid) {
3402 p->sessionid = getpid();
3403 p->sessionversion = p->sessionid;
3405 p->sessionversion++;
3406 ast_rtp_get_us(p->rtp, &sin);
3408 ast_rtp_get_us(p->vrtp, &vsin);
3410 if (p->redirip.sin_addr.s_addr) {
3411 dest.sin_port = p->redirip.sin_port;
3412 dest.sin_addr = p->redirip.sin_addr;
3414 capability = p->redircodecs;
3416 dest.sin_addr = p->ourip;
3417 dest.sin_port = sin.sin_port;
3420 /* Determine video destination */
3422 if (p->vredirip.sin_addr.s_addr) {
3423 vdest.sin_port = p->vredirip.sin_port;
3424 vdest.sin_addr = p->vredirip.sin_addr;
3426 vdest.sin_addr = p->ourip;
3427 vdest.sin_port = vsin.sin_port;
3431 ast_verbose("We're at %s port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ntohs(sin.sin_port));
3433 ast_verbose("Video is at %s port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ntohs(vsin.sin_port));
3435 snprintf(v, sizeof(v), "v=0\r\n");
3436 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));
3437 snprintf(s, sizeof(s), "s=session\r\n");
3438 snprintf(c, sizeof(c), "c=IN IP4 %s\r\n", ast_inet_ntoa(iabuf, sizeof(iabuf), dest.sin_addr));
3439 snprintf(t, sizeof(t), "t=0 0\r\n");
3440 snprintf(m, sizeof(m), "m=audio %d RTP/AVP", ntohs(dest.sin_port));
3441 snprintf(m2, sizeof(m2), "m=video %d RTP/AVP", ntohs(vdest.sin_port));
3442 /* Prefer the codec we were requested to use, first, no matter what */
3443 if (capability & p->prefcodec) {
3445 ast_verbose("Answering/Requesting with root capability 0x%x (%s)\n", p->prefcodec, ast_getformatname(p->prefcodec));
3446 codec = ast_rtp_lookup_code(p->rtp, 1, p->prefcodec);
3448 snprintf(costr, sizeof(costr), " %d", codec);
3449 if (p->prefcodec <= AST_FORMAT_MAX_AUDIO) {
3450 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3451 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, p->prefcodec));
3452 strncpy(a, costr, sizeof(a) - 1);
3454 strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
3455 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, p->prefcodec));
3456 strncpy(a2, costr, sizeof(a2) - 1);
3459 alreadysent |= p->prefcodec;
3461 /* Start by sending our preferred codecs */
3462 for (x = 0 ; x < 32 ; x++) {
3463 if(!(pref_codec = ast_codec_pref_index(&p->prefs,x)))
3465 if ((capability & pref_codec) && !(alreadysent & pref_codec)) {
3467 ast_verbose("Answering with preferred capability 0x%x (%s)\n", pref_codec, ast_getformatname(pref_codec));
3468 codec = ast_rtp_lookup_code(p->rtp, 1, pref_codec);