2 * Asterisk -- A telephony toolkit for Linux.
4 * Implementation of Session Initiation Protocol
6 * Copyright (C) 2004, Digium, Inc.
8 * Mark Spencer <markster@digium.com>
10 * This program is free software, distributed under the terms of
11 * the GNU General Public License
18 #include <asterisk/lock.h>
19 #include <asterisk/channel.h>
20 #include <asterisk/channel_pvt.h>
21 #include <asterisk/config.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>
45 #include <asterisk/astosp.h>
47 #include <sys/socket.h>
48 #include <sys/ioctl.h>
55 #include <arpa/inet.h>
57 #include <sys/signal.h>
58 #include <netinet/in_systm.h>
59 #include <netinet/ip.h>
61 #ifdef SIP_MYSQL_FRIENDS
63 #include <mysql/mysql.h>
66 #ifndef DEFAULT_USERAGENT
67 #define DEFAULT_USERAGENT "Asterisk PBX"
70 #define VIDEO_CODEC_MASK 0x1fc0000 /* Video codecs from H.261 thru AST_FORMAT_MAX_VIDEO */
72 #define IPTOS_MINCOST 0x02
75 /* #define VOCAL_DATA_HACK */
78 #define DEFAULT_DEFAULT_EXPIRY 120
79 #define DEFAULT_MAX_EXPIRY 3600
81 /* guard limit must be larger than guard secs */
82 /* guard min must be < 1000, and should be >= 250 */
83 #define EXPIRY_GUARD_SECS 15 /* How long before expiry do we reregister */
84 #define EXPIRY_GUARD_LIMIT 30 /* Below here, we use EXPIRY_GUARD_PCT instead of EXPIRY_GUARD_SECS */
85 #define EXPIRY_GUARD_MIN 500 /* This is the minimum guard time applied. If GUARD_PCT turns out
86 to be lower than this, it will use this time instead. This is in
88 #define EXPIRY_GUARD_PCT 0.20 /* Percentage of expires timeout to use when below EXPIRY_GUARD_LIMIT */
91 #define MAX(a,b) ((a) > (b) ? (a) : (b))
94 #define CALLERID_UNKNOWN "Unknown"
96 /* --- Choices for DTMF support in SIP channel */
97 #define SIP_DTMF_RFC2833 (1 << 0)
98 #define SIP_DTMF_INBAND (1 << 1)
99 #define SIP_DTMF_INFO (1 << 2)
101 static int max_expiry = DEFAULT_MAX_EXPIRY;
102 static int default_expiry = DEFAULT_DEFAULT_EXPIRY;
104 #define DEFAULT_MAXMS 2000 /* Must be faster than 2 seconds by default */
105 #define DEFAULT_FREQ_OK 60 * 1000 /* How often to check for the host to be up */
106 #define DEFAULT_FREQ_NOTOK 10 * 1000 /* How often to check, if the host is down... */
108 #define DEFAULT_RETRANS 1000 /* How frequently to retransmit */
109 #define MAX_RETRANS 5 /* Try only 5 times for retransmissions */
111 /* MYSQL_FRIENDS: Check if peer exists in database and read some configuration
112 from databse (not all options supported though) */
114 AST_MUTEX_DEFINE_STATIC(mysqllock);
116 static char mydbuser[80];
117 static char mydbpass[80];
118 static char mydbhost[80];
119 static char mydbname[80];
123 #define DEBUG_READ 0 /* Recieved data */
124 #define DEBUG_SEND 1 /* Transmit data */
126 static char *desc = "Session Initiation Protocol (SIP)";
127 static char *type = "SIP";
128 static char *tdesc = "Session Initiation Protocol (SIP)";
129 static char *config = "sip.conf";
131 #define DEFAULT_SIP_PORT 5060 /* From RFC 2543 */
132 #define SIP_MAX_PACKET 1500 /* Also from RFC 2543, should sub headers tho */
134 #define ALLOWED_METHODS "INVITE, ACK, CANCEL, OPTIONS, BYE, REFER"
136 static char default_useragent[AST_MAX_EXTENSION] = DEFAULT_USERAGENT;
138 static char default_context[AST_MAX_EXTENSION] = "default";
140 static char default_language[MAX_LANGUAGE] = "";
142 static char default_callerid[AST_MAX_EXTENSION] = "asterisk";
144 static char default_fromdomain[AST_MAX_EXTENSION] = "";
146 static char notifymime[AST_MAX_EXTENSION] = "application/simple-message-summary";
148 static int srvlookup = 0;
150 static int pedanticsipchecking = 0;
152 static int autocreatepeer = 0;
154 static int relaxdtmf = 0;
156 static int global_rtptimeout = 0;
158 static int global_rtpholdtimeout = 0;
160 static int global_trustrpid = 0;
162 static int global_progressinband = 0;
165 static int global_ospauth = 0;
168 static int usecnt =0;
169 AST_MUTEX_DEFINE_STATIC(usecnt_lock);
171 /* Protect the interface list (of sip_pvt's) */
172 AST_MUTEX_DEFINE_STATIC(iflock);
174 /* Protect the monitoring thread, so only one process can kill or start it, and not
175 when it's doing something critical. */
176 AST_MUTEX_DEFINE_STATIC(netlock);
178 AST_MUTEX_DEFINE_STATIC(monlock);
180 /* This is the thread for the monitor which checks for input on the channels
181 which are not currently in use. */
182 static pthread_t monitor_thread = AST_PTHREADT_NULL;
184 static int restart_monitor(void);
186 /* Codecs that we support by default: */
187 static int global_capability = AST_FORMAT_ULAW | AST_FORMAT_ALAW | AST_FORMAT_GSM | AST_FORMAT_H263;
188 static int noncodeccapability = AST_RTP_DTMF;
190 static char ourhost[256];
191 static struct in_addr __ourip;
194 static int sipdebug = 0;
195 static struct sockaddr_in debugaddr;
199 static int videosupport = 0;
201 static int global_dtmfmode = SIP_DTMF_RFC2833; /* DTMF mode default */
202 static int recordhistory = 0;
203 static int global_promiscredir;
205 static char global_musicclass[MAX_LANGUAGE] = ""; /* Global music on hold class */
206 static char global_realm[AST_MAX_EXTENSION] = "asterisk"; /* Default realm */
207 static char regcontext[AST_MAX_EXTENSION] = "";
210 static int expiry = 900;
212 static struct sched_context *sched;
213 static struct io_context *io;
214 /* The private structures of the sip channels are linked for
215 selecting outgoing channels */
217 #define SIP_MAX_HEADERS 64
218 #define SIP_MAX_LINES 64
222 #define DEC_OUT_USE 2
223 #define INC_OUT_USE 3
225 static struct sip_codec_pref {
227 struct sip_codec_pref *next;
230 /* sip_request: The data grabbed from the UDP socket */
232 char *rlPart1; /* SIP Method Name or "SIP/2.0" protocol version */
233 char *rlPart2; /* The Request URI or Response Status */
235 int headers; /* SIP Headers */
236 char *header[SIP_MAX_HEADERS];
237 int lines; /* SDP Content */
238 char *line[SIP_MAX_LINES];
239 char data[SIP_MAX_PACKET];
245 struct sip_route *next;
251 struct sip_history *next;
254 /* sip_pvt: PVT structures are used for each SIP conversation, ie. a call */
255 static struct sip_pvt {
256 ast_mutex_t lock; /* Channel private lock */
257 char callid[80]; /* Global CallID */
258 char randdata[80]; /* Random data */
259 unsigned int ocseq; /* Current outgoing seqno */
260 unsigned int icseq; /* Current incoming seqno */
261 unsigned int callgroup; /* Call group */
262 unsigned int pickupgroup; /* Pickup group */
263 int lastinvite; /* Last Cseq of invite */
264 int alreadygone; /* Whether or not we've already been destroyed by or peer */
265 int needdestroy; /* if we need to be destroyed */
266 int capability; /* Special capability (codec) */
267 int novideo; /* Didn't get video in invite, don't offer */
268 int jointcapability; /* Supported capability at both ends (codecs ) */
269 int peercapability; /* Supported peer capability */
270 int prefcodec; /* Preferred codec (outbound only) */
271 int noncodeccapability;
272 int outgoing; /* Outgoing or incoming call? */
273 int authtries; /* Times we've tried to authenticate */
274 int insecure; /* Don't check source port/ip */
275 int expiry; /* How long we take to expire */
276 int branch; /* One random number */
277 int canreinvite; /* Do we support reinvite */
278 int ringing; /* Have sent 180 ringing */
279 int progress; /* Have sent 183 message progress */
280 int tag; /* Another random number */
281 int nat; /* Whether to try to support NAT */
282 int sessionid; /* SDP Session ID */
283 int sessionversion; /* SDP Session Version */
284 struct sockaddr_in sa; /* Our peer */
285 struct sockaddr_in redirip; /* Where our RTP should be going if not to us */
286 struct sockaddr_in vredirip; /* Where our Video RTP should be going if not to us */
287 int redircodecs; /* Redirect codecs */
288 struct sockaddr_in recv; /* Received as */
289 struct in_addr ourip; /* Our IP */
290 struct ast_channel *owner; /* Who owns us */
291 char exten[AST_MAX_EXTENSION]; /* Extension where to start */
292 char refer_to[AST_MAX_EXTENSION]; /* Place to store REFER-TO extension */
293 char referred_by[AST_MAX_EXTENSION]; /* Place to store REFERRED-BY extension */
294 char refer_contact[AST_MAX_EXTENSION]; /* Place to store Contact info from a REFER extension */
295 struct sip_pvt *refer_call; /* Call we are referring */
296 struct sip_route *route; /* Head of linked list of routing steps (fm Record-Route) */
297 int route_persistant; /* Is this the "real" route? */
298 char from[256]; /* The From: header */
299 char useragent[256]; /* User agent in SIP request */
300 char context[AST_MAX_EXTENSION]; /* Context for this call */
301 char fromdomain[AST_MAX_EXTENSION]; /* Domain to show in the from field */
302 char fromuser[AST_MAX_EXTENSION]; /* Domain to show in the user field */
303 char tohost[AST_MAX_EXTENSION]; /* Host we should put in the "to" field */
304 char language[MAX_LANGUAGE]; /* Default language for this call */
305 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
306 char rdnis[256]; /* Referring DNIS */
307 char theirtag[256]; /* Their tag */
310 char authname[256]; /* Who we use for authentication */
311 char uri[256]; /* Original requested URI */
312 char peersecret[256];
313 char peermd5secret[256];
314 char callerid[256]; /* Caller*ID */
315 int restrictcid; /* hide presentation from remote user */
317 char fullcontact[128]; /* Extra parameters to go in the "To" header */
318 char accountcode[20]; /* Account code */
319 char our_contact[256]; /* Our contact header */
320 char realm[256]; /* Authorization realm */
321 char nonce[256]; /* Authorization nonce */
322 char opaque[256]; /* Opaque nonsense */
323 char qop[80]; /* Quality of Protection, since SIP wasn't complicated enough yet. */
324 char domain[256]; /* Authorization nonce */
325 char lastmsg[256]; /* Last Message sent/received */
326 int amaflags; /* AMA Flags */
327 int pendinginvite; /* Any pending invite */
328 int needreinvite; /* Do we need to send another reinvite? */
329 int pendingbye; /* Need to send bye after we ack? */
330 int gotrefer; /* Got a refer? */
332 int ospauth; /* Allow OSP Authentication */
333 int osphandle; /* OSP Handle for call */
334 time_t ospstart; /* OSP Start time */
336 struct sip_request initreq; /* Initial request */
338 int maxtime; /* Max time for first response */
339 int initid; /* Auto-congest ID if appropriate */
340 int autokillid; /* Auto-kill ID */
341 time_t lastrtprx; /* Last RTP received */
342 int rtptimeout; /* RTP timeout time */
343 int rtpholdtimeout; /* RTP timeout when on hold */
348 int promiscredir; /* Promiscuous redirection */
356 struct sip_peer *peerpoke; /* If this calls is to poke a peer, which one */
357 struct sip_registry *registry; /* If this is a REGISTER call, to which registry */
358 struct ast_rtp *rtp; /* RTP Session */
359 struct ast_rtp *vrtp; /* Video RTP session */
360 struct sip_pkt *packets; /* Packets scheduled for re-transmission */
361 struct sip_history *history; /* History of this SIP dialog */
362 struct sip_pvt *next; /* Next call in chain */
365 #define FLAG_RESPONSE (1 << 0)
366 #define FLAG_FATAL (1 << 1)
368 /* sip packet - read in sipsock_read, transmitted in send_request */
370 struct sip_pkt *next; /* Next packet */
371 int retrans; /* Retransmission number */
372 int seqno; /* Sequence number */
373 int flags; /* non-zero if this is a response packet (e.g. 200 OK) */
374 struct sip_pvt *owner; /* Owner call */
375 int retransid; /* Retransmission ID */
376 int packetlen; /* Length of packet */
380 /* Structure for SIP user data. User's place calls to us */
382 /* Users who can access various contexts */
388 char accountcode[20];
389 char language[MAX_LANGUAGE];
390 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
391 char useragent[256]; /* User agent in SIP request */
392 unsigned int callgroup;
393 unsigned int pickupgroup;
401 int ospauth; /* Allow OSP Authentication */
415 #endif /* MYSQL_FRIENDS */
416 struct sip_user *next;
419 /* Structure for SIP peer data, we place calls to peers if registred or fixed IP address (host) */
424 char context[80]; /* JK02: peers need context too to allow parking etc */
427 char regexten[AST_MAX_EXTENSION]; /* Extension to register (if regcontext is used) */
430 char fullcontact[128];
431 char mailbox[AST_MAX_EXTENSION];
432 char language[MAX_LANGUAGE];
433 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
434 char useragent[256]; /* User agent in SIP request */
445 int ospauth; /* Allow OSP Authentication */
449 unsigned int callgroup;
450 unsigned int pickupgroup;
455 struct sockaddr_in addr;
459 struct sip_pvt *call; /* Call pointer */
460 int pokeexpire; /* When to expire poke */
461 int lastms; /* How long last response took (in ms), or -1 for no response */
462 int maxms; /* Max ms we will accept for the host to be up, 0 to not monitor */
463 struct timeval ps; /* Ping send time */
465 struct sockaddr_in defaddr;
471 struct sip_peer *next;
474 AST_MUTEX_DEFINE_STATIC(sip_reload_lock);
475 static int sip_reloading = 0;
477 #define REG_STATE_UNREGISTERED 0
478 #define REG_STATE_REGSENT 1
479 #define REG_STATE_AUTHSENT 2
480 #define REG_STATE_REGISTERED 3
481 #define REG_STATE_REJECTED 4
482 #define REG_STATE_TIMEOUT 5
483 #define REG_STATE_NOAUTH 6
485 #define SIP_NAT_NEVER 0
486 #define SIP_NAT_RFC3581 (1 << 0)
487 #define SIP_NAT_ROUTE (1 << 2)
488 #define SIP_NAT_ALWAYS (SIP_NAT_ROUTE | SIP_NAT_RFC3581)
490 /* sip_registry: Registrations with other SIP proxies */
491 struct sip_registry {
492 int portno; /* Optional port override */
493 char username[80]; /* Who we are registering as */
494 char authuser[80]; /* Who we *authenticate* as */
496 char secret[80]; /* Password or key name in []'s */
498 char contact[80]; /* Contact extension */
500 int expire; /* Sched ID of expiration */
501 int timeout; /* sched id of sip_reg_timeout */
502 int refresh; /* How often to refresh */
503 struct sip_pvt *call; /* create a sip_pvt structure for each outbound "registration call" in progress */
505 int callid_valid; /* 0 means we haven't chosen callid for this registry yet. */
506 char callid[80]; /* Global CallID for this registry */
507 unsigned int ocseq; /* Sequence number we got to for REGISTERs for this registry */
508 struct sockaddr_in us; /* Who the server thinks we are */
509 struct sip_registry *next;
512 /*--- The user list: Users and friends ---*/
513 static struct ast_user_list {
514 struct sip_user *users;
518 /*--- The peer list: Peers and Friends ---*/
519 static struct ast_peer_list {
520 struct sip_peer *peers;
524 /*--- The register list: Other SIP proxys we register with and call ---*/
525 static struct ast_register_list {
526 struct sip_registry *registrations;
532 #define REINVITE_INVITE 1
533 #define REINVITE_UPDATE 2
535 static int __sip_do_register(struct sip_registry *r);
537 static int sipsock = -1;
538 static int global_nat = SIP_NAT_RFC3581;
539 static int global_canreinvite = REINVITE_INVITE;
542 static struct sockaddr_in bindaddr;
543 static struct sockaddr_in externip;
544 static struct ast_ha *localaddr;
546 static struct ast_frame *sip_read(struct ast_channel *ast);
547 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req);
548 static int transmit_response_with_sdp(struct sip_pvt *p, char *msg, struct sip_request *req, int retrans);
549 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *rand, int reliable, char *header);
550 static int transmit_request(struct sip_pvt *p, char *msg, int inc, int reliable, int newbranch);
551 static int transmit_request_with_auth(struct sip_pvt *p, char *msg, int inc, int reliable, int newbranch);
552 static int transmit_invite(struct sip_pvt *p, char *msg, int sendsdp, char *auth, char *authheader, char *vxml_url,char *distinctive_ring, char *osptoken,int init);
553 static int transmit_reinvite_with_sdp(struct sip_pvt *p);
554 static int transmit_info_with_digit(struct sip_pvt *p, char digit);
555 static int transmit_message_with_text(struct sip_pvt *p, char *text);
556 static int transmit_refer(struct sip_pvt *p, char *dest);
557 static struct sip_peer *temp_peer(char *name);
558 static int do_proxy_auth(struct sip_pvt *p, struct sip_request *req, char *header, char *respheader, char *msg, int init);
559 static void free_old_route(struct sip_route *route);
560 static int build_reply_digest(struct sip_pvt *p, char *orig_header, char *digest, int digest_len);
561 static int update_user_counter(struct sip_pvt *fup, int event);
562 static void prune_peers(void);
563 static int sip_do_reload(void);
566 /*--- sip_debug_test_addr: See if we pass debug IP filter */
567 static inline int sip_debug_test_addr(struct sockaddr_in *addr)
571 if (debugaddr.sin_addr.s_addr) {
572 if (((ntohs(debugaddr.sin_port) != 0)
573 && (debugaddr.sin_port != addr->sin_port))
574 || (debugaddr.sin_addr.s_addr != addr->sin_addr.s_addr))
580 static inline int sip_debug_test_pvt(struct sip_pvt *p)
584 return sip_debug_test_addr(((p->nat & SIP_NAT_ROUTE) ? &p->recv : &p->sa));
588 /*--- __sip_xmit: Transmit SIP message ---*/
589 static int __sip_xmit(struct sip_pvt *p, char *data, int len)
592 char iabuf[INET_ADDRSTRLEN];
593 if (p->nat & SIP_NAT_ROUTE)
594 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->recv, sizeof(struct sockaddr_in));
596 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->sa, sizeof(struct sockaddr_in));
598 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));
603 static void sip_destroy(struct sip_pvt *p);
605 /*--- ast_sip_ouraddrfor: NAT fix - decide which IP address to use for ASterisk server? ---*/
606 /* Only used for outbound registrations */
607 static int ast_sip_ouraddrfor(struct in_addr *them, struct in_addr *us)
610 * Using the localaddr structure built up with localnet statements
611 * apply it to their address to see if we need to substitute our
612 * externip or can get away with our internal bindaddr
614 struct sockaddr_in theirs;
615 theirs.sin_addr = *them;
616 if (localaddr && externip.sin_addr.s_addr &&
617 ast_apply_ha(localaddr, &theirs)) {
618 char iabuf[INET_ADDRSTRLEN];
619 memcpy(us, &externip.sin_addr, sizeof(struct in_addr));
620 ast_inet_ntoa(iabuf, sizeof(iabuf), *(struct in_addr *)&them->s_addr);
621 ast_log(LOG_DEBUG, "Target address %s is not local, substituting externip\n", iabuf);
623 else if (bindaddr.sin_addr.s_addr)
624 memcpy(us, &bindaddr.sin_addr, sizeof(struct in_addr));
626 return ast_ouraddrfor(them, us);
630 static int append_history(struct sip_pvt *p, char *event, char *data)
632 struct sip_history *hist, *prev;
636 hist = malloc(sizeof(struct sip_history));
638 memset(hist, 0, sizeof(struct sip_history));
639 snprintf(hist->event, sizeof(hist->event), "%-15s %s", event, data);
643 if ((*c == '\r') || (*c == '\n')) {
649 /* Enqueue into history */
662 /*--- retrans_pkt: Retransmit SIP message if no answer ---*/
663 static int retrans_pkt(void *data)
665 struct sip_pkt *pkt=data, *prev, *cur;
667 char iabuf[INET_ADDRSTRLEN];
668 ast_mutex_lock(&pkt->owner->lock);
669 if (pkt->retrans < MAX_RETRANS) {
671 if (sip_debug_test_pvt(pkt->owner)) {
672 if (pkt->owner->nat & SIP_NAT_ROUTE)
673 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));
675 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));
677 append_history(pkt->owner, "ReTx", pkt->data);
678 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
681 ast_log(LOG_WARNING, "Maximum retries exceeded on call %s for seqno %d (%s %s)\n", pkt->owner->callid, pkt->seqno, (pkt->flags & FLAG_FATAL) ? "Critical" : "Non-critical", (pkt->flags & FLAG_RESPONSE) ? "Response" : "Request");
682 append_history(pkt->owner, "MaxRetries", pkt->flags & FLAG_FATAL ? "(Critical)" : "(Non-critical)");
684 if (pkt->flags & FLAG_FATAL) {
685 while(pkt->owner->owner && ast_mutex_trylock(&pkt->owner->owner->lock)) {
686 ast_mutex_unlock(&pkt->owner->lock);
688 ast_mutex_lock(&pkt->owner->lock);
690 if (pkt->owner->owner) {
691 ast_queue_hangup(pkt->owner->owner);
692 ast_mutex_unlock(&pkt->owner->owner->lock);
694 /* If no owner, destroy now */
695 pkt->owner->needdestroy = 1;
698 /* In any case, go ahead and remove the packet */
700 cur = pkt->owner->packets;
709 prev->next = cur->next;
711 pkt->owner->packets = cur->next;
712 ast_mutex_unlock(&pkt->owner->lock);
716 ast_log(LOG_WARNING, "Weird, couldn't find packet owner!\n");
719 ast_mutex_unlock(&pkt->owner->lock);
723 /*--- __sip_reliable_xmit: transmit packet with retransmits ---*/
724 static int __sip_reliable_xmit(struct sip_pvt *p, int seqno, int resp, char *data, int len, int fatal)
727 pkt = malloc(sizeof(struct sip_pkt) + len + 1);
730 memset(pkt, 0, sizeof(struct sip_pkt));
731 memcpy(pkt->data, data, len);
732 pkt->packetlen = len;
733 pkt->next = p->packets;
737 pkt->data[len] = '\0';
739 pkt->flags |= FLAG_FATAL;
740 /* Schedule retransmission */
741 pkt->retransid = ast_sched_add(sched, DEFAULT_RETRANS, retrans_pkt, pkt);
742 pkt->next = p->packets;
744 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
745 if (!strncasecmp(pkt->data, "INVITE", 6)) {
746 /* Note this is a pending invite */
747 p->pendinginvite = seqno;
752 /*--- __sip_autodestruct: Kill a call (called by scheduler) ---*/
753 static int __sip_autodestruct(void *data)
755 struct sip_pvt *p = data;
757 ast_log(LOG_DEBUG, "Auto destroying call '%s'\n", p->callid);
758 append_history(p, "AutoDestroy", "");
760 ast_log(LOG_WARNING, "Autodestruct on call '%s' with owner in place\n", p->callid);
761 ast_queue_hangup(p->owner);
768 /*--- sip_scheddestroy: Schedule destruction of SIP call ---*/
769 static int sip_scheddestroy(struct sip_pvt *p, int ms)
772 if (sip_debug_test_pvt(p))
773 ast_verbose("Scheduling destruction of call '%s' in %d ms\n", p->callid, ms);
775 snprintf(tmp, sizeof(tmp), "%d ms", ms);
776 append_history(p, "SchedDestroy", tmp);
778 if (p->autokillid > -1)
779 ast_sched_del(sched, p->autokillid);
780 p->autokillid = ast_sched_add(sched, ms, __sip_autodestruct, p);
784 /*--- sip_cancel_destroy: Cancel destruction of SIP call ---*/
785 static int sip_cancel_destroy(struct sip_pvt *p)
787 if (p->autokillid > -1)
788 ast_sched_del(sched, p->autokillid);
789 append_history(p, "CancelDestroy", "");
794 /*--- __sip_ack: Acknowledges receipt of a packet and stops retransmission ---*/
795 static int __sip_ack(struct sip_pvt *p, int seqno, int resp, const char *msg)
797 struct sip_pkt *cur, *prev = NULL;
800 /* Just in case... */
801 if (!msg) msg = "___NEVER___";
804 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp) &&
805 ((cur->flags & FLAG_RESPONSE) ||
806 (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
807 if (!resp && (seqno == p->pendinginvite)) {
808 ast_log(LOG_DEBUG, "Acked pending invite %d\n", p->pendinginvite);
809 p->pendinginvite = 0;
812 /* this is our baby */
814 prev->next = cur->next;
816 p->packets = cur->next;
817 if (cur->retransid > -1)
818 ast_sched_del(sched, cur->retransid);
826 ast_log(LOG_DEBUG, "Stopping retransmission on '%s' of %s %d: %s\n", p->callid, resp ? "Response" : "Request", seqno, res ? "Not Found" : "Found");
830 /* Pretend to ack all packets */
831 static int __sip_pretend_ack(struct sip_pvt *p)
834 __sip_ack(p, p->packets->seqno, (p->packets->flags & FLAG_RESPONSE), p->packets->data);
839 /*--- __sip_semi_ack: Acks receipt of packet, keep it around (used for provisional responses) ---*/
840 static int __sip_semi_ack(struct sip_pvt *p, int seqno, int resp, const char *msg)
846 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp) &&
847 ((cur->flags & FLAG_RESPONSE) ||
848 (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
849 /* this is our baby */
850 if (cur->retransid > -1)
851 ast_sched_del(sched, cur->retransid);
858 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");
862 static void parse(struct sip_request *req);
863 static char *get_header(struct sip_request *req, char *name);
864 static void copy_request(struct sip_request *dst,struct sip_request *src);
866 static void parse_copy(struct sip_request *dst, struct sip_request *src)
868 memset(dst, 0, sizeof(*dst));
869 memcpy(dst->data, src->data, sizeof(dst->data));
873 /*--- send_response: Transmit response on SIP request---*/
874 static int send_response(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
877 char iabuf[INET_ADDRSTRLEN];
878 struct sip_request tmp;
880 if (sip_debug_test_pvt(p)) {
881 if (p->nat & SIP_NAT_ROUTE)
882 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));
884 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));
888 parse_copy(&tmp, req);
889 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
890 append_history(p, "TxRespRel", tmpmsg);
892 res = __sip_reliable_xmit(p, seqno, 1, req->data, req->len, (reliable > 1));
895 parse_copy(&tmp, req);
896 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
897 append_history(p, "TxResp", tmpmsg);
899 res = __sip_xmit(p, req->data, req->len);
906 /*--- send_request: Send SIP Request to the other part of the dialogue ---*/
907 static int send_request(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
910 char iabuf[INET_ADDRSTRLEN];
911 struct sip_request tmp;
913 if (sip_debug_test_pvt(p)) {
914 if (p->nat & SIP_NAT_ROUTE)
915 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));
917 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));
921 parse_copy(&tmp, req);
922 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
923 append_history(p, "TxReqRel", tmpmsg);
925 res = __sip_reliable_xmit(p, seqno, 0, req->data, req->len, (reliable > 1));
928 parse_copy(&tmp, req);
929 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
930 append_history(p, "TxReq", tmpmsg);
932 res = __sip_xmit(p, req->data, req->len);
937 /*--- url_decode: Decode SIP URL ---*/
938 static void url_decode(char *s)
946 if (sscanf(s + 1, "%2x", &tmp) == 1) {
948 s += 2; /* Will be incremented once more when we break out */
952 /* Fall through if something wasn't right with the formatting */
962 /*--- ditch_braces: Pick out text in braces from character string ---*/
963 static char *ditch_braces(char *tmp)
968 if ((q = strchr(tmp, '"')) ) {
970 if ((q = strchr(c, '"')) )
973 ast_log(LOG_WARNING, "No closing quote in '%s'\n", tmp);
977 if ((n = strchr(c, '<')) ) {
979 while(*c && *c != '>') c++;
981 ast_log(LOG_WARNING, "No closing brace in '%s'\n", tmp);
990 /*--- sip_sendtext: Send SIP MESSAGE text within a call ---*/
991 /* Called from PBX core text message functions */
992 static int sip_sendtext(struct ast_channel *ast, char *text)
994 struct sip_pvt *p = ast->pvt->pvt;
995 int debug=sip_debug_test_pvt(p);
998 ast_verbose("Sending text %s on %s\n", text, ast->name);
1001 if (!text || ast_strlen_zero(text))
1004 ast_verbose("Really sending text %s on %s\n", text, ast->name);
1005 transmit_message_with_text(p, text);
1011 /* Ehud Gavron 08-Jun-2004: */
1012 /* The Mysql stuff works great for peers but not for users. */
1013 /* Unfortunately multi-line phones (e.g. cisco 7960) and many */
1014 /* SIP users behind the same NAT gateway need users. So.... */
1016 /* mysql_update_user is not needed */
1017 /*--- mysql_host: Get user from database ---*/
1018 static struct sip_user *mysql_user(char *user)
1022 u = malloc(sizeof(struct sip_user));
1023 memset(u, 0, sizeof(struct sip_user));
1024 if (mysql && (!user || (strlen(user) < 128))) {
1028 time_t regseconds, nowtime;
1030 MYSQL_FIELD *fields;
1033 name = alloca(strlen(user) * 2 + 1);
1034 mysql_real_escape_string(mysql, name, user, strlen(user));
1037 snprintf(query, sizeof(query), "SELECT name, secret, context, username, ipaddr, port, regseconds, callerid, restrictcid FROM sipfriends WHERE name=\"%s\"", name);
1039 ast_mutex_lock(&mysqllock);
1040 mysql_query(mysql, query);
1041 if ((result = mysql_store_result(mysql))) {
1043 if ((rowval = mysql_fetch_row(result))) {
1044 numfields = mysql_num_fields(result);
1045 fields = mysql_fetch_fields(result);
1047 for (x=0;x<numfields;x++) {
1049 if (!strcasecmp(fields[x].name, "secret")) {
1050 strncpy(u->secret, rowval[x], sizeof(u->secret) - 1);
1051 } else if (!strcasecmp(fields[x].name, "name")) {
1052 strncpy(u->name, rowval[x], sizeof(u->name) - 1);
1053 } else if (!strcasecmp(fields[x].name, "context")) {
1054 strncpy(u->context, rowval[x], sizeof(u->context) - 1);
1055 } else if (!strcasecmp(fields[x].name, "username")) {
1056 strncpy(u->name, rowval[x], sizeof(u->name) - 1);
1057 } else if (!strcasecmp(fields[x].name, "regseconds")) {
1058 if (sscanf(rowval[x], "%li", ®seconds) != 1)
1060 } else if (!strcasecmp(fields[x].name, "restrictcid")) {
1062 } else if (!strcasecmp(fields[x].name, "callerid")) {
1063 strncpy(u->callerid, rowval[x], sizeof(u->callerid) - 1);
1070 mysql_free_result(result);
1073 ast_mutex_unlock(&mysqllock);
1079 u->capability = global_capability;
1080 u->nat = global_nat;
1081 u->dtmfmode = global_dtmfmode;
1087 #endif /* MYSQL_USERS */
1089 #ifdef MYSQL_FRIENDS
1090 /*--- mysql_update_peer: Update peer from database ---*/
1091 /* This function adds registration state to database */
1092 static void mysql_update_peer(char *peer, struct sockaddr_in *sin, char *username, int expiry)
1094 if (mysql && (strlen(peer) < 128)) {
1098 char iabuf[INET_ADDRSTRLEN];
1100 name = alloca(strlen(peer) * 2 + 1);
1101 uname = alloca(strlen(username) * 2 + 1);
1103 mysql_real_escape_string(mysql, name, peer, strlen(peer));
1104 mysql_real_escape_string(mysql, uname, username, strlen(username));
1105 snprintf(query, sizeof(query), "UPDATE sipfriends SET ipaddr=\"%s\", port=\"%d\", regseconds=\"%ld\", username=\"%s\" WHERE name=\"%s\"",
1106 ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr), ntohs(sin->sin_port), nowtime + expiry, uname, name);
1107 ast_mutex_lock(&mysqllock);
1108 if (mysql_real_query(mysql, query, strlen(query)))
1109 ast_log(LOG_WARNING, "Unable to update database\n");
1111 ast_mutex_unlock(&mysqllock);
1115 /*--- mysql_peer: Get peer from database ---*/
1116 static struct sip_peer *mysql_peer(char *peer, struct sockaddr_in *sin)
1121 p = malloc(sizeof(struct sip_peer));
1122 memset(p, 0, sizeof(struct sip_peer));
1123 if (mysql && (!peer || (strlen(peer) < 128))) {
1128 char iabuf[INET_ADDRSTRLEN];
1129 time_t regseconds, nowtime;
1131 MYSQL_FIELD *fields;
1134 name = alloca(strlen(peer) * 2 + 1);
1135 mysql_real_escape_string(mysql, name, peer, strlen(peer));
1138 snprintf(query, sizeof(query), "SELECT name, secret, context, username, ipaddr, port, regseconds FROM sipfriends WHERE ipaddr=\"%s\" AND port=\"%d\"", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr), ntohs(sin->sin_port));
1140 snprintf(query, sizeof(query), "SELECT name, secret, context, username, ipaddr, port, regseconds FROM sipfriends WHERE name=\"%s\"", name);
1141 ast_mutex_lock(&mysqllock);
1142 mysql_query(mysql, query);
1143 if ((result = mysql_store_result(mysql))) {
1144 if ((rowval = mysql_fetch_row(result))) {
1145 numfields = mysql_num_fields(result);
1146 fields = mysql_fetch_fields(result);
1148 p->addr.sin_family = AF_INET;
1149 for (x=0;x<numfields;x++) {
1151 if (!strcasecmp(fields[x].name, "secret")) {
1152 strncpy(p->secret, rowval[x], sizeof(p->secret) - 1);
1153 } else if (!strcasecmp(fields[x].name, "name")) {
1154 strncpy(p->name, rowval[x], sizeof(p->name) - 1);
1155 } else if (!strcasecmp(fields[x].name, "context")) {
1156 strncpy(p->context, rowval[x], sizeof(p->context) - 1);
1157 } else if (!strcasecmp(fields[x].name, "username")) {
1158 strncpy(p->username, rowval[x], sizeof(p->username) - 1);
1159 } else if (!strcasecmp(fields[x].name, "ipaddr")) {
1160 inet_aton(rowval[x], &p->addr.sin_addr);
1161 } else if (!strcasecmp(fields[x].name, "port")) {
1162 if (sscanf(rowval[x], "%i", &port) != 1)
1164 p->addr.sin_port = htons(port);
1165 } else if (!strcasecmp(fields[x].name, "regseconds")) {
1166 if (sscanf(rowval[x], "%li", ®seconds) != 1)
1172 if (nowtime > regseconds)
1173 memset(&p->addr, 0, sizeof(p->addr));
1175 mysql_free_result(result);
1178 ast_mutex_unlock(&mysqllock);
1185 p->capability = global_capability;
1186 p->nat = global_nat;
1187 p->dtmfmode = global_dtmfmode;
1188 p->promiscredir = global_promiscredir;
1197 #endif /* MYSQL_FRIENDS */
1199 /*--- update_peer: Update peer data in database (if used) ---*/
1200 static void update_peer(struct sip_peer *p, int expiry)
1202 #ifdef MYSQL_FRIENDS
1204 mysql_update_peer(p->name, &p->addr, p->username, expiry);
1209 /*--- find_peer: Locate peer by name or ip address */
1210 static struct sip_peer *find_peer(char *peer, struct sockaddr_in *sin)
1212 struct sip_peer *p = NULL;
1216 /* Find by peer name */
1218 if (!strcasecmp(p->name, peer)) {
1227 if (!inaddrcmp(&p->addr, sin) ||
1229 (p->addr.sin_addr.s_addr == sin->sin_addr.s_addr))) {
1236 #ifdef MYSQL_FRIENDS
1238 p = mysql_peer(peer, sin);
1245 /*--- find_user: Locate user by name */
1246 static struct sip_user *find_user(char *name)
1248 struct sip_user *u = NULL;
1252 if (!strcasecmp(u->name, name)) {
1259 u = mysql_user(name);
1261 #endif /* MYSQL_USERS */
1265 /*--- create_addr: create address structure from peer definition ---*/
1266 /* Or, if peer not found, find it in the global DNS */
1267 /* returns TRUE on failure, FALSE on success */
1268 static int create_addr(struct sip_pvt *r, char *opeer)
1271 struct ast_hostent ahp;
1277 char host[256], *hostn;
1280 strncpy(peer, opeer, sizeof(peer) - 1);
1281 port = strchr(peer, ':');
1286 r->sa.sin_family = AF_INET;
1287 ast_mutex_lock(&peerl.lock);
1288 p = find_peer(peer, NULL);
1292 r->capability = p->capability;
1295 ast_log(LOG_DEBUG, "Setting NAT on RTP to %d\n", (r->nat & SIP_NAT_ROUTE));
1296 ast_rtp_setnat(r->rtp, (r->nat & SIP_NAT_ROUTE));
1299 ast_log(LOG_DEBUG, "Setting NAT on VRTP to %d\n", (r->nat & SIP_NAT_ROUTE));
1300 ast_rtp_setnat(r->vrtp, (r->nat & SIP_NAT_ROUTE));
1302 strncpy(r->peername, p->username, sizeof(r->peername)-1);
1303 strncpy(r->authname, p->username, sizeof(r->authname)-1);
1304 strncpy(r->peersecret, p->secret, sizeof(r->peersecret)-1);
1305 strncpy(r->peermd5secret, p->md5secret, sizeof(r->peermd5secret)-1);
1306 strncpy(r->username, p->username, sizeof(r->username)-1);
1307 strncpy(r->tohost, p->tohost, sizeof(r->tohost)-1);
1308 strncpy(r->fullcontact, p->fullcontact, sizeof(r->fullcontact)-1);
1309 if (!r->initreq.headers && !ast_strlen_zero(p->fromdomain)) {
1310 if ((callhost = strchr(r->callid, '@'))) {
1311 strncpy(callhost + 1, p->fromdomain, sizeof(r->callid) - (callhost - r->callid) - 2);
1314 if (ast_strlen_zero(r->tohost)) {
1315 if (p->addr.sin_addr.s_addr)
1316 ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->addr.sin_addr);
1318 ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->defaddr.sin_addr);
1320 if (!ast_strlen_zero(p->fromdomain))
1321 strncpy(r->fromdomain, p->fromdomain, sizeof(r->fromdomain)-1);
1322 if (!ast_strlen_zero(p->fromuser))
1323 strncpy(r->fromuser, p->fromuser, sizeof(r->fromuser)-1);
1324 r->insecure = p->insecure;
1325 r->canreinvite = p->canreinvite;
1326 r->maxtime = p->maxms;
1327 r->callgroup = p->callgroup;
1328 r->pickupgroup = p->pickupgroup;
1330 r->dtmfmode = p->dtmfmode;
1331 if (r->dtmfmode & SIP_DTMF_RFC2833)
1332 r->noncodeccapability |= AST_RTP_DTMF;
1334 r->noncodeccapability &= ~AST_RTP_DTMF;
1336 r->promiscredir = p->promiscredir;
1337 strncpy(r->context, p->context,sizeof(r->context)-1);
1338 if ((p->addr.sin_addr.s_addr || p->defaddr.sin_addr.s_addr) &&
1339 (!p->maxms || ((p->lastms > 0) && (p->lastms <= p->maxms)))) {
1340 if (p->addr.sin_addr.s_addr) {
1341 r->sa.sin_addr = p->addr.sin_addr;
1342 r->sa.sin_port = p->addr.sin_port;
1344 r->sa.sin_addr = p->defaddr.sin_addr;
1345 r->sa.sin_port = p->defaddr.sin_port;
1347 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1358 ast_mutex_unlock(&peerl.lock);
1362 portno = atoi(port);
1364 portno = DEFAULT_SIP_PORT;
1369 snprintf(service, sizeof(service), "_sip._udp.%s", peer);
1370 ret = ast_get_srv(NULL, host, sizeof(host), &tportno, service);
1376 hp = ast_gethostbyname(hostn, &ahp);
1378 strncpy(r->tohost, peer, sizeof(r->tohost) - 1);
1379 memcpy(&r->sa.sin_addr, hp->h_addr, sizeof(r->sa.sin_addr));
1380 r->sa.sin_port = htons(portno);
1381 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1384 ast_log(LOG_WARNING, "No such host: %s\n", peer);
1400 /*--- auto_congest: Scheduled congestion on a call ---*/
1401 static int auto_congest(void *nothing)
1403 struct sip_pvt *p = nothing;
1404 ast_mutex_lock(&p->lock);
1407 if (!ast_mutex_trylock(&p->owner->lock)) {
1408 ast_log(LOG_NOTICE, "Auto-congesting %s\n", p->owner->name);
1409 ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
1410 ast_mutex_unlock(&p->owner->lock);
1413 ast_mutex_unlock(&p->lock);
1417 /*--- sip_prefs_free: Free codec list in preference structure ---*/
1418 static void sip_prefs_free(void)
1420 struct sip_codec_pref *cur, *next;
1430 /*--- sip_pref_remove: Remove codec from pref list ---*/
1431 static void sip_pref_remove(int format)
1433 struct sip_codec_pref *cur, *prev=NULL;
1436 if (cur->codec == format) {
1438 prev->next = cur->next;
1449 /*--- sip_pref_append: Append codec to list ---*/
1450 static int sip_pref_append(int format)
1452 struct sip_codec_pref *cur, *tmp;
1453 sip_pref_remove(format);
1454 tmp = (struct sip_codec_pref *)malloc(sizeof(struct sip_codec_pref));
1457 memset(tmp, 0, sizeof(struct sip_codec_pref));
1458 tmp->codec = format;
1469 /*--- sip_codec_choose: Pick a codec ---*/
1470 static int sip_codec_choose(int formats)
1472 struct sip_codec_pref *cur;
1473 formats &= ((AST_FORMAT_MAX_AUDIO << 1) - 1);
1476 if (formats & cur->codec)
1480 return ast_best_codec(formats);
1483 /*--- sip_call: Initiate SIP call from PBX ---*/
1484 /* used from the dial() application */
1485 static int sip_call(struct ast_channel *ast, char *dest, int timeout)
1489 char *vxml_url = NULL;
1490 char *distinctive_ring = NULL;
1491 char *osptoken = NULL;
1493 char *osphandle = NULL;
1495 struct varshead *headp;
1496 struct ast_var_t *current;
1499 if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) {
1500 ast_log(LOG_WARNING, "sip_call called on %s, neither down nor reserved\n", ast->name);
1503 /* Check whether there is vxml_url, distinctive ring variables */
1505 headp=&ast->varshead;
1506 AST_LIST_TRAVERSE(headp,current,entries) {
1507 /* Check whether there is a VXML_URL variable */
1508 if (strcasecmp(ast_var_name(current),"VXML_URL")==0)
1510 vxml_url = ast_var_value(current);
1512 /* Check whether there is a ALERT_INFO variable */
1513 if (strcasecmp(ast_var_name(current),"ALERT_INFO")==0)
1515 distinctive_ring = ast_var_value(current);
1518 else if (!strcasecmp(ast_var_name(current), "OSPTOKEN")) {
1519 osptoken = ast_var_value(current);
1520 } else if (!strcasecmp(ast_var_name(current), "OSPHANDLE")) {
1521 osphandle = ast_var_value(current);
1529 if (!osptoken || !osphandle || (sscanf(osphandle, "%i", &p->osphandle) != 1)) {
1530 /* Force Disable OSP support */
1536 ast_log(LOG_DEBUG, "Outgoing Call for %s\n", p->username);
1537 res = update_user_counter(p,INC_OUT_USE);
1539 p->restrictcid = ast->restrictcid;
1540 p->jointcapability = p->capability;
1541 transmit_invite(p, "INVITE", 1, NULL, NULL, vxml_url,distinctive_ring, osptoken, 1);
1543 /* Initialize auto-congest time */
1544 p->initid = ast_sched_add(sched, p->maxtime * 4, auto_congest, p);
1550 /*--- __sip_destroy: Execute destrucion of call structure, release memory---*/
1551 static void __sip_destroy(struct sip_pvt *p, int lockowner)
1553 struct sip_pvt *cur, *prev = NULL;
1555 struct sip_history *hist;
1557 if (sip_debug_test_pvt(p))
1558 ast_verbose("Destroying call '%s'\n", p->callid);
1559 if (p->stateid > -1)
1560 ast_extension_state_del(p->stateid, NULL);
1562 ast_sched_del(sched, p->initid);
1563 if (p->autokillid > -1)
1564 ast_sched_del(sched, p->autokillid);
1567 ast_rtp_destroy(p->rtp);
1570 ast_rtp_destroy(p->vrtp);
1573 free_old_route(p->route);
1577 /* Carefully unlink from registry */
1578 struct sip_registry *reg;
1579 ast_mutex_lock(®l.lock);
1580 reg = regl.registrations;
1582 if ((reg == p->registry) && (p->registry->call == p))
1583 p->registry->call=NULL;
1586 ast_mutex_unlock(®l.lock);
1588 /* Unlink us from the owner if we have one */
1591 ast_mutex_lock(&p->owner->lock);
1592 ast_log(LOG_DEBUG, "Detaching from %s\n", p->owner->name);
1593 p->owner->pvt->pvt = NULL;
1595 ast_mutex_unlock(&p->owner->lock);
1600 p->history = p->history->next;
1607 prev->next = cur->next;
1616 ast_log(LOG_WARNING, "%p is not in list?!?! \n", cur);
1619 ast_sched_del(sched, p->initid);
1620 while((cp = p->packets)) {
1621 p->packets = p->packets->next;
1622 if (cp->retransid > -1)
1623 ast_sched_del(sched, cp->retransid);
1626 ast_mutex_destroy(&p->lock);
1631 /*--- update_user_counter: Handle incominglimit and outgoinglimit for SIP users ---*/
1632 /* Note: This is going to be replaced by app_groupcount */
1633 static int update_user_counter(struct sip_pvt *fup, int event)
1635 char name[256] = "";
1637 strncpy(name, fup->username, sizeof(name) - 1);
1638 ast_mutex_lock(&userl.lock);
1639 u = find_user(name);
1641 ast_log(LOG_DEBUG, "%s is not a local user\n", name);
1642 ast_mutex_unlock(&userl.lock);
1646 /* incoming and outgoing affects the inUse counter */
1649 if ( u->inUse > 0 ) {
1657 if (u->incominglimit > 0 ) {
1658 if (u->inUse >= u->incominglimit) {
1659 ast_log(LOG_ERROR, "Call from user '%s' rejected due to usage limit of %d\n", u->name, u->incominglimit);
1660 /* inc inUse as well */
1661 if ( event == INC_OUT_USE ) {
1664 ast_mutex_unlock(&userl.lock);
1669 ast_log(LOG_DEBUG, "Call from user '%s' is %d out of %d\n", u->name, u->inUse, u->incominglimit);
1671 /* we don't use these anymore
1673 if ( u->outUse > 0 ) {
1680 if ( u->outgoinglimit > 0 ) {
1681 if ( u->outUse >= u->outgoinglimit ) {
1682 ast_log(LOG_ERROR, "Outgoing call from user '%s' rejected due to usage limit of %d\n", u->name, u->outgoinglimit);
1683 ast_mutex_unlock(&userl.lock);
1691 ast_log(LOG_ERROR, "update_user_counter(%s,%d) called with no event!\n",u->name,event);
1693 ast_mutex_unlock(&userl.lock);
1697 /*--- sip_destroy: Destroy SIP call structure ---*/
1698 static void sip_destroy(struct sip_pvt *p)
1700 ast_mutex_lock(&iflock);
1701 __sip_destroy(p, 1);
1702 ast_mutex_unlock(&iflock);
1706 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal);
1708 static int hangup_sip2cause(int cause)
1710 /* Possible values from causes.h
1711 AST_CAUSE_NOTDEFINED AST_CAUSE_NORMAL AST_CAUSE_BUSY
1712 AST_CAUSE_FAILURE AST_CAUSE_CONGESTION AST_CAUSE_UNALLOCATED
1716 case 404: /* Not found */
1717 return AST_CAUSE_UNALLOCATED;
1718 case 483: /* Too many hops */
1719 return AST_CAUSE_FAILURE;
1721 return AST_CAUSE_BUSY;
1723 return AST_CAUSE_NORMAL;
1729 static char *hangup_cause2sip(int cause)
1733 case AST_CAUSE_FAILURE:
1734 return "500 Server internal failure";
1735 case AST_CAUSE_CONGESTION:
1736 return "503 Service Unavailable";
1737 case AST_CAUSE_BUSY:
1746 /*--- sip_hangup: Hangup SIP call */
1747 static int sip_hangup(struct ast_channel *ast)
1749 struct sip_pvt *p = ast->pvt->pvt;
1751 int needdestroy = 0;
1753 ast_log(LOG_DEBUG, "sip_hangup(%s)\n", ast->name);
1754 if (!ast->pvt->pvt) {
1755 ast_log(LOG_DEBUG, "Asked to hangup channel not connected\n");
1758 ast_mutex_lock(&p->lock);
1760 if ((p->osphandle > -1) && (ast->_state == AST_STATE_UP)) {
1761 ast_osp_terminate(p->osphandle, AST_CAUSE_NORMAL, p->ospstart, time(NULL) - p->ospstart);
1764 if ( p->outgoing ) {
1765 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement outUse counter\n", p->username);
1766 update_user_counter(p, DEC_OUT_USE);
1768 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement inUse counter\n", p->username);
1769 update_user_counter(p, DEC_IN_USE);
1771 /* Determine how to disconnect */
1772 if (p->owner != ast) {
1773 ast_log(LOG_WARNING, "Huh? We aren't the owner?\n");
1774 ast_mutex_unlock(&p->lock);
1777 if (!ast || (ast->_state != AST_STATE_UP))
1782 ast_dsp_free(p->vad);
1785 ast->pvt->pvt = NULL;
1787 ast_mutex_lock(&usecnt_lock);
1789 ast_mutex_unlock(&usecnt_lock);
1790 ast_update_use_count();
1793 /* Start the process if it's not already started */
1794 if (!p->alreadygone && !ast_strlen_zero(p->initreq.data)) {
1797 transmit_request_with_auth(p, "CANCEL", p->ocseq, 1, 0);
1798 /* Actually don't destroy us yet, wait for the 487 on our original
1799 INVITE, but do set an autodestruct just in case we never get it. */
1801 sip_scheddestroy(p, 15000);
1802 if ( p->initid != -1 ) {
1803 /* channel still up - reverse dec of inUse counter
1804 only if the channel is not auto-congested */
1805 if ( p->outgoing ) {
1806 update_user_counter(p, INC_OUT_USE);
1809 update_user_counter(p, INC_IN_USE);
1814 if (ast->hangupcause && ((res = hangup_cause2sip(ast->hangupcause)))) {
1815 transmit_response_reliable(p, res, &p->initreq, 1);
1817 transmit_response_reliable(p, "403 Forbidden", &p->initreq, 1);
1820 if (!p->pendinginvite) {
1822 transmit_request_with_auth(p, "BYE", 0, 1, 1);
1824 /* Note we will need a BYE when this all settles out
1825 but we can't send one while we have "INVITE" outstanding. */
1827 p->needreinvite = 0;
1831 p->needdestroy = needdestroy;
1832 ast_mutex_unlock(&p->lock);
1836 /*--- sip_answer: Answer SIP call , send 200 OK on Invite */
1837 static int sip_answer(struct ast_channel *ast)
1841 struct sip_pvt *p = ast->pvt->pvt;
1843 ast_mutex_lock(&p->lock);
1844 if (ast->_state != AST_STATE_UP) {
1849 codec=pbx_builtin_getvar_helper(p->owner,"SIP_CODEC");
1851 fmt=ast_getformatbyname(codec);
1853 ast_log(LOG_NOTICE, "Changing codec to '%s' for this call because of ${SIP_CODEC) variable\n",codec);
1854 p->jointcapability=fmt;
1855 } else ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because of unrecognized/not configured codec (check allow/disallow in sip.conf): %s\n",codec);
1858 ast_setstate(ast, AST_STATE_UP);
1860 ast_log(LOG_DEBUG, "sip_answer(%s)\n", ast->name);
1861 res = transmit_response_with_sdp(p, "200 OK", &p->initreq, 1);
1863 ast_mutex_unlock(&p->lock);
1867 /*--- sip_write: Send response, support audio media ---*/
1868 static int sip_write(struct ast_channel *ast, struct ast_frame *frame)
1870 struct sip_pvt *p = ast->pvt->pvt;
1872 if (frame->frametype == AST_FRAME_VOICE) {
1873 if (!(frame->subclass & ast->nativeformats)) {
1874 ast_log(LOG_WARNING, "Asked to transmit frame type %d, while native formats is %d (read/write = %d/%d)\n",
1875 frame->subclass, ast->nativeformats, ast->readformat, ast->writeformat);
1879 ast_mutex_lock(&p->lock);
1881 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1882 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1885 res = ast_rtp_write(p->rtp, frame);
1887 ast_mutex_unlock(&p->lock);
1889 } else if (frame->frametype == AST_FRAME_VIDEO) {
1891 ast_mutex_lock(&p->lock);
1893 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1894 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1897 res = ast_rtp_write(p->vrtp, frame);
1899 ast_mutex_unlock(&p->lock);
1901 } else if (frame->frametype == AST_FRAME_IMAGE) {
1904 ast_log(LOG_WARNING, "Can't send %d type frames with SIP write\n", frame->frametype);
1911 /*--- sip_fixup: Fix up a channel: If a channel is consumed, this is called.
1912 Basically update any ->owner links ----*/
1913 static int sip_fixup(struct ast_channel *oldchan, struct ast_channel *newchan)
1915 struct sip_pvt *p = newchan->pvt->pvt;
1916 ast_mutex_lock(&p->lock);
1917 if (p->owner != oldchan) {
1918 ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, p->owner);
1919 ast_mutex_unlock(&p->lock);
1923 ast_mutex_unlock(&p->lock);
1927 /*--- sip_senddigit: Send DTMF character on SIP channel */
1928 /* within one call, we're able to transmit in many methods simultaneously */
1929 static int sip_senddigit(struct ast_channel *ast, char digit)
1931 struct sip_pvt *p = ast->pvt->pvt;
1932 if (p && (p->dtmfmode & SIP_DTMF_INFO)) {
1933 transmit_info_with_digit(p, digit);
1935 if (p && p->rtp && (p->dtmfmode & SIP_DTMF_RFC2833)) {
1936 ast_rtp_senddigit(p->rtp, digit);
1938 /* If in-band DTMF is desired, send that */
1939 if (p->dtmfmode & SIP_DTMF_INBAND)
1945 /*--- sip_transfer: Transfer SIP call */
1946 static int sip_transfer(struct ast_channel *ast, char *dest)
1948 struct sip_pvt *p = ast->pvt->pvt;
1950 res = transmit_refer(p, dest);
1954 /*--- sip_indicate: Play indication to user */
1955 /* With SIP a lot of indications is sent as messages, letting the device play
1956 the indication - busy signal, congestion etc */
1957 static int sip_indicate(struct ast_channel *ast, int condition)
1959 struct sip_pvt *p = ast->pvt->pvt;
1961 case AST_CONTROL_RINGING:
1962 if (ast->_state == AST_STATE_RING) {
1964 transmit_response(p, "180 Ringing", &p->initreq);
1966 if (!p->progressinband)
1969 /* Oops, we've sent progress tones. Let Asterisk do it instead */
1973 case AST_CONTROL_BUSY:
1974 if (ast->_state != AST_STATE_UP) {
1975 transmit_response(p, "486 Busy Here", &p->initreq);
1977 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1981 case AST_CONTROL_CONGESTION:
1982 if (ast->_state != AST_STATE_UP) {
1983 transmit_response(p, "503 Service Unavailable", &p->initreq);
1985 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1989 case AST_CONTROL_PROGRESS:
1990 case AST_CONTROL_PROCEEDING:
1991 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1992 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
2000 ast_log(LOG_WARNING, "Don't know how to indicate condition %d\n", condition);
2008 /*--- sip_new: Initiate a call in the SIP channel */
2009 /* called from sip_request_call (calls from the pbx ) */
2010 static struct ast_channel *sip_new(struct sip_pvt *i, int state, char *title)
2012 struct ast_channel *tmp;
2014 ast_mutex_unlock(&i->lock);
2015 /* Don't hold a sip pvt lock while we allocate a channel */
2016 tmp = ast_channel_alloc(1);
2017 ast_mutex_lock(&i->lock);
2019 /* Select our native format based on codec preference until we receive
2020 something from another device to the contrary. */
2021 if (i->jointcapability)
2022 tmp->nativeformats = sip_codec_choose(i->jointcapability);
2023 else if (i->capability)
2024 tmp->nativeformats = sip_codec_choose(i->capability);
2026 tmp->nativeformats = sip_codec_choose(global_capability);
2027 fmt = ast_best_codec(tmp->nativeformats);
2029 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%04x", title, rand() & 0xffff);
2031 if (strchr(i->fromdomain,':'))
2033 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", strchr(i->fromdomain,':')+1, (int)(long)(i));
2037 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", i->fromdomain, (int)(long)(i));
2040 if (i->dtmfmode & SIP_DTMF_INBAND) {
2041 i->vad = ast_dsp_new();
2042 ast_dsp_set_features(i->vad, DSP_FEATURE_DTMF_DETECT);
2044 ast_dsp_digitmode(i->vad, DSP_DIGITMODE_DTMF | DSP_DIGITMODE_RELAXDTMF);
2046 tmp->fds[0] = ast_rtp_fd(i->rtp);
2047 tmp->fds[1] = ast_rtcp_fd(i->rtp);
2049 tmp->fds[2] = ast_rtp_fd(i->vrtp);
2050 tmp->fds[3] = ast_rtcp_fd(i->vrtp);
2052 if (state == AST_STATE_RING)
2054 tmp->adsicpe = AST_ADSI_UNAVAILABLE;
2055 tmp->writeformat = fmt;
2056 tmp->pvt->rawwriteformat = fmt;
2057 tmp->readformat = fmt;
2058 tmp->pvt->rawreadformat = fmt;
2060 tmp->pvt->send_text = sip_sendtext;
2061 tmp->pvt->call = sip_call;
2062 tmp->pvt->hangup = sip_hangup;
2063 tmp->pvt->answer = sip_answer;
2064 tmp->pvt->read = sip_read;
2065 tmp->pvt->write = sip_write;
2066 tmp->pvt->write_video = sip_write;
2067 tmp->pvt->indicate = sip_indicate;
2068 tmp->pvt->transfer = sip_transfer;
2069 tmp->pvt->fixup = sip_fixup;
2070 tmp->pvt->send_digit = sip_senddigit;
2072 tmp->pvt->bridge = ast_rtp_bridge;
2074 tmp->callgroup = i->callgroup;
2075 tmp->pickupgroup = i->pickupgroup;
2076 tmp->restrictcid = i->restrictcid;
2077 if (!ast_strlen_zero(i->accountcode))
2078 strncpy(tmp->accountcode, i->accountcode, sizeof(tmp->accountcode)-1);
2080 tmp->amaflags = i->amaflags;
2081 if (!ast_strlen_zero(i->language))
2082 strncpy(tmp->language, i->language, sizeof(tmp->language)-1);
2083 if (!ast_strlen_zero(i->musicclass))
2084 strncpy(tmp->musicclass, i->musicclass, sizeof(tmp->musicclass)-1);
2086 ast_mutex_lock(&usecnt_lock);
2088 ast_mutex_unlock(&usecnt_lock);
2089 strncpy(tmp->context, i->context, sizeof(tmp->context)-1);
2090 strncpy(tmp->exten, i->exten, sizeof(tmp->exten)-1);
2091 if (!ast_strlen_zero(i->callerid))
2092 tmp->callerid = strdup(i->callerid);
2093 if (!ast_strlen_zero(i->rdnis))
2094 tmp->rdnis = strdup(i->rdnis);
2095 if (!ast_strlen_zero(i->exten) && strcmp(i->exten, "s"))
2096 tmp->dnid = strdup(i->exten);
2098 if (!ast_strlen_zero(i->domain)) {
2099 pbx_builtin_setvar_helper(tmp, "SIPDOMAIN", i->domain);
2101 if (!ast_strlen_zero(i->useragent)) {
2102 pbx_builtin_setvar_helper(tmp, "SIPUSERAGENT", i->useragent);
2104 if (!ast_strlen_zero(i->callid)) {
2105 pbx_builtin_setvar_helper(tmp, "SIPCALLID", i->callid);
2107 ast_setstate(tmp, state);
2108 if (state != AST_STATE_DOWN) {
2109 if (ast_pbx_start(tmp)) {
2110 ast_log(LOG_WARNING, "Unable to start PBX on %s\n", tmp->name);
2116 ast_log(LOG_WARNING, "Unable to allocate channel structure\n");
2120 static struct cfalias {
2124 { "Content-Type", "c" },
2125 { "Content-Encoding", "e" },
2129 { "Content-Length", "l" },
2132 { "Supported", "k" },
2133 { "Refer-To", "r" },
2134 { "Allow-Events", "u" },
2139 /*--- get_sdp_by_line: Reads one line of SIP message body */
2140 static char* get_sdp_by_line(char* line, char *name, int nameLen) {
2141 if (strncasecmp(line, name, nameLen) == 0 && line[nameLen] == '=') {
2142 char* r = line + nameLen + 1;
2143 while (*r && (*r < 33)) ++r;
2150 /*--- get_sdp: Gets all kind of SIP message bodies, including SDP,
2151 but the name wrongly applies _only_ sdp */
2152 static char *get_sdp(struct sip_request *req, char *name) {
2154 int len = strlen(name);
2157 for (x=0; x<req->lines; x++) {
2158 r = get_sdp_by_line(req->line[x], name, len);
2159 if (r[0] != '\0') return r;
2165 static void sdpLineNum_iterator_init(int* iterator) {
2169 static char* get_sdp_iterate(int* iterator,
2170 struct sip_request *req, char *name) {
2171 int len = strlen(name);
2173 while (*iterator < req->lines) {
2174 r = get_sdp_by_line(req->line[(*iterator)++], name, len);
2175 if (r[0] != '\0') return r;
2180 static char *__get_header(struct sip_request *req, char *name, int *start)
2183 int len = strlen(name);
2185 if (pedanticsipchecking) {
2186 /* Technically you can place arbitrary whitespace both before and after the ':' in
2187 a header, although RFC3261 clearly says you shouldn't before, and place just
2188 one afterwards. If you shouldn't do it, what absolute idiot decided it was
2189 a good idea to say you can do it, and if you can do it, why in the hell would
2190 you say you shouldn't. */
2191 for (x=*start;x<req->headers;x++) {
2192 if (!strncasecmp(req->header[x], name, len)) {
2193 r = req->header[x] + len;
2194 while(*r && (*r < 33))
2198 while(*r && (*r < 33))
2206 /* We probably shouldn't even bother counting whitespace afterwards but
2207 I guess for backwards compatibility we will */
2208 for (x=*start;x<req->headers;x++) {
2209 if (!strncasecmp(req->header[x], name, len) &&
2210 (req->header[x][len] == ':')) {
2211 r = req->header[x] + len + 1;
2212 while(*r && (*r < 33))
2220 for (x=0;x<sizeof(aliases) / sizeof(aliases[0]); x++)
2221 if (!strcasecmp(aliases[x].fullname, name))
2222 return __get_header(req, aliases[x].shortname, start);
2224 /* Don't return NULL, so get_header is always a valid pointer */
2228 /*--- get_header: Get header from SIP request ---*/
2229 static char *get_header(struct sip_request *req, char *name)
2232 return __get_header(req, name, &start);
2235 /*--- sip_rtp_read: Read RTP from network ---*/
2236 static struct ast_frame *sip_rtp_read(struct ast_channel *ast, struct sip_pvt *p)
2238 /* Retrieve audio/etc from channel. Assumes p->lock is already held. */
2239 struct ast_frame *f;
2240 static struct ast_frame null_frame = { AST_FRAME_NULL, };
2243 f = ast_rtp_read(p->rtp); /* RTP Audio */
2246 f = ast_rtcp_read(p->rtp); /* RTCP Control Channel */
2249 f = ast_rtp_read(p->vrtp); /* RTP Video */
2252 f = ast_rtcp_read(p->vrtp); /* RTCP Control Channel for video */
2257 /* Don't send RFC2833 if we're not supposed to */
2258 if (f && (f->frametype == AST_FRAME_DTMF) && !(p->dtmfmode & SIP_DTMF_RFC2833))
2261 /* We already hold the channel lock */
2262 if (f->frametype == AST_FRAME_VOICE) {
2263 if (f->subclass != p->owner->nativeformats) {
2264 ast_log(LOG_DEBUG, "Oooh, format changed to %d\n", f->subclass);
2265 p->owner->nativeformats = f->subclass;
2266 ast_set_read_format(p->owner, p->owner->readformat);
2267 ast_set_write_format(p->owner, p->owner->writeformat);
2269 if ((p->dtmfmode & SIP_DTMF_INBAND) && p->vad) {
2270 f = ast_dsp_process(p->owner,p->vad,f);
2271 if (f && (f->frametype == AST_FRAME_DTMF))
2272 ast_log(LOG_DEBUG, "Detected DTMF '%c'\n", f->subclass);
2279 /*--- sip_read: Read SIP RTP from channel */
2280 static struct ast_frame *sip_read(struct ast_channel *ast)
2282 struct ast_frame *fr;
2283 struct sip_pvt *p = ast->pvt->pvt;
2284 ast_mutex_lock(&p->lock);
2285 fr = sip_rtp_read(ast, p);
2286 time(&p->lastrtprx);
2287 ast_mutex_unlock(&p->lock);
2291 /*--- build_callid: Build SIP CALLID header ---*/
2292 static void build_callid(char *callid, int len, struct in_addr ourip, char *fromdomain)
2297 char iabuf[INET_ADDRSTRLEN];
2300 res = snprintf(callid, len, "%08x", val);
2304 if (!ast_strlen_zero(fromdomain))
2305 snprintf(callid, len, "@%s", fromdomain);
2307 /* It's not important that we really use our right IP here... */
2308 snprintf(callid, len, "@%s", ast_inet_ntoa(iabuf, sizeof(iabuf), ourip));
2311 /*--- sip_alloc: Allocate SIP_PVT structure and set defaults ---*/
2312 static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useglobal_nat)
2315 char iabuf[INET_ADDRSTRLEN];
2317 p = malloc(sizeof(struct sip_pvt));
2320 /* Keep track of stuff */
2321 memset(p, 0, sizeof(struct sip_pvt));
2322 ast_mutex_init(&p->lock);
2330 memcpy(&p->sa, sin, sizeof(p->sa));
2331 if (ast_sip_ouraddrfor(&p->sa.sin_addr,&p->ourip))
2332 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2334 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2336 p->rtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2338 p->vrtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2342 /* Start with 101 instead of 1 */
2345 ast_log(LOG_WARNING, "Unable to create RTP session: %s\n", strerror(errno));
2346 ast_mutex_destroy(&p->lock);
2350 ast_rtp_settos(p->rtp, tos);
2352 ast_rtp_settos(p->vrtp, tos);
2353 if (useglobal_nat && sin) {
2354 /* Setup NAT structure according to global settings if we have an address */
2355 p->nat = global_nat;
2356 memcpy(&p->recv, sin, sizeof(p->recv));
2357 ast_rtp_setnat(p->rtp, (p->nat & SIP_NAT_ROUTE));
2359 ast_rtp_setnat(p->vrtp, (p->nat & SIP_NAT_ROUTE));
2362 strncpy(p->fromdomain, default_fromdomain, sizeof(p->fromdomain) - 1);
2363 /* z9hG4bK is a magic cookie. See RFC 3261 section 8.1.1.7 */
2364 if (p->nat != SIP_NAT_NEVER)
2365 snprintf(p->via, sizeof(p->via), "SIP/2.0/UDP %s:%d;branch=z9hG4bK%08x;rport", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ourport, p->branch);
2367 snprintf(p->via, sizeof(p->via), "SIP/2.0/UDP %s:%d;branch=z9hG4bK%08x", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ourport, p->branch);
2369 build_callid(p->callid, sizeof(p->callid), p->ourip, p->fromdomain);
2371 strncpy(p->callid, callid, sizeof(p->callid) - 1);
2372 /* Assume reinvite OK and via INVITE */
2373 p->canreinvite = global_canreinvite;
2374 /* Assign default music on hold class */
2375 strncpy(p->musicclass, global_musicclass, sizeof(p->musicclass) - 1);
2376 p->dtmfmode = global_dtmfmode;
2377 p->promiscredir = global_promiscredir;
2378 p->trustrpid = global_trustrpid;
2379 p->progressinband = global_progressinband;
2381 p->ospauth = global_ospauth;
2383 p->rtptimeout = global_rtptimeout;
2384 p->rtpholdtimeout = global_rtpholdtimeout;
2385 p->capability = global_capability;
2386 if (p->dtmfmode & SIP_DTMF_RFC2833)
2387 p->noncodeccapability |= AST_RTP_DTMF;
2388 strncpy(p->context, default_context, sizeof(p->context) - 1);
2390 ast_mutex_lock(&iflock);
2393 ast_mutex_unlock(&iflock);
2395 ast_log(LOG_DEBUG, "Allocating new SIP call for %s\n", callid);
2399 /*--- find_call: Connect incoming SIP message to current call or create new call structure */
2400 /* Called by handle_request ,sipsock_read */
2401 static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *sin)
2406 char iabuf[INET_ADDRSTRLEN];
2410 callid = get_header(req, "Call-ID");
2412 if (pedanticsipchecking) {
2413 /* In principle Call-ID's uniquely identify a call, however some vendors
2414 (i.e. Pingtel) send multiple calls with the same Call-ID and different
2415 tags in order to simplify billing. The RFC does state that we have to
2416 compare tags in addition to the call-id, but this generate substantially
2417 more overhead which is totally unnecessary for the vast majority of sane
2418 SIP implementations, and thus Asterisk does not enable this behavior
2419 by default. Short version: You'll need this option to support conferencing
2421 strncpy(tmp, req->header[0], sizeof(tmp) - 1);
2423 c = strchr(tmp, ' ');
2426 if (!strcasecmp(cmd, "SIP/2.0"))
2427 strncpy(tmp, get_header(req, "To"), sizeof(tmp) - 1);
2429 strncpy(tmp, get_header(req, "From"), sizeof(tmp) - 1);
2430 tag = strstr(tmp, "tag=");
2433 c = strchr(tag, ';');
2440 if (ast_strlen_zero(callid)) {
2441 ast_log(LOG_WARNING, "Call missing call ID from '%s'\n", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr));
2444 ast_mutex_lock(&iflock);
2447 if (!strcmp(p->callid, callid) &&
2448 (!pedanticsipchecking || !tag || ast_strlen_zero(p->theirtag) || !strcmp(p->theirtag, tag))) {
2449 /* Found the call */
2450 ast_mutex_lock(&p->lock);
2451 ast_mutex_unlock(&iflock);
2456 ast_mutex_unlock(&iflock);
2457 p = sip_alloc(callid, sin, 1);
2459 ast_mutex_lock(&p->lock);
2463 /*--- sip_register: Parse register=> line in sip.conf and add to registry */
2464 static int sip_register(char *value, int lineno)
2466 struct sip_registry *reg;
2467 char copy[256] = "";
2468 char *username=NULL, *hostname=NULL, *secret=NULL, *authuser=NULL;
2475 strncpy(copy, value, sizeof(copy)-1);
2478 hostname = strrchr(stringp, '@');
2483 if (!username || ast_strlen_zero(username) || !hostname || ast_strlen_zero(hostname)) {
2484 ast_log(LOG_WARNING, "Format for registration is user[:secret[:authuser]]@host[:port][/contact] at line %d", lineno);
2488 username = strsep(&stringp, ":");
2490 secret = strsep(&stringp, ":");
2492 authuser = strsep(&stringp, ":");
2495 hostname = strsep(&stringp, "/");
2497 contact = strsep(&stringp, "/");
2498 if (!contact || ast_strlen_zero(contact))
2501 hostname = strsep(&stringp, ":");
2502 porta = strsep(&stringp, ":");
2504 if (porta && !atoi(porta)) {
2505 ast_log(LOG_WARNING, "%s is not a valid port number at line %d\n", porta, lineno);
2508 reg = malloc(sizeof(struct sip_registry));
2510 memset(reg, 0, sizeof(struct sip_registry));
2511 strncpy(reg->contact, contact, sizeof(reg->contact) - 1);
2513 strncpy(reg->username, username, sizeof(reg->username)-1);
2515 strncpy(reg->hostname, hostname, sizeof(reg->hostname)-1);
2517 strncpy(reg->authuser, authuser, sizeof(reg->authuser)-1);
2519 strncpy(reg->secret, secret, sizeof(reg->secret)-1);
2522 reg->refresh = default_expiry;
2523 reg->portno = porta ? atoi(porta) : 0;
2524 reg->callid_valid = 0;
2526 ast_mutex_lock(®l.lock);
2527 reg->next = regl.registrations;
2528 regl.registrations = reg;
2529 ast_mutex_unlock(®l.lock);
2531 ast_log(LOG_ERROR, "Out of memory\n");
2537 /*--- lws2sws: Parse multiline SIP headers into one header */
2538 /* This is enabled if pedanticsipchecking is enabled */
2539 static int lws2sws(char *msgbuf, int len)
2545 /* Eliminate all CRs */
2546 if (msgbuf[h] == '\r') {
2550 /* Check for end-of-line */
2551 if (msgbuf[h] == '\n') {
2552 /* Check for end-of-message */
2555 /* Check for a continuation line */
2556 if (msgbuf[h + 1] == ' ') {
2557 /* Merge continuation line */
2561 /* Propagate LF and start new line */
2562 msgbuf[t++] = msgbuf[h++];
2567 if (msgbuf[h] == ' ' || msgbuf[h] == '\t') {
2572 msgbuf[t++] = msgbuf[h++];
2576 msgbuf[t++] = msgbuf[h++];
2584 /*--- parse: Parse a SIP message ----*/
2585 static void parse(struct sip_request *req)
2587 /* Divide fields by NULL's */
2592 /* First header starts immediately */
2596 /* We've got a new header */
2600 printf("Header: %s (%d)\n", req->header[f], strlen(req->header[f]));
2602 if (ast_strlen_zero(req->header[f])) {
2603 /* Line by itself means we're now in content */
2607 if (f >= SIP_MAX_HEADERS - 1) {
2608 ast_log(LOG_WARNING, "Too many SIP headers...\n");
2611 req->header[f] = c + 1;
2612 } else if (*c == '\r') {
2613 /* Ignore but eliminate \r's */
2618 /* Check for last header */
2619 if (!ast_strlen_zero(req->header[f]))
2622 /* Now we process any mime content */
2627 /* We've got a new line */
2630 printf("Line: %s (%d)\n", req->line[f], strlen(req->line[f]));
2632 if (f >= SIP_MAX_LINES - 1) {
2633 ast_log(LOG_WARNING, "Too many SDP lines...\n");
2636 req->line[f] = c + 1;
2637 } else if (*c == '\r') {
2638 /* Ignore and eliminate \r's */
2643 /* Check for last line */
2644 if (!ast_strlen_zero(req->line[f]))
2648 ast_log(LOG_WARNING, "Odd content, extra stuff left over ('%s')\n", c);
2651 /*--- process_sdp: Process SIP SDP ---*/
2652 static int process_sdp(struct sip_pvt *p, struct sip_request *req)
2658 char iabuf[INET_ADDRSTRLEN];
2662 int peercapability, peernoncodeccapability;
2663 int vpeercapability=0, vpeernoncodeccapability=0;
2664 struct sockaddr_in sin;
2667 struct ast_hostent ahp;
2672 int debug=sip_debug_test_pvt(p);
2674 /* Update our last rtprx when we receive an SDP, too */
2675 time(&p->lastrtprx);
2677 /* Get codec and RTP info from SDP */
2678 if (strcasecmp(get_header(req, "Content-Type"), "application/sdp")) {
2679 ast_log(LOG_NOTICE, "Content is '%s', not 'application/sdp'\n", get_header(req, "Content-Type"));
2682 m = get_sdp(req, "m");
2683 c = get_sdp(req, "c");
2684 if (ast_strlen_zero(m) || ast_strlen_zero(c)) {
2685 ast_log(LOG_WARNING, "Insufficient information for SDP (m = '%s', c = '%s')\n", m, c);
2688 if (sscanf(c, "IN IP4 %256s", host) != 1) {
2689 ast_log(LOG_WARNING, "Invalid host in c= line, '%s'\n", c);
2692 /* XXX This could block for a long time, and block the main thread! XXX */
2693 hp = ast_gethostbyname(host, &ahp);
2695 ast_log(LOG_WARNING, "Unable to lookup host in c= line, '%s'\n", c);
2698 sdpLineNum_iterator_init(&iterator);
2700 while ((m = get_sdp_iterate(&iterator, req, "m"))[0] != '\0') {
2701 if ((sscanf(m, "audio %d RTP/AVP %n", &x, &len) == 1)) {
2703 /* Scan through the RTP payload types specified in a "m=" line: */
2704 ast_rtp_pt_clear(p->rtp);
2706 while(!ast_strlen_zero(codecs)) {
2707 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2708 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2712 ast_verbose("Found RTP audio format %d\n", codec);
2713 ast_rtp_set_m_type(p->rtp, codec);
2715 /* Skip over any whitespace */
2716 while(*codecs && (*codecs < 33)) codecs++;
2720 ast_rtp_pt_clear(p->vrtp); /* Must be cleared in case no m=video line exists */
2722 if (p->vrtp && (sscanf(m, "video %d RTP/AVP %n", &x, &len) == 1)) {
2725 /* Scan through the RTP payload types specified in a "m=" line: */
2727 while(!ast_strlen_zero(codecs)) {
2728 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2729 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2733 ast_verbose("Found video format %s\n", ast_getformatname(codec));
2734 ast_rtp_set_m_type(p->vrtp, codec);
2736 /* Skip over any whitespace */
2737 while(*codecs && (*codecs < 33)) codecs++;
2742 /* RTP addresses and ports for audio and video */
2743 sin.sin_family = AF_INET;
2744 memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
2746 /* Setup audio port number */
2747 sin.sin_port = htons(portno);
2748 if (p->rtp && sin.sin_port) {
2749 ast_rtp_set_peer(p->rtp, &sin);
2751 ast_verbose("Peer audio RTP is at port %s:%d\n", ast_inet_ntoa(iabuf,sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2752 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));
2755 /* Setup video port number */
2756 sin.sin_port = htons(vportno);
2757 if (p->vrtp && sin.sin_port) {
2758 ast_rtp_set_peer(p->vrtp, &sin);
2760 ast_verbose("Peer video RTP is at port %s:%d\n", ast_inet_ntoa(iabuf,sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2761 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));
2765 /* Next, scan through each "a=rtpmap:" line, noting each
2766 * specified RTP payload type (with corresponding MIME subtype):
2768 sdpLineNum_iterator_init(&iterator);
2769 while ((a = get_sdp_iterate(&iterator, req, "a"))[0] != '\0') {
2770 char* mimeSubtype = ast_strdupa(a); /* ensures we have enough space */
2771 if (!strcasecmp(a, "sendonly")) {
2775 if (!strcasecmp(a, "sendrecv")) {
2778 if (sscanf(a, "rtpmap: %u %[^/]/", &codec, mimeSubtype) != 2) continue;
2780 ast_verbose("Found description format %s\n", mimeSubtype);
2781 /* Note: should really look at the 'freq' and '#chans' params too */
2782 ast_rtp_set_rtpmap_type(p->rtp, codec, "audio", mimeSubtype);
2784 ast_rtp_set_rtpmap_type(p->vrtp, codec, "video", mimeSubtype);
2787 /* Now gather all of the codecs that were asked for: */
2788 ast_rtp_get_current_formats(p->rtp,
2789 &peercapability, &peernoncodeccapability);
2791 ast_rtp_get_current_formats(p->vrtp,
2792 &vpeercapability, &vpeernoncodeccapability);
2793 p->jointcapability = p->capability & (peercapability | vpeercapability);
2794 p->peercapability = (peercapability | vpeercapability);
2795 p->noncodeccapability = noncodeccapability & peernoncodeccapability;
2798 const unsigned slen=80;
2799 char s1[slen], s2[slen], s3[slen], s4[slen];
2801 ast_verbose("Capabilities: us - %s, peer - audio=%s/video=%s, combined - %s\n",
2802 ast_getformatname_multiple(s1, slen, p->capability),
2803 ast_getformatname_multiple(s2, slen, peercapability),
2804 ast_getformatname_multiple(s3, slen, vpeercapability),
2805 ast_getformatname_multiple(s4, slen, p->jointcapability));
2807 ast_verbose("Non-codec capabilities: us - %s, peer - %s, combined - %s\n",
2808 ast_getformatname_multiple(s1, slen, noncodeccapability),
2809 ast_getformatname_multiple(s2, slen, peernoncodeccapability),
2810 ast_getformatname_multiple(s3, slen, p->noncodeccapability));
2812 if (!p->jointcapability) {
2813 ast_log(LOG_WARNING, "No compatible codecs!\n");
2817 if (!(p->owner->nativeformats & p->jointcapability)) {
2818 const unsigned slen=80;
2819 char s1[slen], s2[slen];
2820 ast_log(LOG_DEBUG, "Oooh, we need to change our formats since our peer supports only %s and not %s\n",
2821 ast_getformatname_multiple(s1, slen, p->jointcapability),
2822 ast_getformatname_multiple(s2, slen, p->owner->nativeformats));
2823 p->owner->nativeformats = sip_codec_choose(p->jointcapability);
2824 ast_set_read_format(p->owner, p->owner->readformat);
2825 ast_set_write_format(p->owner, p->owner->writeformat);
2827 if (p->owner->bridge) {
2828 /* Turn on/off music on hold if we are holding/unholding */
2829 if (sin.sin_addr.s_addr && !sendonly) {
2830 ast_moh_stop(p->owner->bridge);
2832 ast_moh_start(p->owner->bridge, NULL);
2840 /*--- add_header: Add header to SIP message */
2841 static int add_header(struct sip_request *req, char *var, char *value)
2843 if (req->len >= sizeof(req->data) - 4) {
2844 ast_log(LOG_WARNING, "Out of space, can't add anymore (%s:%s)\n", var, value);
2848 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2851 req->header[req->headers] = req->data + req->len;
2852 snprintf(req->header[req->headers], sizeof(req->data) - req->len - 4, "%s: %s\r\n", var, value);
2853 req->len += strlen(req->header[req->headers]);
2854 if (req->headers < SIP_MAX_HEADERS)
2857 ast_log(LOG_WARNING, "Out of header space\n");
2863 /*--- add_blank_header: Add blank header to SIP message */
2864 static int add_blank_header(struct sip_request *req)
2866 if (req->len >= sizeof(req->data) - 4) {
2867 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2871 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2874 req->header[req->headers] = req->data + req->len;
2875 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "\r\n");
2876 req->len += strlen(req->header[req->headers]);
2877 if (req->headers < SIP_MAX_HEADERS)
2880 ast_log(LOG_WARNING, "Out of header space\n");
2886 /*--- add_line: Add content (not header) to SIP message */
2887 static int add_line(struct sip_request *req, char *line)
2889 if (req->len >= sizeof(req->data) - 4) {
2890 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2894 /* Add extra empty return */
2895 snprintf(req->data + req->len, sizeof(req->data) - req->len, "\r\n");
2896 req->len += strlen(req->data + req->len);
2898 req->line[req->lines] = req->data + req->len;
2899 snprintf(req->line[req->lines], sizeof(req->data) - req->len, "%s", line);
2900 req->len += strlen(req->line[req->lines]);
2901 if (req->lines < SIP_MAX_LINES)
2904 ast_log(LOG_WARNING, "Out of line space\n");
2910 /*--- copy_header: Copy one header field from one request to another */
2911 static int copy_header(struct sip_request *req, struct sip_request *orig, char *field)
2914 tmp = get_header(orig, field);
2915 if (!ast_strlen_zero(tmp)) {
2916 /* Add what we're responding to */
2917 return add_header(req, field, tmp);
2919 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2923 /*--- copy_all_header: Copy all headers from one request to another ---*/
2924 static int copy_all_header(struct sip_request *req, struct sip_request *orig, char *field)
2930 tmp = __get_header(orig, field, &start);
2931 if (!ast_strlen_zero(tmp)) {
2932 /* Add what we're responding to */
2933 add_header(req, field, tmp);
2938 return copied ? 0 : -1;
2941 /*--- copy_via_headers: Copy SIP VIA Headers from one request to another ---*/
2942 static int copy_via_headers(struct sip_pvt *p, struct sip_request *req, struct sip_request *orig, char *field)
2944 char tmp[256]="", *oh, *end;
2948 char iabuf[INET_ADDRSTRLEN];
2950 oh = __get_header(orig, field, &start);
2951 if (!ast_strlen_zero(oh)) {
2953 strncpy(tmp, oh, sizeof(tmp) - 1);
2954 oh = strstr(tmp, ";rport");
2956 end = strchr(oh + 1, ';');
2958 memmove(oh, end, strlen(end) + 1);
2962 if (!copied && (p->nat == SIP_NAT_ALWAYS)) {
2963 /* Whoo hoo! Now we can indicate port address translation too! Just
2964 another RFC (RFC3581). I'll leave the original comments in for
2966 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));
2967 add_header(req, field, new);
2969 /* Add what we're responding to */
2970 add_header(req, field, tmp);
2977 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2983 /*--- add_route: Add route header into request per learned route ---*/
2984 static void add_route(struct sip_request *req, struct sip_route *route)
2987 int n, rem = 255; /* sizeof(r)-1: Room for terminating 0 */
2993 n = strlen(route->hop);
2994 if ((n+3)>rem) break;
3000 strncpy(p, route->hop, rem); p += n;
3003 route = route->next;
3006 add_header(req, "Route", r);
3009 /*--- set_destination: Set destination from SIP URI ---*/
3010 static void set_destination(struct sip_pvt *p, char *uri)
3012 char *h, *maddr, hostname[256] = "";
3013 char iabuf[INET_ADDRSTRLEN];
3016 struct ast_hostent ahp;
3017 int debug=sip_debug_test_pvt(p);
3019 /* Parse uri to h (host) and port - uri is already just the part inside the <> */
3020 /* general form we are expecting is sip[s]:username[:password]@host[:port][;...] */
3023 ast_verbose("set_destination: Parsing <%s> for address/port to send&n