2 * Asterisk -- A telephony toolkit for Linux.
4 * Implementation of Session Initiation Protocol
6 * Copyright (C) 1999, Mark Spencer
8 * Mark Spencer <markster@linux-support.net>
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/callerid.h>
32 #include <asterisk/cli.h>
33 #include <asterisk/md5.h>
34 #include <asterisk/app.h>
35 #include <asterisk/musiconhold.h>
36 #include <asterisk/dsp.h>
37 #include <asterisk/parking.h>
38 #include <asterisk/acl.h>
39 #include <asterisk/srv.h>
40 #include <asterisk/astdb.h>
41 #include <asterisk/causes.h>
42 #include <asterisk/utils.h>
44 #include <asterisk/astosp.h>
46 #include <sys/socket.h>
47 #include <sys/ioctl.h>
54 #include <arpa/inet.h>
56 #include <sys/signal.h>
57 #include <netinet/in_systm.h>
58 #include <netinet/ip.h>
60 #ifdef SIP_MYSQL_FRIENDS
62 #include <mysql/mysql.h>
65 #ifndef DEFAULT_USERAGENT
66 #define DEFAULT_USERAGENT "Asterisk PBX"
69 #define VIDEO_CODEC_MASK 0x1fc0000 /* Video codecs from H.261 thru AST_FORMAT_MAX_VIDEO */
71 #define IPTOS_MINCOST 0x02
74 /* #define VOCAL_DATA_HACK */
77 #define DEFAULT_DEFAULT_EXPIRY 120
78 #define DEFAULT_MAX_EXPIRY 3600
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 EXPIRY_GUARD_SECS */
84 #define EXPIRY_GUARD_MIN 500 /* This is the minimum guard time applied. If GUARD_PCT turns out
85 to be lower than this, it will use this time instead. This is in
87 #define EXPIRY_GUARD_PCT 0.20 /* Percentage of expires timeout to use when below EXPIRY_GUARD_LIMIT */
90 #define MAX(a,b) ((a) > (b) ? (a) : (b))
93 #define CALLERID_UNKNOWN "Unknown"
95 /* --- Choices for DTMF support in SIP channel */
96 #define SIP_DTMF_RFC2833 (1 << 0)
97 #define SIP_DTMF_INBAND (1 << 1)
98 #define SIP_DTMF_INFO (1 << 2)
100 static int max_expiry = DEFAULT_MAX_EXPIRY;
101 static int default_expiry = DEFAULT_DEFAULT_EXPIRY;
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 */
110 /* MYSQL_FRIENDS: Check if peer exists in database and read some configuration
111 from databse (not all options supported though) */
113 AST_MUTEX_DEFINE_STATIC(mysqllock);
115 static char mydbuser[80];
116 static char mydbpass[80];
117 static char mydbhost[80];
118 static char mydbname[80];
122 #define DEBUG_READ 0 /* Recieved data */
123 #define DEBUG_SEND 1 /* Transmit data */
125 static char *desc = "Session Initiation Protocol (SIP)";
126 static char *type = "SIP";
127 static char *tdesc = "Session Initiation Protocol (SIP)";
128 static char *config = "sip.conf";
130 #define DEFAULT_SIP_PORT 5060 /* From RFC 2543 */
131 #define SIP_MAX_PACKET 1500 /* Also from RFC 2543, should sub headers tho */
133 #define ALLOWED_METHODS "INVITE, ACK, CANCEL, OPTIONS, BYE, REFER"
135 static char useragent[AST_MAX_EXTENSION] = DEFAULT_USERAGENT;
137 static char context[AST_MAX_EXTENSION] = "default";
139 static char language[MAX_LANGUAGE] = "";
141 static char callerid[AST_MAX_EXTENSION] = "asterisk";
143 static char fromdomain[AST_MAX_EXTENSION] = "";
145 static char notifymime[AST_MAX_EXTENSION] = "application/simple-message-summary";
147 static int srvlookup = 0;
149 static int pedanticsipchecking = 0;
151 static int autocreatepeer = 0;
153 static int relaxdtmf = 0;
155 static int globalrtptimeout = 0;
157 static int globalrtpholdtimeout = 0;
159 static int globaltrustrpid = 0;
161 static int globalprogressinband = 0;
164 static int globalospauth = 0;
167 static int usecnt =0;
168 AST_MUTEX_DEFINE_STATIC(usecnt_lock);
170 /* Protect the interface list (of sip_pvt's) */
171 AST_MUTEX_DEFINE_STATIC(iflock);
173 /* Protect the monitoring thread, so only one process can kill or start it, and not
174 when it's doing something critical. */
175 AST_MUTEX_DEFINE_STATIC(netlock);
177 AST_MUTEX_DEFINE_STATIC(monlock);
179 /* This is the thread for the monitor which checks for input on the channels
180 which are not currently in use. */
181 static pthread_t monitor_thread = AST_PTHREADT_NULL;
183 static int restart_monitor(void);
185 /* Codecs that we support by default: */
186 static int capability = AST_FORMAT_ULAW | AST_FORMAT_ALAW | AST_FORMAT_GSM | AST_FORMAT_H263;
187 static int noncodeccapability = AST_RTP_DTMF;
189 static char ourhost[256];
190 static struct in_addr __ourip;
193 static int sipdebug = 0;
194 static struct sockaddr_in debugaddr;
198 static int videosupport = 0;
200 static int globaldtmfmode = SIP_DTMF_RFC2833; /* DTMF mode default */
201 static int recordhistory = 0;
202 static int globalpromiscredir;
204 static char globalmusicclass[MAX_LANGUAGE] = ""; /* Global music on hold class */
205 static char global_realm[AST_MAX_EXTENSION] = "asterisk"; /* Default realm */
208 static int expiry = 900;
210 static struct sched_context *sched;
211 static struct io_context *io;
212 /* The private structures of the sip channels are linked for
213 selecting outgoing channels */
215 #define SIP_MAX_HEADERS 64
216 #define SIP_MAX_LINES 64
220 #define DEC_OUT_USE 2
221 #define INC_OUT_USE 3
223 static struct sip_codec_pref {
225 struct sip_codec_pref *next;
228 /* sip_request: The data grabbed from the UDP socket */
230 char *rlPart1; /* SIP Method Name or "SIP/2.0" protocol version */
231 char *rlPart2; /* The Request URI or Response Status */
233 int headers; /* SIP Headers */
234 char *header[SIP_MAX_HEADERS];
235 int lines; /* SDP Content */
236 char *line[SIP_MAX_LINES];
237 char data[SIP_MAX_PACKET];
243 struct sip_route *next;
249 struct sip_history *next;
252 /* sip_pvt: PVT structures are used for each SIP conversation, ie. a call */
253 static struct sip_pvt {
254 ast_mutex_t lock; /* Channel private lock */
255 char callid[80]; /* Global CallID */
256 char randdata[80]; /* Random data */
257 unsigned int ocseq; /* Current outgoing seqno */
258 unsigned int icseq; /* Current incoming seqno */
259 unsigned int callgroup; /* Call group */
260 unsigned int pickupgroup; /* Pickup group */
261 int lastinvite; /* Last Cseq of invite */
262 int alreadygone; /* Whether or not we've already been destroyed by or peer */
263 int needdestroy; /* if we need to be destroyed */
264 int capability; /* Special capability (codec) */
265 int jointcapability; /* Supported capability at both ends (codecs ) */
266 int prefcodec; /* Preferred codec (outbound only) */
267 int noncodeccapability;
268 int outgoing; /* Outgoing or incoming call? */
269 int authtries; /* Times we've tried to authenticate */
270 int insecure; /* Don't check source port/ip */
271 int expiry; /* How long we take to expire */
272 int branch; /* One random number */
273 int canreinvite; /* Do we support reinvite */
274 int ringing; /* Have sent 180 ringing */
275 int progress; /* Have sent 183 message progress */
276 int tag; /* Another random number */
277 int nat; /* Whether to try to support NAT */
278 int sessionid; /* SDP Session ID */
279 int sessionversion; /* SDP Session Version */
280 struct sockaddr_in sa; /* Our peer */
281 struct sockaddr_in redirip; /* Where our RTP should be going if not to us */
282 struct sockaddr_in vredirip; /* Where our Video RTP should be going if not to us */
283 int redircodecs; /* Redirect codecs */
284 struct sockaddr_in recv; /* Received as */
285 struct in_addr ourip; /* Our IP */
286 struct ast_channel *owner; /* Who owns us */
287 char exten[AST_MAX_EXTENSION]; /* Extension where to start */
288 char refer_to[AST_MAX_EXTENSION]; /* Place to store REFER-TO extension */
289 char referred_by[AST_MAX_EXTENSION]; /* Place to store REFERRED-BY extension */
290 char refer_contact[AST_MAX_EXTENSION]; /* Place to store Contact info from a REFER extension */
291 struct sip_pvt *refer_call; /* Call we are referring */
292 struct sip_route *route; /* Head of linked list of routing steps (fm Record-Route) */
293 int route_persistant; /* Is this the "real" route? */
294 char from[256]; /* The From: header */
295 char useragent[256]; /* User agent in SIP request */
296 char context[AST_MAX_EXTENSION]; /* Context for this call */
297 char fromdomain[AST_MAX_EXTENSION]; /* Domain to show in the from field */
298 char fromuser[AST_MAX_EXTENSION]; /* Domain to show in the user field */
299 char tohost[AST_MAX_EXTENSION]; /* Host we should put in the "to" field */
300 char language[MAX_LANGUAGE]; /* Default language for this call */
301 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
302 char rdnis[256]; /* Referring DNIS */
303 char theirtag[256]; /* Their tag */
306 char authname[256]; /* Who we use for authentication */
307 char uri[256]; /* Original requested URI */
308 char peersecret[256];
309 char peermd5secret[256];
310 char callerid[256]; /* Caller*ID */
311 int restrictcid; /* hide presentation from remote user */
313 char accountcode[20]; /* Account code */
314 char our_contact[256]; /* Our contact header */
315 char realm[256]; /* Authorization realm */
316 char nonce[256]; /* Authorization nonce */
317 char opaque[256]; /* Opaque nonsense */
318 char qop[80]; /* Quality of Protection, since SIP wasn't complicated enough yet. */
319 char domain[256]; /* Authorization nonce */
320 char lastmsg[256]; /* Last Message sent/received */
321 int amaflags; /* AMA Flags */
322 int pendinginvite; /* Any pending invite */
323 int needreinvite; /* Do we need to send another reinvite? */
324 int pendingbye; /* Need to send bye after we ack? */
325 int gotrefer; /* Got a refer? */
327 int ospauth; /* Allow OSP Authentication */
328 int osphandle; /* OSP Handle for call */
329 time_t ospstart; /* OSP Start time */
331 struct sip_request initreq; /* Initial request */
333 int maxtime; /* Max time for first response */
334 int initid; /* Auto-congest ID if appropriate */
335 int autokillid; /* Auto-kill ID */
336 time_t lastrtprx; /* Last RTP received */
337 int rtptimeout; /* RTP timeout time */
338 int rtpholdtimeout; /* RTP timeout when on hold */
343 int promiscredir; /* Promiscuous redirection */
351 struct sip_peer *peerpoke; /* If this calls is to poke a peer, which one */
352 struct sip_registry *registry; /* If this is a REGISTER call, to which registry */
353 struct ast_rtp *rtp; /* RTP Session */
354 struct ast_rtp *vrtp; /* Video RTP session */
355 struct sip_pkt *packets; /* Packets scheduled for re-transmission */
356 struct sip_history *history; /* History of this SIP dialog */
357 struct sip_pvt *next; /* Next call in chain */
360 #define FLAG_RESPONSE (1 << 0)
361 #define FLAG_FATAL (1 << 1)
363 /* sip packet - read in sipsock_read, transmitted in send_request */
365 struct sip_pkt *next; /* Next packet */
366 int retrans; /* Retransmission number */
367 int seqno; /* Sequence number */
368 int flags; /* non-zero if this is a response packet (e.g. 200 OK) */
369 struct sip_pvt *owner; /* Owner call */
370 int retransid; /* Retransmission ID */
371 int packetlen; /* Length of packet */
375 /* Structure for SIP user data. User's place calls to us */
377 /* Users who can access various contexts */
383 char accountcode[20];
384 char language[MAX_LANGUAGE];
385 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
386 char useragent[256]; /* User agent in SIP request */
387 unsigned int callgroup;
388 unsigned int pickupgroup;
396 int ospauth; /* Allow OSP Authentication */
410 #endif /* MYSQL_FRIENDS */
411 struct sip_user *next;
414 /* Structure for SIP peer data, we place calls to peers if registred or fixed IP address (host) */
419 char context[80]; /* JK02: peers need context too to allow parking etc */
424 char mailbox[AST_MAX_EXTENSION];
425 char language[MAX_LANGUAGE];
426 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
427 char useragent[256]; /* User agent in SIP request */
438 int ospauth; /* Allow OSP Authentication */
442 unsigned int callgroup;
443 unsigned int pickupgroup;
448 struct sockaddr_in addr;
452 struct sip_pvt *call; /* Call pointer */
453 int pokeexpire; /* When to expire poke */
454 int lastms; /* How long last response took (in ms), or -1 for no response */
455 int maxms; /* Max ms we will accept for the host to be up, 0 to not monitor */
456 struct timeval ps; /* Ping send time */
458 struct sockaddr_in defaddr;
464 struct sip_peer *next;
467 AST_MUTEX_DEFINE_STATIC(sip_reload_lock);
468 static int sip_reloading = 0;
470 #define REG_STATE_UNREGISTERED 0
471 #define REG_STATE_REGSENT 1
472 #define REG_STATE_AUTHSENT 2
473 #define REG_STATE_REGISTERED 3
474 #define REG_STATE_REJECTED 4
475 #define REG_STATE_TIMEOUT 5
476 #define REG_STATE_NOAUTH 6
478 #define SIP_NAT_NEVER 0
479 #define SIP_NAT_RFC3581 1
480 #define SIP_NAT_ALWAYS 2
482 /* sip_registry: Registrations with other SIP proxies */
483 struct sip_registry {
484 struct sockaddr_in addr; /* Who we connect to for registration purposes */
485 char username[80]; /* Who we are registering as */
486 char authuser[80]; /* Who we *authenticate* as */
488 char secret[80]; /* Password or key name in []'s */
490 char contact[80]; /* Contact extension */
492 int expire; /* Sched ID of expiration */
493 int timeout; /* sched id of sip_reg_timeout */
494 int refresh; /* How often to refresh */
495 struct sip_pvt *call; /* create a sip_pvt structure for each outbound "registration call" in progress */
497 int callid_valid; /* 0 means we haven't chosen callid for this registry yet. */
498 char callid[80]; /* Global CallID for this registry */
499 unsigned int ocseq; /* Sequence number we got to for REGISTERs for this registry */
500 struct sockaddr_in us; /* Who the server thinks we are */
501 struct sip_registry *next;
504 /*--- The user list: Users and friends ---*/
505 static struct ast_user_list {
506 struct sip_user *users;
510 /*--- The peer list: Peers and Friends ---*/
511 static struct ast_peer_list {
512 struct sip_peer *peers;
516 /*--- The register list: Other SIP proxys we register with and call ---*/
517 static struct ast_register_list {
518 struct sip_registry *registrations;
524 #define REINVITE_INVITE 1
525 #define REINVITE_UPDATE 2
527 static int __sip_do_register(struct sip_registry *r);
529 static int sipsock = -1;
530 static int globalnat = SIP_NAT_RFC3581;
531 static int globalcanreinvite = REINVITE_INVITE;
534 static struct sockaddr_in bindaddr;
535 static struct sockaddr_in externip;
536 static struct ast_ha *localaddr;
538 static struct ast_frame *sip_read(struct ast_channel *ast);
539 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req);
540 static int transmit_response_with_sdp(struct sip_pvt *p, char *msg, struct sip_request *req, int retrans);
541 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *rand, int reliable, char *header);
542 static int transmit_request(struct sip_pvt *p, char *msg, int inc, int reliable, int newbranch);
543 static int transmit_request_with_auth(struct sip_pvt *p, char *msg, int inc, int reliable, int newbranch);
544 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);
545 static int transmit_reinvite_with_sdp(struct sip_pvt *p);
546 static int transmit_info_with_digit(struct sip_pvt *p, char digit);
547 static int transmit_message_with_text(struct sip_pvt *p, char *text);
548 static int transmit_refer(struct sip_pvt *p, char *dest);
549 static struct sip_peer *temp_peer(char *name);
550 static int do_proxy_auth(struct sip_pvt *p, struct sip_request *req, char *header, char *respheader, char *msg, int init);
551 static void free_old_route(struct sip_route *route);
552 static int build_reply_digest(struct sip_pvt *p, char *orig_header, char *digest, int digest_len);
553 static int update_user_counter(struct sip_pvt *fup, int event);
554 static void prune_peers(void);
555 static int sip_do_reload(void);
558 /*--- sip_debug_test_addr: See if we pass debug IP filter */
559 static inline int sip_debug_test_addr(struct sockaddr_in *addr)
563 if (debugaddr.sin_addr.s_addr) {
564 if (((ntohs(debugaddr.sin_port) != 0)
565 && (debugaddr.sin_port != addr->sin_port))
566 || (debugaddr.sin_addr.s_addr != addr->sin_addr.s_addr))
572 static inline int sip_debug_test_pvt(struct sip_pvt *p)
576 return sip_debug_test_addr(((p->nat == SIP_NAT_ALWAYS) ? &p->recv : &p->sa));
580 /*--- __sip_xmit: Transmit SIP message ---*/
581 static int __sip_xmit(struct sip_pvt *p, char *data, int len)
584 char iabuf[INET_ADDRSTRLEN];
585 if (p->nat == SIP_NAT_ALWAYS)
586 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->recv, sizeof(struct sockaddr_in));
588 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->sa, sizeof(struct sockaddr_in));
590 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));
595 static void sip_destroy(struct sip_pvt *p);
597 /*--- ast_sip_ouraddrfor: NAT fix - decide which IP address to use for ASterisk server? ---*/
598 /* Only used for outbound registrations */
599 static int ast_sip_ouraddrfor(struct in_addr *them, struct in_addr *us)
602 * Using the localaddr structure built up with localnet statements
603 * apply it to their address to see if we need to substitute our
604 * externip or can get away with our internal bindaddr
606 struct sockaddr_in theirs;
607 theirs.sin_addr = *them;
608 if (localaddr && externip.sin_addr.s_addr &&
609 ast_apply_ha(localaddr, &theirs)) {
611 char iabuf[INET_ADDRSTRLEN];
612 memcpy(us, &externip.sin_addr, sizeof(struct in_addr));
613 strcpy(t, ast_inet_ntoa(iabuf, sizeof(iabuf), *(struct in_addr *)&them->s_addr));
614 ast_log(LOG_DEBUG, "Target address %s is not local, substituting externip\n", t);
616 else if (bindaddr.sin_addr.s_addr)
617 memcpy(us, &bindaddr.sin_addr, sizeof(struct in_addr));
619 return ast_ouraddrfor(them, us);
623 static int append_history(struct sip_pvt *p, char *event, char *data)
625 struct sip_history *hist, *prev;
629 hist = malloc(sizeof(struct sip_history));
631 memset(hist, 0, sizeof(struct sip_history));
632 snprintf(hist->event, sizeof(hist->event), "%-15s %s", event, data);
636 if ((*c == '\r') || (*c == '\n')) {
642 /* Enqueue into history */
655 /*--- retrans_pkt: Retransmit SIP message if no answer ---*/
656 static int retrans_pkt(void *data)
658 struct sip_pkt *pkt=data, *prev, *cur;
660 char iabuf[INET_ADDRSTRLEN];
661 ast_mutex_lock(&pkt->owner->lock);
662 if (pkt->retrans < MAX_RETRANS) {
664 if (sip_debug_test_pvt(pkt->owner)) {
665 if (pkt->owner->nat == SIP_NAT_ALWAYS)
666 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));
668 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));
670 append_history(pkt->owner, "ReTx", pkt->data);
671 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
674 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");
675 append_history(pkt->owner, "MaxRetries", pkt->flags & FLAG_FATAL ? "(Critical)" : "(Non-critical)");
677 if (pkt->flags & FLAG_FATAL) {
678 while(pkt->owner->owner && ast_mutex_trylock(&pkt->owner->owner->lock)) {
679 ast_mutex_unlock(&pkt->owner->lock);
681 ast_mutex_lock(&pkt->owner->lock);
683 if (pkt->owner->owner) {
684 ast_queue_hangup(pkt->owner->owner);
685 ast_mutex_unlock(&pkt->owner->owner->lock);
687 /* If no owner, destroy now */
688 pkt->owner->needdestroy = 1;
691 /* In any case, go ahead and remove the packet */
693 cur = pkt->owner->packets;
702 prev->next = cur->next;
704 pkt->owner->packets = cur->next;
705 ast_mutex_unlock(&pkt->owner->lock);
709 ast_log(LOG_WARNING, "Weird, couldn't find packet owner!\n");
712 ast_mutex_unlock(&pkt->owner->lock);
716 /*--- __sip_reliable_xmit: transmit packet with retransmits ---*/
717 static int __sip_reliable_xmit(struct sip_pvt *p, int seqno, int resp, char *data, int len, int fatal)
720 pkt = malloc(sizeof(struct sip_pkt) + len);
723 memset(pkt, 0, sizeof(struct sip_pkt));
724 memcpy(pkt->data, data, len);
725 pkt->packetlen = len;
726 pkt->next = p->packets;
731 pkt->flags |= FLAG_FATAL;
732 /* Schedule retransmission */
733 pkt->retransid = ast_sched_add(sched, DEFAULT_RETRANS, retrans_pkt, pkt);
734 pkt->next = p->packets;
736 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
737 if (!strncasecmp(pkt->data, "INVITE", 6)) {
738 /* Note this is a pending invite */
739 p->pendinginvite = seqno;
744 /*--- __sip_autodestruct: Kill a call (called by scheduler) ---*/
745 static int __sip_autodestruct(void *data)
747 struct sip_pvt *p = data;
749 ast_log(LOG_DEBUG, "Auto destroying call '%s'\n", p->callid);
750 append_history(p, "AutoDestroy", "");
752 ast_log(LOG_WARNING, "Autodestruct on call '%s' with owner in place\n", p->callid);
753 ast_queue_hangup(p->owner);
760 /*--- sip_scheddestroy: Schedule destruction of SIP call ---*/
761 static int sip_scheddestroy(struct sip_pvt *p, int ms)
764 if (sip_debug_test_pvt(p))
765 ast_verbose("Scheduling destruction of call '%s' in %d ms\n", p->callid, ms);
767 snprintf(tmp, sizeof(tmp), "%d ms", ms);
768 append_history(p, "SchedDestroy", tmp);
770 if (p->autokillid > -1)
771 ast_sched_del(sched, p->autokillid);
772 p->autokillid = ast_sched_add(sched, ms, __sip_autodestruct, p);
776 /*--- sip_cancel_destroy: Cancel destruction of SIP call ---*/
777 static int sip_cancel_destroy(struct sip_pvt *p)
779 if (p->autokillid > -1)
780 ast_sched_del(sched, p->autokillid);
781 append_history(p, "CancelDestroy", "");
786 /*--- __sip_ack: Acknowledges receipt of a packet and stops retransmission ---*/
787 static int __sip_ack(struct sip_pvt *p, int seqno, int resp)
789 struct sip_pkt *cur, *prev = NULL;
794 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp)) {
795 if (!resp && (seqno == p->pendinginvite)) {
796 ast_log(LOG_DEBUG, "Acked pending invite %d\n", p->pendinginvite);
797 p->pendinginvite = 0;
800 /* this is our baby */
802 prev->next = cur->next;
804 p->packets = cur->next;
805 if (cur->retransid > -1)
806 ast_sched_del(sched, cur->retransid);
814 ast_log(LOG_DEBUG, "Stopping retransmission on '%s' of %s %d: %s\n", p->callid, resp ? "Response" : "Request", seqno, res ? "Not Found" : "Found");
818 /*--- __sip_semi_ack: Acks receipt of packet, keep it around (used for provisional responses) ---*/
819 static int __sip_semi_ack(struct sip_pvt *p, int seqno, int resp)
825 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp)) {
826 /* this is our baby */
827 if (cur->retransid > -1)
828 ast_sched_del(sched, cur->retransid);
835 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");
839 /*--- send_response: Transmit response on SIP request---*/
840 static int send_response(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
843 char iabuf[INET_ADDRSTRLEN];
844 if (sip_debug_test_pvt(p)) {
845 if (p->nat == SIP_NAT_ALWAYS)
846 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));
848 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));
851 append_history(p, "TxRespRel", req->data);
852 res = __sip_reliable_xmit(p, seqno, 1, req->data, req->len, (reliable > 1));
854 append_history(p, "TxResp", req->data);
855 res = __sip_xmit(p, req->data, req->len);
862 /*--- send_request: Send SIP Request to the other part of the dialogue ---*/
863 static int send_request(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
866 char iabuf[INET_ADDRSTRLEN];
867 if (sip_debug_test_pvt(p)) {
868 if (p->nat == SIP_NAT_ALWAYS)
869 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));
871 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));
874 append_history(p, "TxReqRel", req->data);
875 res = __sip_reliable_xmit(p, seqno, 0, req->data, req->len, (reliable > 1));
877 append_history(p, "TxReq", req->data);
878 res = __sip_xmit(p, req->data, req->len);
883 static void url_decode(char *s)
891 if (sscanf(s + 1, "%2x", &tmp) == 1) {
893 s += 2; /* Will be incremented once more when we break out */
897 /* Fall through if something wasn't right with the formatting */
907 /*--- ditch_braces: Pick out text in braces from character string ---*/
908 static char *ditch_braces(char *tmp)
912 if ((n = strchr(tmp, '<')) ) {
914 while(*c && *c != '>') c++;
916 ast_log(LOG_WARNING, "No closing brace in '%s'\n", tmp);
925 /*--- sip_sendtext: Send SIP MESSAGE text within a call ---*/
926 /* Called from PBX core text message functions */
927 static int sip_sendtext(struct ast_channel *ast, char *text)
929 struct sip_pvt *p = ast->pvt->pvt;
930 int debug=sip_debug_test_pvt(p);
933 ast_verbose("Sending text %s on %s\n", text, ast->name);
936 if (!text || ast_strlen_zero(text))
939 ast_verbose("Really sending text %s on %s\n", text, ast->name);
940 transmit_message_with_text(p, text);
946 /* Ehud Gavron 08-Jun-2004: */
947 /* The Mysql stuff works great for peers but not for users. */
948 /* Unfortunately multi-line phones (e.g. cisco 7960) and many */
949 /* SIP users behind the same NAT gateway need users. So.... */
951 /* mysql_update_user is not needed */
952 /*--- mysql_host: Get user from database ---*/
953 static struct sip_user *mysql_user(char *user)
957 u = malloc(sizeof(struct sip_user));
958 memset(u, 0, sizeof(struct sip_user));
959 if (mysql && (!user || (strlen(user) < 128))) {
963 time_t regseconds, nowtime;
968 name = alloca(strlen(user) * 2 + 1);
969 mysql_real_escape_string(mysql, name, user, strlen(user));
972 snprintf(query, sizeof(query), "SELECT name, secret, context, username, ipaddr, port, regseconds, callerid, restrictcid FROM sipfriends WHERE name=\"%s\"", name);
975 ast_mutex_lock(&mysqllock);
976 mysql_query(mysql, query);
977 if ((result = mysql_store_result(mysql))) {
979 if ((rowval = mysql_fetch_row(result))) {
980 numfields = mysql_num_fields(result);
981 fields = mysql_fetch_fields(result);
983 for (x=0;x<numfields;x++) {
985 if (!strcasecmp(fields[x].name, "secret")) {
986 strncpy(u->secret, rowval[x], sizeof(u->secret));
987 } else if (!strcasecmp(fields[x].name, "name")) {
988 strncpy(u->name, rowval[x], sizeof(u->name) - 1);
989 } else if (!strcasecmp(fields[x].name, "context")) {
990 strncpy(u->context, rowval[x], sizeof(u->context) - 1);
991 } else if (!strcasecmp(fields[x].name, "username")) {
992 strncpy(u->name, rowval[x], sizeof(u->name) - 1);
993 } else if (!strcasecmp(fields[x].name, "regseconds")) {
994 if (sscanf(rowval[x], "%li", ®seconds) != 1)
996 } else if (!strcasecmp(fields[x].name, "restrictcid")) {
998 } else if (!strcasecmp(fields[x].name, "callerid")) {
999 strncpy(u->callerid, rowval[x], sizeof(u->callerid) - 1);
1006 mysql_free_result(result);
1009 ast_mutex_unlock(&mysqllock);
1015 u->capability = capability;
1017 u->dtmfmode = globaldtmfmode;
1023 #endif /* MYSQL_USERS */
1025 #ifdef MYSQL_FRIENDS
1026 /*--- mysql_update_peer: Update peer from database ---*/
1027 /* This function adds registration state to database */
1028 static void mysql_update_peer(char *peer, struct sockaddr_in *sin, char *username, int expiry)
1030 if (mysql && (strlen(peer) < 128)) {
1034 char iabuf[INET_ADDRSTRLEN];
1036 name = alloca(strlen(peer) * 2 + 1);
1037 uname = alloca(strlen(username) * 2 + 1);
1039 mysql_real_escape_string(mysql, name, peer, strlen(peer));
1040 mysql_real_escape_string(mysql, uname, username, strlen(username));
1041 snprintf(query, sizeof(query), "UPDATE sipfriends SET ipaddr=\"%s\", port=\"%d\", regseconds=\"%ld\", username=\"%s\" WHERE name=\"%s\"",
1042 ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr), ntohs(sin->sin_port), nowtime + expiry, uname, name);
1043 ast_mutex_lock(&mysqllock);
1044 if (mysql_real_query(mysql, query, strlen(query)))
1045 ast_log(LOG_WARNING, "Unable to update database\n");
1047 ast_mutex_unlock(&mysqllock);
1051 /*--- mysql_peer: Get peer from database ---*/
1052 static struct sip_peer *mysql_peer(char *peer, struct sockaddr_in *sin)
1057 p = malloc(sizeof(struct sip_peer));
1058 memset(p, 0, sizeof(struct sip_peer));
1059 if (mysql && (!peer || (strlen(peer) < 128))) {
1064 char iabuf[INET_ADDRSTRLEN];
1065 time_t regseconds, nowtime;
1067 MYSQL_FIELD *fields;
1070 name = alloca(strlen(peer) * 2 + 1);
1071 mysql_real_escape_string(mysql, name, peer, strlen(peer));
1074 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));
1076 snprintf(query, sizeof(query), "SELECT name, secret, context, username, ipaddr, port, regseconds FROM sipfriends WHERE name=\"%s\"", name);
1077 ast_mutex_lock(&mysqllock);
1078 mysql_query(mysql, query);
1079 if ((result = mysql_store_result(mysql))) {
1080 if ((rowval = mysql_fetch_row(result))) {
1081 numfields = mysql_num_fields(result);
1082 fields = mysql_fetch_fields(result);
1084 p->addr.sin_family = AF_INET;
1085 for (x=0;x<numfields;x++) {
1087 if (!strcasecmp(fields[x].name, "secret")) {
1088 strncpy(p->secret, rowval[x], sizeof(p->secret));
1089 } else if (!strcasecmp(fields[x].name, "name")) {
1090 strncpy(p->name, rowval[x], sizeof(p->name) - 1);
1091 } else if (!strcasecmp(fields[x].name, "context")) {
1092 strncpy(p->context, rowval[x], sizeof(p->context) - 1);
1093 } else if (!strcasecmp(fields[x].name, "username")) {
1094 strncpy(p->username, rowval[x], sizeof(p->username) - 1);
1095 } else if (!strcasecmp(fields[x].name, "ipaddr")) {
1096 inet_aton(rowval[x], &p->addr.sin_addr);
1097 } else if (!strcasecmp(fields[x].name, "port")) {
1098 if (sscanf(rowval[x], "%i", &port) != 1)
1100 p->addr.sin_port = htons(port);
1101 } else if (!strcasecmp(fields[x].name, "regseconds")) {
1102 if (sscanf(rowval[x], "%li", ®seconds) != 1)
1108 if (nowtime > regseconds)
1109 memset(&p->addr, 0, sizeof(p->addr));
1111 mysql_free_result(result);
1114 ast_mutex_unlock(&mysqllock);
1121 p->capability = capability;
1123 p->dtmfmode = globaldtmfmode;
1124 p->promiscredir = globalpromiscredir;
1132 #endif /* MYSQL_FRIENDS */
1134 /*--- update_peer: Update peer data in database (if used) ---*/
1135 static void update_peer(struct sip_peer *p, int expiry)
1137 #ifdef MYSQL_FRIENDS
1139 mysql_update_peer(p->name, &p->addr, p->username, expiry);
1144 /*--- find_peer: Locate peer by name or ip address */
1145 static struct sip_peer *find_peer(char *peer, struct sockaddr_in *sin)
1147 struct sip_peer *p = NULL;
1151 /* Find by peer name */
1153 if (!strcasecmp(p->name, peer)) {
1162 if (!inaddrcmp(&p->addr, sin) ||
1164 (p->addr.sin_addr.s_addr == sin->sin_addr.s_addr))) {
1171 #ifdef MYSQL_FRIENDS
1173 p = mysql_peer(peer, sin);
1180 /*--- find_user: Locate user by name */
1181 static struct sip_user *find_user(char *name)
1183 struct sip_user *u = NULL;
1187 if (!strcasecmp(u->name, name)) {
1194 u = mysql_user(name);
1196 #endif /* MYSQL_USERS */
1200 /*--- create_addr: create address structure from peer definition ---*/
1201 /* Or, if peer not found, find it in the global DNS */
1202 /* returns TRUE on failure, FALSE on success */
1203 static int create_addr(struct sip_pvt *r, char *peer)
1206 struct ast_hostent ahp;
1211 char iabuf[INET_ADDRSTRLEN];
1212 char host[256], *hostn;
1214 r->sa.sin_family = AF_INET;
1215 ast_mutex_lock(&peerl.lock);
1216 p = find_peer(peer, NULL);
1220 r->capability = p->capability;
1223 ast_log(LOG_DEBUG, "Setting NAT on RTP to %d\n", (r->nat == SIP_NAT_ALWAYS));
1224 ast_rtp_setnat(r->rtp, (r->nat == SIP_NAT_ALWAYS));
1227 ast_log(LOG_DEBUG, "Setting NAT on VRTP to %d\n", (r->nat == SIP_NAT_ALWAYS));
1228 ast_rtp_setnat(r->vrtp, (r->nat == SIP_NAT_ALWAYS));
1230 strncpy(r->peername, p->username, sizeof(r->peername)-1);
1231 strncpy(r->authname, p->username, sizeof(r->authname)-1);
1232 strncpy(r->peersecret, p->secret, sizeof(r->peersecret)-1);
1233 strncpy(r->peermd5secret, p->md5secret, sizeof(r->peermd5secret)-1);
1234 strncpy(r->username, p->username, sizeof(r->username)-1);
1235 strncpy(r->tohost, p->tohost, sizeof(r->tohost)-1);
1236 if (ast_strlen_zero(r->tohost)) {
1237 if (p->addr.sin_addr.s_addr)
1238 snprintf(r->tohost, sizeof(r->tohost), ast_inet_ntoa(iabuf, sizeof(iabuf), p->addr.sin_addr));
1240 snprintf(r->tohost, sizeof(r->tohost), ast_inet_ntoa(iabuf, sizeof(iabuf), p->defaddr.sin_addr));
1242 if (!ast_strlen_zero(p->fromdomain))
1243 strncpy(r->fromdomain, p->fromdomain, sizeof(r->fromdomain)-1);
1244 if (!ast_strlen_zero(p->fromuser))
1245 strncpy(r->fromuser, p->fromuser, sizeof(r->fromuser)-1);
1246 r->insecure = p->insecure;
1247 r->canreinvite = p->canreinvite;
1248 r->maxtime = p->maxms;
1249 r->callgroup = p->callgroup;
1250 r->pickupgroup = p->pickupgroup;
1252 r->dtmfmode = p->dtmfmode;
1253 if (r->dtmfmode & SIP_DTMF_RFC2833)
1254 r->noncodeccapability |= AST_RTP_DTMF;
1256 r->noncodeccapability &= ~AST_RTP_DTMF;
1258 r->promiscredir = p->promiscredir;
1259 strncpy(r->context, p->context,sizeof(r->context)-1);
1260 if ((p->addr.sin_addr.s_addr || p->defaddr.sin_addr.s_addr) &&
1261 (!p->maxms || ((p->lastms > 0) && (p->lastms <= p->maxms)))) {
1262 if (p->addr.sin_addr.s_addr) {
1263 r->sa.sin_addr = p->addr.sin_addr;
1264 r->sa.sin_port = p->addr.sin_port;
1266 r->sa.sin_addr = p->defaddr.sin_addr;
1267 r->sa.sin_port = p->defaddr.sin_port;
1269 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1280 ast_mutex_unlock(&peerl.lock);
1282 if ((port=strchr(peer, ':'))) {
1288 portno = atoi(port);
1290 portno = DEFAULT_SIP_PORT;
1295 snprintf(service, sizeof(service), "_sip._udp.%s", peer);
1296 ret = ast_get_srv(NULL, host, sizeof(host), &tportno, service);
1302 hp = ast_gethostbyname(hostn, &ahp);
1304 strncpy(r->tohost, peer, sizeof(r->tohost) - 1);
1305 memcpy(&r->sa.sin_addr, hp->h_addr, sizeof(r->sa.sin_addr));
1306 r->sa.sin_port = htons(portno);
1307 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1310 ast_log(LOG_WARNING, "No such host: %s\n", peer);
1326 /*--- auto_congest: Scheduled congestion on a call ---*/
1327 static int auto_congest(void *nothing)
1329 struct sip_pvt *p = nothing;
1330 ast_mutex_lock(&p->lock);
1333 if (!ast_mutex_trylock(&p->owner->lock)) {
1334 ast_log(LOG_NOTICE, "Auto-congesting %s\n", p->owner->name);
1335 ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
1336 ast_mutex_unlock(&p->owner->lock);
1339 ast_mutex_unlock(&p->lock);
1343 /*--- sip_prefs_free: Free codec list in preference structure ---*/
1344 static void sip_prefs_free(void)
1346 struct sip_codec_pref *cur, *next;
1356 /*--- sip_pref_remove: Remove codec from pref list ---*/
1357 static void sip_pref_remove(int format)
1359 struct sip_codec_pref *cur, *prev=NULL;
1362 if (cur->codec == format) {
1364 prev->next = cur->next;
1375 /*--- sip_pref_append: Append codec to list ---*/
1376 static int sip_pref_append(int format)
1378 struct sip_codec_pref *cur, *tmp;
1379 sip_pref_remove(format);
1380 tmp = (struct sip_codec_pref *)malloc(sizeof(struct sip_codec_pref));
1383 memset(tmp, 0, sizeof(struct sip_codec_pref));
1384 tmp->codec = format;
1395 /*--- sip_codec_choose: Pick a codec ---*/
1396 static int sip_codec_choose(int formats)
1398 struct sip_codec_pref *cur;
1399 formats &= ((AST_FORMAT_MAX_AUDIO << 1) - 1);
1402 if (formats & cur->codec)
1406 return ast_best_codec(formats);
1409 /*--- sip_call: Initiate SIP call from PBX ---*/
1410 /* used from the dial() application */
1411 static int sip_call(struct ast_channel *ast, char *dest, int timeout)
1415 char *vxml_url = NULL;
1416 char *distinctive_ring = NULL;
1417 char *osptoken = NULL;
1419 char *osphandle = NULL;
1421 struct varshead *headp;
1422 struct ast_var_t *current;
1425 if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) {
1426 ast_log(LOG_WARNING, "sip_call called on %s, neither down nor reserved\n", ast->name);
1429 /* Check whether there is vxml_url, distinctive ring variables */
1431 headp=&ast->varshead;
1432 AST_LIST_TRAVERSE(headp,current,entries) {
1433 /* Check whether there is a VXML_URL variable */
1434 if (strcasecmp(ast_var_name(current),"VXML_URL")==0)
1436 vxml_url = ast_var_value(current);
1438 /* Check whether there is a ALERT_INFO variable */
1439 if (strcasecmp(ast_var_name(current),"ALERT_INFO")==0)
1441 distinctive_ring = ast_var_value(current);
1444 else if (!strcasecmp(ast_var_name(current), "OSPTOKEN")) {
1445 osptoken = ast_var_value(current);
1446 } else if (!strcasecmp(ast_var_name(current), "OSPHANDLE")) {
1447 osphandle = ast_var_value(current);
1455 if (!osptoken || !osphandle || (sscanf(osphandle, "%i", &p->osphandle) != 1)) {
1456 /* Force Disable OSP support */
1462 ast_log(LOG_DEBUG, "Outgoing Call for %s\n", p->username);
1463 res = update_user_counter(p,INC_OUT_USE);
1465 p->restrictcid = ast->restrictcid;
1466 p->jointcapability = p->capability;
1467 transmit_invite(p, "INVITE", 1, NULL, NULL, vxml_url,distinctive_ring, osptoken, 1);
1469 /* Initialize auto-congest time */
1470 p->initid = ast_sched_add(sched, p->maxtime * 4, auto_congest, p);
1476 /*--- __sip_destroy: Execute destrucion of call structure, release memory---*/
1477 static void __sip_destroy(struct sip_pvt *p, int lockowner)
1479 struct sip_pvt *cur, *prev = NULL;
1481 struct sip_history *hist;
1483 if (sip_debug_test_pvt(p))
1484 ast_verbose("Destroying call '%s'\n", p->callid);
1485 if (p->stateid > -1)
1486 ast_extension_state_del(p->stateid, NULL);
1488 ast_sched_del(sched, p->initid);
1489 if (p->autokillid > -1)
1490 ast_sched_del(sched, p->autokillid);
1493 ast_rtp_destroy(p->rtp);
1496 ast_rtp_destroy(p->vrtp);
1499 free_old_route(p->route);
1503 /* Carefully unlink from registry */
1504 struct sip_registry *reg;
1505 ast_mutex_lock(®l.lock);
1506 reg = regl.registrations;
1508 if ((reg == p->registry) && (p->registry->call == p))
1509 p->registry->call=NULL;
1512 ast_mutex_unlock(®l.lock);
1514 /* Unlink us from the owner if we have one */
1517 ast_mutex_lock(&p->owner->lock);
1518 ast_log(LOG_DEBUG, "Detaching from %s\n", p->owner->name);
1519 p->owner->pvt->pvt = NULL;
1521 ast_mutex_unlock(&p->owner->lock);
1526 p->history = p->history->next;
1533 prev->next = cur->next;
1542 ast_log(LOG_WARNING, "%p is not in list?!?! \n", cur);
1545 ast_sched_del(sched, p->initid);
1546 while((cp = p->packets)) {
1547 p->packets = p->packets->next;
1548 if (cp->retransid > -1)
1549 ast_sched_del(sched, cp->retransid);
1552 ast_mutex_destroy(&p->lock);
1557 /*--- update_user_counter: Handle incominglimit and outgoinglimit for SIP users ---*/
1558 /* Note: This is going to be replaced by app_groupcount */
1559 static int update_user_counter(struct sip_pvt *fup, int event)
1561 char name[256] = "";
1563 strncpy(name, fup->username, sizeof(name) - 1);
1564 ast_mutex_lock(&userl.lock);
1565 u = find_user(name);
1567 ast_log(LOG_DEBUG, "%s is not a local user\n", name);
1568 ast_mutex_unlock(&userl.lock);
1572 /* incoming and outgoing affects the inUse counter */
1575 if ( u->inUse > 0 ) {
1583 if (u->incominglimit > 0 ) {
1584 if (u->inUse >= u->incominglimit) {
1585 ast_log(LOG_ERROR, "Call from user '%s' rejected due to usage limit of %d\n", u->name, u->incominglimit);
1586 /* inc inUse as well */
1587 if ( event == INC_OUT_USE ) {
1590 ast_mutex_unlock(&userl.lock);
1595 ast_log(LOG_DEBUG, "Call from user '%s' is %d out of %d\n", u->name, u->inUse, u->incominglimit);
1597 /* we don't use these anymore
1599 if ( u->outUse > 0 ) {
1606 if ( u->outgoinglimit > 0 ) {
1607 if ( u->outUse >= u->outgoinglimit ) {
1608 ast_log(LOG_ERROR, "Outgoing call from user '%s' rejected due to usage limit of %d\n", u->name, u->outgoinglimit);
1609 ast_mutex_unlock(&userl.lock);
1617 ast_log(LOG_ERROR, "update_user_counter(%s,%d) called with no event!\n",u->name,event);
1619 ast_mutex_unlock(&userl.lock);
1623 /*--- sip_destroy: Destroy SIP call structure ---*/
1624 static void sip_destroy(struct sip_pvt *p)
1626 ast_mutex_lock(&iflock);
1627 __sip_destroy(p, 1);
1628 ast_mutex_unlock(&iflock);
1632 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal);
1634 static int hangup_sip2cause(int cause)
1636 /* Possible values from causes.h
1637 AST_CAUSE_NOTDEFINED AST_CAUSE_NORMAL AST_CAUSE_BUSY
1638 AST_CAUSE_FAILURE AST_CAUSE_CONGESTION AST_CAUSE_UNALLOCATED
1642 case 404: /* Not found */
1643 return AST_CAUSE_UNALLOCATED;
1644 case 483: /* Too many hops */
1645 return AST_CAUSE_FAILURE;
1647 return AST_CAUSE_BUSY;
1649 return AST_CAUSE_NORMAL;
1655 static char *hangup_cause2sip(int cause)
1659 case AST_CAUSE_FAILURE:
1660 return "500 Server internal failure";
1661 case AST_CAUSE_CONGESTION:
1662 return "503 Service Unavailable";
1663 case AST_CAUSE_BUSY:
1672 /*--- sip_hangup: Hangup SIP call */
1673 static int sip_hangup(struct ast_channel *ast)
1675 struct sip_pvt *p = ast->pvt->pvt;
1677 int needdestroy = 0;
1679 ast_log(LOG_DEBUG, "sip_hangup(%s)\n", ast->name);
1680 if (!ast->pvt->pvt) {
1681 ast_log(LOG_DEBUG, "Asked to hangup channel not connected\n");
1684 ast_mutex_lock(&p->lock);
1686 if ((p->osphandle > -1) && (ast->_state == AST_STATE_UP)) {
1687 ast_osp_terminate(p->osphandle, AST_CAUSE_NORMAL, p->ospstart, time(NULL) - p->ospstart);
1690 if ( p->outgoing ) {
1691 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement outUse counter\n", p->username);
1692 update_user_counter(p, DEC_OUT_USE);
1694 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement inUse counter\n", p->username);
1695 update_user_counter(p, DEC_IN_USE);
1697 /* Determine how to disconnect */
1698 if (p->owner != ast) {
1699 ast_log(LOG_WARNING, "Huh? We aren't the owner?\n");
1700 ast_mutex_unlock(&p->lock);
1703 if (!ast || (ast->_state != AST_STATE_UP))
1708 ast_dsp_free(p->vad);
1711 ast->pvt->pvt = NULL;
1713 ast_mutex_lock(&usecnt_lock);
1715 ast_mutex_unlock(&usecnt_lock);
1716 ast_update_use_count();
1719 /* Start the process if it's not already started */
1720 if (!p->alreadygone && !ast_strlen_zero(p->initreq.data)) {
1723 transmit_request_with_auth(p, "CANCEL", p->ocseq, 1, 0);
1724 /* Actually don't destroy us yet, wait for the 487 on our original
1725 INVITE, but do set an autodestruct just in case we never get it. */
1727 sip_scheddestroy(p, 15000);
1728 if ( p->initid != -1 ) {
1729 /* channel still up - reverse dec of inUse counter
1730 only if the channel is not auto-congested */
1731 if ( p->outgoing ) {
1732 update_user_counter(p, INC_OUT_USE);
1735 update_user_counter(p, INC_IN_USE);
1740 if (ast->hangupcause && ((res = hangup_cause2sip(ast->hangupcause)))) {
1741 transmit_response_reliable(p, res, &p->initreq, 1);
1743 transmit_response_reliable(p, "403 Forbidden", &p->initreq, 1);
1746 if (!p->pendinginvite) {
1748 transmit_request_with_auth(p, "BYE", 0, 1, 1);
1750 /* Note we will need a BYE when this all settles out
1751 but we can't send one while we have "INVITE" outstanding. */
1753 p->needreinvite = 0;
1757 p->needdestroy = needdestroy;
1758 ast_mutex_unlock(&p->lock);
1762 /*--- sip_answer: Answer SIP call , send 200 OK on Invite */
1763 static int sip_answer(struct ast_channel *ast)
1767 struct sip_pvt *p = ast->pvt->pvt;
1769 ast_mutex_lock(&p->lock);
1770 if (ast->_state != AST_STATE_UP) {
1775 codec=pbx_builtin_getvar_helper(p->owner,"SIP_CODEC");
1777 fmt=ast_getformatbyname(codec);
1779 ast_log(LOG_NOTICE, "Changing codec to '%s' for this call because of ${SIP_CODEC) variable\n",codec);
1780 p->jointcapability=fmt;
1781 } else ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because of unrecognized/not configured codec (check allow/disallow in sip.conf): %s\n",codec);
1784 ast_setstate(ast, AST_STATE_UP);
1786 ast_log(LOG_DEBUG, "sip_answer(%s)\n", ast->name);
1787 res = transmit_response_with_sdp(p, "200 OK", &p->initreq, 1);
1789 ast_mutex_unlock(&p->lock);
1793 /*--- sip_write: Send response, support audio media ---*/
1794 static int sip_write(struct ast_channel *ast, struct ast_frame *frame)
1796 struct sip_pvt *p = ast->pvt->pvt;
1798 if (frame->frametype == AST_FRAME_VOICE) {
1799 if (!(frame->subclass & ast->nativeformats)) {
1800 ast_log(LOG_WARNING, "Asked to transmit frame type %d, while native formats is %d (read/write = %d/%d)\n",
1801 frame->subclass, ast->nativeformats, ast->readformat, ast->writeformat);
1805 ast_mutex_lock(&p->lock);
1807 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1808 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1811 res = ast_rtp_write(p->rtp, frame);
1813 ast_mutex_unlock(&p->lock);
1815 } else if (frame->frametype == AST_FRAME_VIDEO) {
1817 ast_mutex_lock(&p->lock);
1819 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1820 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1823 res = ast_rtp_write(p->vrtp, frame);
1825 ast_mutex_unlock(&p->lock);
1827 } else if (frame->frametype == AST_FRAME_IMAGE) {
1830 ast_log(LOG_WARNING, "Can't send %d type frames with SIP write\n", frame->frametype);
1837 /*--- sip_fixup: Fix up a channel: If a channel is consumed, this is called.
1838 Basically update any ->owner links ----*/
1839 static int sip_fixup(struct ast_channel *oldchan, struct ast_channel *newchan)
1841 struct sip_pvt *p = newchan->pvt->pvt;
1842 ast_mutex_lock(&p->lock);
1843 if (p->owner != oldchan) {
1844 ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, p->owner);
1845 ast_mutex_unlock(&p->lock);
1849 ast_mutex_unlock(&p->lock);
1853 /*--- sip_senddigit: Send DTMF character on SIP channel */
1854 /* within one call, we're able to transmit in many methods simultaneously */
1855 static int sip_senddigit(struct ast_channel *ast, char digit)
1857 struct sip_pvt *p = ast->pvt->pvt;
1858 if (p && (p->dtmfmode & SIP_DTMF_INFO)) {
1859 transmit_info_with_digit(p, digit);
1861 if (p && p->rtp && (p->dtmfmode & SIP_DTMF_RFC2833)) {
1862 ast_rtp_senddigit(p->rtp, digit);
1864 /* If in-band DTMF is desired, send that */
1865 if (p->dtmfmode & SIP_DTMF_INBAND)
1871 /*--- sip_transfer: Transfer SIP call */
1872 static int sip_transfer(struct ast_channel *ast, char *dest)
1874 struct sip_pvt *p = ast->pvt->pvt;
1876 res = transmit_refer(p, dest);
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;
1887 case AST_CONTROL_RINGING:
1888 if (ast->_state == AST_STATE_RING) {
1890 transmit_response(p, "180 Ringing", &p->initreq);
1892 if (!p->progressinband)
1895 /* Oops, we've sent progress tones. Let Asterisk do it instead */
1899 case AST_CONTROL_BUSY:
1900 if (ast->_state != AST_STATE_UP) {
1901 transmit_response(p, "486 Busy Here", &p->initreq);
1903 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1907 case AST_CONTROL_CONGESTION:
1908 if (ast->_state != AST_STATE_UP) {
1909 transmit_response(p, "503 Service Unavailable", &p->initreq);
1911 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1915 case AST_CONTROL_PROGRESS:
1916 case AST_CONTROL_PROCEEDING:
1917 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1918 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1926 ast_log(LOG_WARNING, "Don't know how to indicate condition %d\n", condition);
1934 /*--- sip_new: Initiate a call in the SIP channel */
1935 /* called from sip_request_call (calls from the pbx ) */
1936 static struct ast_channel *sip_new(struct sip_pvt *i, int state, char *title)
1938 struct ast_channel *tmp;
1940 ast_mutex_unlock(&i->lock);
1941 /* Don't hold a sip pvt lock while we allocate a channel */
1942 tmp = ast_channel_alloc(1);
1943 ast_mutex_lock(&i->lock);
1945 /* Select our native format based on codec preference until we receive
1946 something from another device to the contrary. */
1947 if (i->jointcapability)
1948 tmp->nativeformats = sip_codec_choose(i->jointcapability);
1949 else if (i->capability)
1950 tmp->nativeformats = sip_codec_choose(i->capability);
1952 tmp->nativeformats = sip_codec_choose(capability);
1953 fmt = ast_best_codec(tmp->nativeformats);
1955 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%04x", title, rand() & 0xffff);
1957 if (strchr(i->fromdomain,':'))
1959 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", strchr(i->fromdomain,':')+1, (int)(long)(i));
1963 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", i->fromdomain, (int)(long)(i));
1966 if (i->dtmfmode & SIP_DTMF_INBAND) {
1967 i->vad = ast_dsp_new();
1968 ast_dsp_set_features(i->vad, DSP_FEATURE_DTMF_DETECT);
1970 ast_dsp_digitmode(i->vad, DSP_DIGITMODE_DTMF | DSP_DIGITMODE_RELAXDTMF);
1972 tmp->fds[0] = ast_rtp_fd(i->rtp);
1973 tmp->fds[1] = ast_rtcp_fd(i->rtp);
1975 tmp->fds[2] = ast_rtp_fd(i->vrtp);
1976 tmp->fds[3] = ast_rtcp_fd(i->vrtp);
1978 if (state == AST_STATE_RING)
1980 tmp->adsicpe = AST_ADSI_UNAVAILABLE;
1981 tmp->writeformat = fmt;
1982 tmp->pvt->rawwriteformat = fmt;
1983 tmp->readformat = fmt;
1984 tmp->pvt->rawreadformat = fmt;
1986 tmp->pvt->send_text = sip_sendtext;
1987 tmp->pvt->call = sip_call;
1988 tmp->pvt->hangup = sip_hangup;
1989 tmp->pvt->answer = sip_answer;
1990 tmp->pvt->read = sip_read;
1991 tmp->pvt->write = sip_write;
1992 tmp->pvt->write_video = sip_write;
1993 tmp->pvt->indicate = sip_indicate;
1994 tmp->pvt->transfer = sip_transfer;
1995 tmp->pvt->fixup = sip_fixup;
1996 tmp->pvt->send_digit = sip_senddigit;
1998 tmp->pvt->bridge = ast_rtp_bridge;
2000 tmp->callgroup = i->callgroup;
2001 tmp->pickupgroup = i->pickupgroup;
2002 tmp->restrictcid = i->restrictcid;
2003 if (!ast_strlen_zero(i->accountcode))
2004 strncpy(tmp->accountcode, i->accountcode, sizeof(tmp->accountcode)-1);
2006 tmp->amaflags = i->amaflags;
2007 if (!ast_strlen_zero(i->language))
2008 strncpy(tmp->language, i->language, sizeof(tmp->language)-1);
2009 if (!ast_strlen_zero(i->musicclass))
2010 strncpy(tmp->musicclass, i->musicclass, sizeof(tmp->musicclass)-1);
2012 ast_mutex_lock(&usecnt_lock);
2014 ast_mutex_unlock(&usecnt_lock);
2015 strncpy(tmp->context, i->context, sizeof(tmp->context)-1);
2016 strncpy(tmp->exten, i->exten, sizeof(tmp->exten)-1);
2017 if (!ast_strlen_zero(i->callerid))
2018 tmp->callerid = strdup(i->callerid);
2019 if (!ast_strlen_zero(i->rdnis))
2020 tmp->rdnis = strdup(i->rdnis);
2021 if (!ast_strlen_zero(i->exten) && strcmp(i->exten, "s"))
2022 tmp->dnid = strdup(i->exten);
2024 if (!ast_strlen_zero(i->domain)) {
2025 pbx_builtin_setvar_helper(tmp, "SIPDOMAIN", i->domain);
2027 if (!ast_strlen_zero(i->useragent)) {
2028 pbx_builtin_setvar_helper(tmp, "SIPUSERAGENT", i->useragent);
2030 if (!ast_strlen_zero(i->callid)) {
2031 pbx_builtin_setvar_helper(tmp, "SIPCALLID", i->callid);
2033 ast_setstate(tmp, state);
2034 if (state != AST_STATE_DOWN) {
2035 if (ast_pbx_start(tmp)) {
2036 ast_log(LOG_WARNING, "Unable to start PBX on %s\n", tmp->name);
2042 ast_log(LOG_WARNING, "Unable to allocate channel structure\n");
2046 static struct cfalias {
2050 { "Content-Type", "c" },
2051 { "Content-Encoding", "e" },
2055 { "Content-Length", "l" },
2058 { "Supported", "k" },
2059 { "Refer-To", "r" },
2060 { "Allow-Events", "u" },
2065 /*--- get_sdp_by_line: Reads one line of SIP message body */
2066 static char* get_sdp_by_line(char* line, char *name, int nameLen) {
2067 if (strncasecmp(line, name, nameLen) == 0 && line[nameLen] == '=') {
2068 char* r = line + nameLen + 1;
2069 while (*r && (*r < 33)) ++r;
2076 /*--- get_sdp: Gets all kind of SIP message bodies, including SDP,
2077 but the name wrongly applies _only_ sdp */
2078 static char *get_sdp(struct sip_request *req, char *name) {
2080 int len = strlen(name);
2083 for (x=0; x<req->lines; x++) {
2084 r = get_sdp_by_line(req->line[x], name, len);
2085 if (r[0] != '\0') return r;
2091 static void sdpLineNum_iterator_init(int* iterator) {
2095 static char* get_sdp_iterate(int* iterator,
2096 struct sip_request *req, char *name) {
2097 int len = strlen(name);
2099 while (*iterator < req->lines) {
2100 r = get_sdp_by_line(req->line[(*iterator)++], name, len);
2101 if (r[0] != '\0') return r;
2106 static char *__get_header(struct sip_request *req, char *name, int *start)
2109 int len = strlen(name);
2111 for (x=*start;x<req->headers;x++) {
2112 if (!strncasecmp(req->header[x], name, len) &&
2113 (req->header[x][len] == ':')) {
2114 r = req->header[x] + len + 1;
2115 while(*r && (*r < 33))
2122 for (x=0;x<sizeof(aliases) / sizeof(aliases[0]); x++)
2123 if (!strcasecmp(aliases[x].fullname, name))
2124 return __get_header(req, aliases[x].shortname, start);
2126 /* Don't return NULL, so get_header is always a valid pointer */
2130 /*--- get_header: Get header from SIP request ---*/
2131 static char *get_header(struct sip_request *req, char *name)
2134 return __get_header(req, name, &start);
2137 /*--- sip_rtp_read: Read RTP from network ---*/
2138 static struct ast_frame *sip_rtp_read(struct ast_channel *ast, struct sip_pvt *p)
2140 /* Retrieve audio/etc from channel. Assumes p->lock is already held. */
2141 struct ast_frame *f;
2142 static struct ast_frame null_frame = { AST_FRAME_NULL, };
2145 f = ast_rtp_read(p->rtp); /* RTP Audio */
2148 f = ast_rtcp_read(p->rtp); /* RTCP Control Channel */
2151 f = ast_rtp_read(p->vrtp); /* RTP Video */
2154 f = ast_rtcp_read(p->vrtp); /* RTCP Control Channel for video */
2159 /* Don't send RFC2833 if we're not supposed to */
2160 if (f && (f->frametype == AST_FRAME_DTMF) && !(p->dtmfmode & SIP_DTMF_RFC2833))
2163 /* We already hold the channel lock */
2164 if (f->frametype == AST_FRAME_VOICE) {
2165 if (f->subclass != p->owner->nativeformats) {
2166 ast_log(LOG_DEBUG, "Oooh, format changed to %d\n", f->subclass);
2167 p->owner->nativeformats = f->subclass;
2168 ast_set_read_format(p->owner, p->owner->readformat);
2169 ast_set_write_format(p->owner, p->owner->writeformat);
2171 if ((p->dtmfmode & SIP_DTMF_INBAND) && p->vad) {
2172 f = ast_dsp_process(p->owner,p->vad,f);
2173 if (f && (f->frametype == AST_FRAME_DTMF))
2174 ast_log(LOG_DEBUG, "Detected DTMF '%c'\n", f->subclass);
2181 /*--- sip_read: Read SIP RTP from channel */
2182 static struct ast_frame *sip_read(struct ast_channel *ast)
2184 struct ast_frame *fr;
2185 struct sip_pvt *p = ast->pvt->pvt;
2186 ast_mutex_lock(&p->lock);
2187 fr = sip_rtp_read(ast, p);
2188 time(&p->lastrtprx);
2189 ast_mutex_unlock(&p->lock);
2193 /*--- build_callid: Build SIP CALLID header ---*/
2194 static void build_callid(char *callid, int len, struct in_addr ourip)
2199 char iabuf[INET_ADDRSTRLEN];
2202 res = snprintf(callid, len, "%08x", val);
2206 /* It's not important that we really use our right IP here... */
2207 snprintf(callid, len, "@%s", ast_inet_ntoa(iabuf, sizeof(iabuf), ourip));
2210 /*--- sip_alloc: Allocate SIP_PVT structure and set defaults ---*/
2211 static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useglobalnat)
2214 char iabuf[INET_ADDRSTRLEN];
2216 p = malloc(sizeof(struct sip_pvt));
2219 /* Keep track of stuff */
2220 memset(p, 0, sizeof(struct sip_pvt));
2221 ast_mutex_init(&p->lock);
2228 p->rtp = ast_rtp_new(sched, io, 1, 0);
2230 p->vrtp = ast_rtp_new(sched, io, 1, 0);
2234 /* Start with 101 instead of 1 */
2237 ast_log(LOG_WARNING, "Unable to create RTP session: %s\n", strerror(errno));
2238 ast_mutex_destroy(&p->lock);
2242 ast_rtp_settos(p->rtp, tos);
2244 ast_rtp_settos(p->vrtp, tos);
2245 if (useglobalnat && sin) {
2246 /* Setup NAT structure according to global settings if we have an address */
2248 memcpy(&p->recv, sin, sizeof(p->recv));
2249 ast_rtp_setnat(p->rtp, (p->nat == SIP_NAT_ALWAYS));
2251 ast_rtp_setnat(p->vrtp, (p->nat == SIP_NAT_ALWAYS));
2255 memcpy(&p->sa, sin, sizeof(p->sa));
2256 if (ast_sip_ouraddrfor(&p->sa.sin_addr,&p->ourip))
2257 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2259 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2261 /* z9hG4bK is a magic cookie. See RFC 3261 section 8.1.1.7 */
2262 if (p->nat != SIP_NAT_NEVER)
2263 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);
2265 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);
2267 build_callid(p->callid, sizeof(p->callid), p->ourip);
2269 strncpy(p->callid, callid, sizeof(p->callid) - 1);
2270 /* Assume reinvite OK and via INVITE */
2271 p->canreinvite = globalcanreinvite;
2272 /* Assign default music on hold class */
2273 strncpy(p->musicclass, globalmusicclass, sizeof(p->musicclass));
2274 p->dtmfmode = globaldtmfmode;
2275 p->promiscredir = globalpromiscredir;
2276 p->trustrpid = globaltrustrpid;
2277 p->progressinband = globalprogressinband;
2279 p->ospauth = globalospauth;
2281 p->rtptimeout = globalrtptimeout;
2282 p->rtpholdtimeout = globalrtpholdtimeout;
2283 p->capability = capability;
2284 if (p->dtmfmode & SIP_DTMF_RFC2833)
2285 p->noncodeccapability |= AST_RTP_DTMF;
2286 strncpy(p->context, context, sizeof(p->context) - 1);
2287 strncpy(p->fromdomain, fromdomain, sizeof(p->fromdomain) - 1);
2289 ast_mutex_lock(&iflock);
2292 ast_mutex_unlock(&iflock);
2294 ast_log(LOG_DEBUG, "Allocating new SIP call for %s\n", callid);
2298 /*--- find_call: Connect incoming SIP message to current call or create new call structure */
2299 /* Called by handle_request ,sipsock_read */
2300 static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *sin)
2305 char iabuf[INET_ADDRSTRLEN];
2309 callid = get_header(req, "Call-ID");
2311 if (pedanticsipchecking) {
2312 /* In principle Call-ID's uniquely identify a call, however some vendors
2313 (i.e. Pingtel) send multiple calls with the same Call-ID and different
2314 tags in order to simplify billing. The RFC does state that we have to
2315 compare tags in addition to the call-id, but this generate substantially
2316 more overhead which is totally unnecessary for the vast majority of sane
2317 SIP implementations, and thus Asterisk does not enable this behavior
2318 by default. Short version: You'll need this option to support conferencing
2320 strncpy(tmp, req->header[0], sizeof(tmp) - 1);
2322 c = strchr(tmp, ' ');
2325 if (!strcasecmp(cmd, "SIP/2.0")) {
2331 strncpy(tmp, get_header(req, "From"), sizeof(tmp) - 1);
2333 strncpy(tmp, get_header(req, "To"), sizeof(tmp) - 1);
2334 tag = strstr(tmp, "tag=");
2337 c = strchr(tag, ';');
2344 if (ast_strlen_zero(callid)) {
2345 ast_log(LOG_WARNING, "Call missing call ID from '%s'\n", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr));
2348 ast_mutex_lock(&iflock);
2351 if (!strcmp(p->callid, callid) &&
2352 (!pedanticsipchecking || !tag || ast_strlen_zero(p->theirtag) || !strcmp(p->theirtag, tag))) {
2353 /* Found the call */
2354 ast_mutex_lock(&p->lock);
2355 ast_mutex_unlock(&iflock);
2360 ast_mutex_unlock(&iflock);
2361 p = sip_alloc(callid, sin, 1);
2363 ast_mutex_lock(&p->lock);
2367 /*--- sip_register: Parse register=> line in sip.conf and add to registry */
2368 static int sip_register(char *value, int lineno)
2370 struct sip_registry *reg;
2371 char copy[256] = "";
2372 char *username=NULL, *hostname=NULL, *secret=NULL, *authuser=NULL;
2378 struct ast_hostent ahp;
2381 strncpy(copy, value, sizeof(copy)-1);
2384 hostname = strrchr(stringp, '@');
2389 if (!username || ast_strlen_zero(username) || !hostname || ast_strlen_zero(hostname)) {
2390 ast_log(LOG_WARNING, "Format for registration is user[:secret[:authuser]]@host[:port][/contact] at line %d", lineno);
2394 username = strsep(&stringp, ":");
2396 secret = strsep(&stringp, ":");
2398 authuser = strsep(&stringp, ":");
2401 hostname = strsep(&stringp, "/");
2403 contact = strsep(&stringp, "/");
2404 if (!contact || ast_strlen_zero(contact))
2407 hostname = strsep(&stringp, ":");
2408 porta = strsep(&stringp, ":");
2410 if (porta && !atoi(porta)) {
2411 ast_log(LOG_WARNING, "%s is not a valid port number at line %d\n", porta, lineno);
2414 hp = ast_gethostbyname(hostname, &ahp);
2416 ast_log(LOG_WARNING, "Host '%s' not found at line %d\n", hostname, lineno);
2419 reg = malloc(sizeof(struct sip_registry));
2421 memset(reg, 0, sizeof(struct sip_registry));
2422 strncpy(reg->contact, contact, sizeof(reg->contact) - 1);
2424 strncpy(reg->username, username, sizeof(reg->username)-1);
2426 strncpy(reg->hostname, hostname, sizeof(reg->hostname)-1);
2428 strncpy(reg->authuser, authuser, sizeof(reg->authuser)-1);
2430 strncpy(reg->secret, secret, sizeof(reg->secret)-1);
2433 reg->refresh = default_expiry;
2434 reg->addr.sin_family = AF_INET;
2435 memcpy(®->addr.sin_addr, hp->h_addr, sizeof(®->addr.sin_addr));
2436 reg->addr.sin_port = porta ? htons(atoi(porta)) : htons(DEFAULT_SIP_PORT);
2437 reg->callid_valid = 0;
2439 ast_mutex_lock(®l.lock);
2440 reg->next = regl.registrations;
2441 regl.registrations = reg;
2442 ast_mutex_unlock(®l.lock);
2444 ast_log(LOG_ERROR, "Out of memory\n");
2450 /*--- lws2sws: Parse multiline SIP headers into one header */
2451 /* This is enabled if pedanticsipchecking is enabled */
2452 static int lws2sws(char *msgbuf, int len)
2458 /* Eliminate all CRs */
2459 if (msgbuf[h] == '\r') {
2463 /* Check for end-of-line */
2464 if (msgbuf[h] == '\n') {
2465 /* Check for end-of-message */
2468 /* Check for a continuation line */
2469 if (msgbuf[h + 1] == ' ') {
2470 /* Merge continuation line */
2474 /* Propagate LF and start new line */
2475 msgbuf[t++] = msgbuf[h++];
2480 if (msgbuf[h] == ' ' || msgbuf[h] == '\t') {
2485 msgbuf[t++] = msgbuf[h++];
2489 msgbuf[t++] = msgbuf[h++];
2497 /*--- parse: Parse a SIP message ----*/
2498 static void parse(struct sip_request *req)
2500 /* Divide fields by NULL's */
2505 /* First header starts immediately */
2509 /* We've got a new header */
2513 printf("Header: %s (%d)\n", req->header[f], strlen(req->header[f]));
2515 if (ast_strlen_zero(req->header[f])) {
2516 /* Line by itself means we're now in content */
2520 if (f >= SIP_MAX_HEADERS - 1) {
2521 ast_log(LOG_WARNING, "Too many SIP headers...\n");
2524 req->header[f] = c + 1;
2525 } else if (*c == '\r') {
2526 /* Ignore but eliminate \r's */
2531 /* Check for last header */
2532 if (!ast_strlen_zero(req->header[f]))
2535 /* Now we process any mime content */
2540 /* We've got a new line */
2543 printf("Line: %s (%d)\n", req->line[f], strlen(req->line[f]));
2545 if (f >= SIP_MAX_LINES - 1) {
2546 ast_log(LOG_WARNING, "Too many SDP lines...\n");
2549 req->line[f] = c + 1;
2550 } else if (*c == '\r') {
2551 /* Ignore and eliminate \r's */
2556 /* Check for last line */
2557 if (!ast_strlen_zero(req->line[f]))
2561 ast_log(LOG_WARNING, "Odd content, extra stuff left over ('%s')\n", c);
2564 /*--- process_sdp: Process SIP SDP ---*/
2565 static int process_sdp(struct sip_pvt *p, struct sip_request *req)
2571 char iabuf[INET_ADDRSTRLEN];
2575 int peercapability, peernoncodeccapability;
2576 int vpeercapability=0, vpeernoncodeccapability=0;
2577 struct sockaddr_in sin;
2580 struct ast_hostent ahp;
2585 int debug=sip_debug_test_pvt(p);
2587 /* Update our last rtprx when we receive an SDP, too */
2588 time(&p->lastrtprx);
2590 /* Get codec and RTP info from SDP */
2591 if (strcasecmp(get_header(req, "Content-Type"), "application/sdp")) {
2592 ast_log(LOG_NOTICE, "Content is '%s', not 'application/sdp'\n", get_header(req, "Content-Type"));
2595 m = get_sdp(req, "m");
2596 c = get_sdp(req, "c");
2597 if (ast_strlen_zero(m) || ast_strlen_zero(c)) {
2598 ast_log(LOG_WARNING, "Insufficient information for SDP (m = '%s', c = '%s')\n", m, c);
2601 if (sscanf(c, "IN IP4 %256s", host) != 1) {
2602 ast_log(LOG_WARNING, "Invalid host in c= line, '%s'\n", c);
2605 /* XXX This could block for a long time, and block the main thread! XXX */
2606 hp = ast_gethostbyname(host, &ahp);
2608 ast_log(LOG_WARNING, "Unable to lookup host in c= line, '%s'\n", c);
2611 sdpLineNum_iterator_init(&iterator);
2612 while ((m = get_sdp_iterate(&iterator, req, "m"))[0] != '\0') {
2613 if ((sscanf(m, "audio %d RTP/AVP %n", &x, &len) == 1)) {
2615 /* Scan through the RTP payload types specified in a "m=" line: */
2616 ast_rtp_pt_clear(p->rtp);
2618 while(!ast_strlen_zero(codecs)) {
2619 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2620 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2624 ast_verbose("Found RTP audio format %d\n", codec);
2625 ast_rtp_set_m_type(p->rtp, codec);
2627 /* Skip over any whitespace */
2628 while(*codecs && (*codecs < 33)) codecs++;
2632 ast_rtp_pt_clear(p->vrtp); /* Must be cleared in case no m=video line exists */
2634 if (p->vrtp && (sscanf(m, "video %d RTP/AVP %n", &x, &len) == 1)) {
2636 /* Scan through the RTP payload types specified in a "m=" line: */
2638 while(!ast_strlen_zero(codecs)) {
2639 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2640 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2644 ast_verbose("Found video format %s\n", ast_getformatname(codec));
2645 ast_rtp_set_m_type(p->vrtp, codec);
2647 /* Skip over any whitespace */
2648 while(*codecs && (*codecs < 33)) codecs++;
2653 /* RTP addresses and ports for audio and video */
2654 sin.sin_family = AF_INET;
2655 memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
2656 /* Setup audio port number */
2657 sin.sin_port = htons(portno);
2658 if (p->rtp && sin.sin_port)
2659 ast_rtp_set_peer(p->rtp, &sin);
2660 /* Setup video port number */
2661 sin.sin_port = htons(vportno);
2662 if (p->vrtp && sin.sin_port)
2663 ast_rtp_set_peer(p->vrtp, &sin);
2666 ast_verbose("Peer RTP is at port %s:%d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2668 /* Next, scan through each "a=rtpmap:" line, noting each
2669 * specified RTP payload type (with corresponding MIME subtype):
2671 sdpLineNum_iterator_init(&iterator);
2672 while ((a = get_sdp_iterate(&iterator, req, "a"))[0] != '\0') {
2673 char* mimeSubtype = ast_strdupa(a); /* ensures we have enough space */
2674 if (!strcasecmp(a, "sendonly")) {
2678 if (!strcasecmp(a, "sendrecv")) {
2681 if (sscanf(a, "rtpmap: %u %[^/]/", &codec, mimeSubtype) != 2) continue;
2683 ast_verbose("Found description format %s\n", mimeSubtype);
2684 /* Note: should really look at the 'freq' and '#chans' params too */
2685 ast_rtp_set_rtpmap_type(p->rtp, codec, "audio", mimeSubtype);
2687 ast_rtp_set_rtpmap_type(p->vrtp, codec, "video", mimeSubtype);
2690 /* Now gather all of the codecs that were asked for: */
2691 ast_rtp_get_current_formats(p->rtp,
2692 &peercapability, &peernoncodeccapability);
2694 ast_rtp_get_current_formats(p->vrtp,
2695 &vpeercapability, &vpeernoncodeccapability);
2696 p->jointcapability = p->capability & (peercapability | vpeercapability);
2697 p->noncodeccapability = noncodeccapability & (peernoncodeccapability | vpeernoncodeccapability);
2700 const unsigned slen=80;
2701 char s1[slen], s2[slen], s3[slen], s4[slen];
2703 ast_verbose("Capabilities: us - %s, peer - audio=%s/video=%s, combined - %s\n",
2704 ast_getformatname_multiple(s1, slen, p->capability),
2705 ast_getformatname_multiple(s2, slen, peercapability),
2706 ast_getformatname_multiple(s3, slen, vpeercapability),
2707 ast_getformatname_multiple(s4, slen, p->jointcapability));
2709 ast_verbose("Non-codec capabilities: us - %s, peer - %s, combined - %s\n",
2710 ast_getformatname_multiple(s1, slen, noncodeccapability),
2711 ast_getformatname_multiple(s2, slen, peernoncodeccapability),
2712 ast_getformatname_multiple(s3, slen, p->noncodeccapability));
2714 if (!p->jointcapability) {
2715 ast_log(LOG_WARNING, "No compatible codecs!\n");
2719 if (!(p->owner->nativeformats & p->jointcapability)) {
2720 const unsigned slen=80;
2721 char s1[slen], s2[slen];
2722 ast_log(LOG_DEBUG, "Oooh, we need to change our formats since our peer supports only %s and not %s\n",
2723 ast_getformatname_multiple(s1, slen, p->jointcapability),
2724 ast_getformatname_multiple(s2, slen, p->owner->nativeformats));
2725 p->owner->nativeformats = sip_codec_choose(p->jointcapability);
2726 ast_set_read_format(p->owner, p->owner->readformat);
2727 ast_set_write_format(p->owner, p->owner->writeformat);
2729 if (p->owner->bridge) {
2730 /* Turn on/off music on hold if we are holding/unholding */
2731 if (sin.sin_addr.s_addr && !sendonly) {
2732 ast_moh_stop(p->owner->bridge);
2734 ast_moh_start(p->owner->bridge, NULL);
2742 /*--- add_header: Add header to SIP message */
2743 static int add_header(struct sip_request *req, char *var, char *value)
2745 if (req->len >= sizeof(req->data) - 4) {
2746 ast_log(LOG_WARNING, "Out of space, can't add anymore (%s:%s)\n", var, value);
2750 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2753 req->header[req->headers] = req->data + req->len;
2754 snprintf(req->header[req->headers], sizeof(req->data) - req->len - 4, "%s: %s\r\n", var, value);
2755 req->len += strlen(req->header[req->headers]);
2756 if (req->headers < SIP_MAX_HEADERS)
2759 ast_log(LOG_WARNING, "Out of header space\n");
2765 /*--- add_blank_header: Add blank header to SIP message */
2766 static int add_blank_header(struct sip_request *req)
2768 if (req->len >= sizeof(req->data) - 4) {
2769 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2773 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2776 req->header[req->headers] = req->data + req->len;
2777 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "\r\n");
2778 req->len += strlen(req->header[req->headers]);
2779 if (req->headers < SIP_MAX_HEADERS)
2782 ast_log(LOG_WARNING, "Out of header space\n");
2788 /*--- add_line: Add content (not header) to SIP message */
2789 static int add_line(struct sip_request *req, char *line)
2791 if (req->len >= sizeof(req->data) - 4) {
2792 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2796 /* Add extra empty return */
2797 snprintf(req->data + req->len, sizeof(req->data) - req->len, "\r\n");
2798 req->len += strlen(req->data + req->len);
2800 req->line[req->lines] = req->data + req->len;
2801 snprintf(req->line[req->lines], sizeof(req->data) - req->len, "%s", line);
2802 req->len += strlen(req->line[req->lines]);
2803 if (req->lines < SIP_MAX_LINES)
2806 ast_log(LOG_WARNING, "Out of line space\n");
2812 /*--- copy_header: Copy one header field from one request to another */
2813 static int copy_header(struct sip_request *req, struct sip_request *orig, char *field)
2816 tmp = get_header(orig, field);
2817 if (!ast_strlen_zero(tmp)) {
2818 /* Add what we're responding to */
2819 return add_header(req, field, tmp);
2821 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2825 /*--- copy_all_header: Copy all headers from one request to another ---*/
2826 static int copy_all_header(struct sip_request *req, struct sip_request *orig, char *field)
2832 tmp = __get_header(orig, field, &start);
2833 if (!ast_strlen_zero(tmp)) {
2834 /* Add what we're responding to */
2835 add_header(req, field, tmp);
2840 return copied ? 0 : -1;
2843 /*--- copy_via_headers: Copy SIP VIA Headers from one request to another ---*/
2844 static int copy_via_headers(struct sip_pvt *p, struct sip_request *req, struct sip_request *orig, char *field)
2846 char tmp[256]="", *oh, *end;
2850 char iabuf[INET_ADDRSTRLEN];
2852 oh = __get_header(orig, field, &start);
2853 if (!ast_strlen_zero(oh)) {
2855 strncpy(tmp, oh, sizeof(tmp) - 1);
2856 oh = strstr(tmp, ";rport");
2858 end = strchr(oh + 1, ';');
2860 memmove(oh, end, strlen(end) + 1);
2864 if (!copied && (p->nat == SIP_NAT_ALWAYS)) {
2865 /* Whoo hoo! Now we can indicate port address translation too! Just
2866 another RFC (RFC3581). I'll leave the original comments in for
2868 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));
2869 add_header(req, field, new);
2871 /* Add what we're responding to */
2872 add_header(req, field, tmp);
2879 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2885 /*--- add_route: Add route header into request per learned route ---*/
2886 static void add_route(struct sip_request *req, struct sip_route *route)
2889 int n, rem = 255; /* sizeof(r)-1: Room for terminating 0 */
2895 n = strlen(route->hop);
2896 if ((n+3)>rem) break;
2902 strcpy(p, route->hop); p += n;
2905 route = route->next;
2908 add_header(req, "Route", r);
2911 /*--- set_destination: Set destination from SIP URI ---*/
2912 static void set_destination(struct sip_pvt *p, char *uri)
2914 char *h, *maddr, hostname[256];
2915 char iabuf[INET_ADDRSTRLEN];
2918 struct ast_hostent ahp;
2919 int debug=sip_debug_test_pvt(p);
2921 /* Parse uri to h (host) and port - uri is already just the part inside the <> */
2922 /* general form we are expecting is sip[s]:username[:password]@host[:port][;...] */
2925 ast_verbose("set_destination: Parsing <%s> for address/port to send to\n", uri);
2927 /* Find and parse hostname */
2928 h = strchr(uri, '@');
2933 if (strncmp(h, "sip:", 4) == 0)
2935 else if (strncmp(h, "sips:", 5) == 0)
2938 hn = strcspn(h, ":;>");
2940 strncpy(hostname, h, hn); hostname[hn] = '\0';
2943 /* Is "port" present? if not default to 5060 */
2947 port = strtol(h, &h, 10);
2952 /* Got the hostname:port - but maybe there's a "maddr=" to override address? */
2953 maddr = strstr(h, "maddr=");
2956 hn = strspn(maddr, "0123456789.");
2958 strncpy(hostname, maddr, hn); hostname[hn] = '\0';
2961 hp = ast_gethostbyname(hostname, &ahp);
2963 ast_log(LOG_WARNING, "Can't find address for host '%s'\n", hostname);
2966 p->sa.sin_family = AF_INET;
2967 memcpy(&p->sa.sin_addr, hp->h_addr, sizeof(p->sa.sin_addr));
2968 p->sa.sin_port = htons(port);
2970 ast_verbose("set_destination: set destination to %s, port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr), port);
2973 /*--- init_resp: Initialize SIP response, based on SIP request ---*/
2974 static int init_resp(struct sip_request *req, char *resp, struct sip_request *orig)
2976 /* Initialize a response */
2977 if (req->headers || req->len) {
2978 ast_log(LOG_WARNING, "Request already initialized?!?\n");
2981 req->header[req->headers] = req->data + req->len;
2982 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "SIP/2.0 %s\r\n", resp);
2983 req->len += strlen(req->header[req->headers]);
2984 if (req->headers < SIP_MAX_HEADERS)
2987 ast_log(LOG_WARNING, "Out of header space\n");
2991 /*--- init_req: Initialize SIP request ---*/
2992 static int init_req(struct sip_request *req, char *resp, char *recip)
2994 /* Initialize a response */
2995 if (req->headers || req->len) {
2996 ast_log(LOG_WARNING, "Request already initialized?!?\n");
2999 req->header[req->headers] = req->data + req->len;
3000 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "%s %s SIP/2.0\r\n", resp, recip);
3001 req->len += strlen(req->header[req->headers]);
3002 if (req->headers < SIP_MAX_HEADERS)
3005 ast_log(LOG_WARNING, "Out of header space\n");
3010 static int respprep(struct sip_request *resp, struct sip_pvt *p, char *msg, struct sip_request *req)
3012 char newto[256] = "", *ot;
3013 memset(resp, 0, sizeof(*resp));
3014 init_resp(resp, msg, req);
3015 copy_via_headers(p, resp, req, "Via");
3016 if (msg[0] == '2') copy_all_header(resp, req, "Record-Route");
3017 copy_header(resp, req, "From");
3018 ot = get_header(req, "To");
3019 if (!strstr(ot, "tag=")) {
3020 /* Add the proper tag if we don't have it already. If they have specified
3021 their tag, use it. Otherwise, use our own tag */
3022 if (!ast_strlen_zero(p->theirtag) && p->outgoing)
3023 snprintf(newto, sizeof(newto), "%s;tag=%s", ot, p->theirtag);
3024 else if (p->tag && !p->outgoing)
3025 snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag);
3027 strncpy(newto, ot, sizeof(newto) - 1);
3030 add_header(resp, "To", ot);
3031 copy_header(resp, req, "Call-ID");
3032 copy_header(resp, req, "CSeq");
3033 add_header(resp, "User-Agent", useragent);
3034 add_header(resp, "Allow", ALLOWED_METHODS);
3036 /* For registration responses, we also need expiry and
3040 snprintf(contact, sizeof(contact), "%s;expires=%d", p->our_contact, p->expiry);