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>
43 #include <sys/socket.h>
44 #include <sys/ioctl.h>
51 #include <arpa/inet.h>
54 #include <sys/signal.h>
55 #include <netinet/in_systm.h>
56 #include <netinet/ip.h>
58 #ifdef SIP_MYSQL_FRIENDS
60 #include <mysql/mysql.h>
63 #ifndef DEFAULT_USERAGENT
64 #define DEFAULT_USERAGENT "Asterisk PBX"
67 #define VIDEO_CODEC_MASK 0x1fc0000 /* Video codecs from H.261 thru AST_FORMAT_MAX_VIDEO */
69 #define IPTOS_MINCOST 0x02
72 /* #define VOCAL_DATA_HACK */
75 #define DEFAULT_DEFAULT_EXPIRY 120
76 #define DEFAULT_MAX_EXPIRY 3600
78 /* guard limit must be larger than guard secs */
79 /* guard min must be < 1000, and should be >= 250 */
80 #define EXPIRY_GUARD_SECS 15 /* How long before expiry do we reregister */
81 #define EXPIRY_GUARD_LIMIT 30 /* Below here, we use EXPIRY_GUARD_PCT instead of EXPIRY_GUARD_SECS */
82 #define EXPIRY_GUARD_MIN 500 /* This is the minimum guard time applied. If GUARD_PCT turns out
83 to be lower than this, it will use this time instead. This is in
85 #define EXPIRY_GUARD_PCT 0.20 /* Percentage of expires timeout to use when below EXPIRY_GUARD_LIMIT */
88 #define MAX(a,b) ((a) > (b) ? (a) : (b))
91 #define CALLERID_UNKNOWN "Unknown"
93 /* --- Choices for DTMF support in SIP channel */
94 #define SIP_DTMF_RFC2833 (1 << 0)
95 #define SIP_DTMF_INBAND (1 << 1)
96 #define SIP_DTMF_INFO (1 << 2)
98 static int max_expiry = DEFAULT_MAX_EXPIRY;
99 static int default_expiry = DEFAULT_DEFAULT_EXPIRY;
101 #define DEFAULT_MAXMS 2000 /* Must be faster than 2 seconds by default */
102 #define DEFAULT_FREQ_OK 60 * 1000 /* How often to check for the host to be up */
103 #define DEFAULT_FREQ_NOTOK 10 * 1000 /* How often to check, if the host is down... */
105 #define DEFAULT_RETRANS 1000 /* How frequently to retransmit */
106 #define MAX_RETRANS 5 /* Try only 5 times for retransmissions */
108 /* MYSQL_FRIENDS: Check if peer exists in database and read some configuration
109 from databse (not all options supported though) */
111 AST_MUTEX_DEFINE_STATIC(mysqllock);
113 static char mydbuser[80];
114 static char mydbpass[80];
115 static char mydbhost[80];
116 static char mydbname[80];
120 #define DEBUG_READ 0 /* Recieved data */
121 #define DEBUG_SEND 1 /* Transmit data */
123 static char *desc = "Session Initiation Protocol (SIP)";
124 static char *type = "SIP";
125 static char *tdesc = "Session Initiation Protocol (SIP)";
126 static char *config = "sip.conf";
128 #define DEFAULT_SIP_PORT 5060 /* From RFC 2543 */
129 #define SIP_MAX_PACKET 1500 /* Also from RFC 2543, should sub headers tho */
131 #define ALLOWED_METHODS "INVITE, ACK, CANCEL, OPTIONS, BYE, REFER"
133 static char useragent[AST_MAX_EXTENSION] = DEFAULT_USERAGENT;
135 static char context[AST_MAX_EXTENSION] = "default";
137 static char language[MAX_LANGUAGE] = "";
139 static char callerid[AST_MAX_EXTENSION] = "asterisk";
141 static char fromdomain[AST_MAX_EXTENSION] = "";
143 static char notifymime[AST_MAX_EXTENSION] = "application/simple-message-summary";
145 static int srvlookup = 0;
147 static int pedanticsipchecking = 0;
149 static int autocreatepeer = 0;
151 static int relaxdtmf = 0;
153 static int globalrtptimeout = 0;
155 static int globalrtpholdtimeout = 0;
157 static int usecnt =0;
158 AST_MUTEX_DEFINE_STATIC(usecnt_lock);
160 /* Protect the interface list (of sip_pvt's) */
161 AST_MUTEX_DEFINE_STATIC(iflock);
163 /* Protect the monitoring thread, so only one process can kill or start it, and not
164 when it's doing something critical. */
165 AST_MUTEX_DEFINE_STATIC(netlock);
167 AST_MUTEX_DEFINE_STATIC(monlock);
169 /* This is the thread for the monitor which checks for input on the channels
170 which are not currently in use. */
171 static pthread_t monitor_thread = AST_PTHREADT_NULL;
173 static int restart_monitor(void);
175 /* Codecs that we support by default: */
176 static int capability = AST_FORMAT_ULAW | AST_FORMAT_ALAW | AST_FORMAT_GSM | AST_FORMAT_H263;
177 static int noncodeccapability = AST_RTP_DTMF;
179 static char ourhost[256];
180 static struct in_addr __ourip;
183 static int sipdebug = 0;
184 static struct sockaddr_in debugaddr;
188 static int videosupport = 0;
190 static int globaldtmfmode = SIP_DTMF_RFC2833; /* DTMF mode default */
191 static int recordhistory = 0;
193 static char globalmusicclass[MAX_LANGUAGE] = ""; /* Global music on hold class */
194 static char global_realm[AST_MAX_EXTENSION] = "asterisk"; /* Default realm */
197 static int expiry = 900;
199 static struct sched_context *sched;
200 static struct io_context *io;
201 /* The private structures of the sip channels are linked for
202 selecting outgoing channels */
204 #define SIP_MAX_HEADERS 64
205 #define SIP_MAX_LINES 64
209 #define DEC_OUT_USE 2
210 #define INC_OUT_USE 3
212 static struct sip_codec_pref {
214 struct sip_codec_pref *next;
217 /* sip_request: The data grabbed from the UDP socket */
219 char *rlPart1; /* SIP Method Name or "SIP/2.0" protocol version */
220 char *rlPart2; /* The Request URI or Response Status */
222 int headers; /* SIP Headers */
223 char *header[SIP_MAX_HEADERS];
224 int lines; /* SDP Content */
225 char *line[SIP_MAX_LINES];
226 char data[SIP_MAX_PACKET];
232 struct sip_route *next;
238 struct sip_history *next;
241 /* sip_pvt: PVT structures are used for each SIP conversation, ie. a call */
242 static struct sip_pvt {
243 ast_mutex_t lock; /* Channel private lock */
244 char callid[80]; /* Global CallID */
245 char randdata[80]; /* Random data */
246 unsigned int ocseq; /* Current outgoing seqno */
247 unsigned int icseq; /* Current incoming seqno */
248 unsigned int callgroup; /* Call group */
249 unsigned int pickupgroup; /* Pickup group */
250 int lastinvite; /* Last Cseq of invite */
251 int alreadygone; /* Whether or not we've already been destroyed by or peer */
252 int needdestroy; /* if we need to be destroyed */
253 int capability; /* Special capability (codec) */
254 int jointcapability; /* Supported capability at both ends (codecs ) */
255 int prefcodec; /* Preferred codec (outbound only) */
256 int noncodeccapability;
257 int outgoing; /* Outgoing or incoming call? */
258 int authtries; /* Times we've tried to authenticate */
259 int insecure; /* Don't check source port/ip */
260 int expiry; /* How long we take to expire */
261 int branch; /* One random number */
262 int canreinvite; /* Do we support reinvite */
263 int ringing; /* Have sent 180 ringing */
264 int progress; /* Have sent 183 message progress */
265 int tag; /* Another random number */
266 int nat; /* Whether to try to support NAT */
267 int sessionid; /* SDP Session ID */
268 int sessionversion; /* SDP Session Version */
269 struct sockaddr_in sa; /* Our peer */
270 struct sockaddr_in redirip; /* Where our RTP should be going if not to us */
271 struct sockaddr_in vredirip; /* Where our Video RTP should be going if not to us */
272 int redircodecs; /* Redirect codecs */
273 struct sockaddr_in recv; /* Received as */
274 struct in_addr ourip; /* Our IP */
275 struct ast_channel *owner; /* Who owns us */
276 char exten[AST_MAX_EXTENSION]; /* Extension where to start */
277 char refer_to[AST_MAX_EXTENSION]; /* Place to store REFER-TO extension */
278 char referred_by[AST_MAX_EXTENSION]; /* Place to store REFERRED-BY extension */
279 char refer_contact[AST_MAX_EXTENSION]; /* Place to store Contact info from a REFER extension */
280 struct sip_pvt *refer_call; /* Call we are referring */
281 struct sip_route *route; /* Head of linked list of routing steps (fm Record-Route) */
282 int route_persistant; /* Is this the "real" route? */
283 char remote_party_id[256];
284 char from[256]; /* The From: header */
285 char useragent[256]; /* User agent in SIP request */
286 char context[AST_MAX_EXTENSION]; /* Context for this call */
287 char fromdomain[AST_MAX_EXTENSION]; /* Domain to show in the from field */
288 char fromuser[AST_MAX_EXTENSION]; /* Domain to show in the user field */
289 char tohost[AST_MAX_EXTENSION]; /* Host we should put in the "to" field */
290 char language[MAX_LANGUAGE]; /* Default language for this call */
291 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
292 char rdnis[256]; /* Referring DNIS */
293 char theirtag[256]; /* Their tag */
296 char authname[256]; /* Who we use for authentication */
297 char uri[256]; /* Original requested URI */
298 char peersecret[256];
299 char peermd5secret[256];
300 char callerid[256]; /* Caller*ID */
301 int restrictcid; /* hide presentation from remote user */
303 char accountcode[20]; /* Account code */
304 char our_contact[256]; /* Our contact header */
305 char realm[256]; /* Authorization realm */
306 char nonce[256]; /* Authorization nonce */
307 char opaque[256]; /* Opaque nonsense */
308 char qop[80]; /* Quality of Protection, since SIP wasn't complicated enough yet. */
309 char domain[256]; /* Authorization nonce */
310 char lastmsg[256]; /* Last Message sent/received */
311 int amaflags; /* AMA Flags */
312 int pendinginvite; /* Any pending invite */
313 int needreinvite; /* Do we need to send another reinvite? */
314 int pendingbye; /* Need to send bye after we ack? */
315 int gotrefer; /* Got a refer? */
316 struct sip_request initreq; /* Initial request */
318 int maxtime; /* Max time for first response */
319 int initid; /* Auto-congest ID if appropriate */
320 int autokillid; /* Auto-kill ID */
321 time_t lastrtprx; /* Last RTP received */
322 int rtptimeout; /* RTP timeout time */
323 int rtpholdtimeout; /* RTP timeout when on hold */
332 struct sip_peer *peerpoke; /* If this calls is to poke a peer, which one */
333 struct sip_registry *registry; /* If this is a REGISTER call, to which registry */
334 struct ast_rtp *rtp; /* RTP Session */
335 struct ast_rtp *vrtp; /* Video RTP session */
336 struct sip_pkt *packets; /* Packets scheduled for re-transmission */
337 struct sip_history *history; /* History of this SIP dialog */
338 struct sip_pvt *next; /* Next call in chain */
341 #define FLAG_RESPONSE (1 << 0)
342 #define FLAG_FATAL (1 << 1)
344 /* sip packet - read in sipsock_read, transmitted in send_request */
346 struct sip_pkt *next; /* Next packet */
347 int retrans; /* Retransmission number */
348 int seqno; /* Sequence number */
349 int flags; /* non-zero if this is a response packet (e.g. 200 OK) */
350 struct sip_pvt *owner; /* Owner call */
351 int retransid; /* Retransmission ID */
352 int packetlen; /* Length of packet */
356 /* Structure for SIP user data. User's place calls to us */
358 /* Users who can access various contexts */
364 char accountcode[20];
365 char language[MAX_LANGUAGE];
366 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
367 char useragent[256]; /* User agent in SIP request */
368 unsigned int callgroup;
369 unsigned int pickupgroup;
383 struct sip_user *next;
386 /* Structure for SIP peer data, we place calls to peers if registred or fixed IP address (host) */
391 char context[80]; /* JK02: peers need context too to allow parking etc */
396 char mailbox[AST_MAX_EXTENSION];
397 char language[MAX_LANGUAGE];
398 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
399 char useragent[256]; /* User agent in SIP request */
411 unsigned int callgroup;
412 unsigned int pickupgroup;
414 struct sockaddr_in addr;
418 struct sip_pvt *call; /* Call pointer */
419 int pokeexpire; /* When to expire poke */
420 int lastms; /* How long last response took (in ms), or -1 for no response */
421 int maxms; /* Max ms we will accept for the host to be up, 0 to not monitor */
422 struct timeval ps; /* Ping send time */
424 struct sockaddr_in defaddr;
430 struct sip_peer *next;
433 AST_MUTEX_DEFINE_STATIC(sip_reload_lock);
434 static int sip_reloading = 0;
436 #define REG_STATE_UNREGISTERED 0
437 #define REG_STATE_REGSENT 1
438 #define REG_STATE_AUTHSENT 2
439 #define REG_STATE_REGISTERED 3
440 #define REG_STATE_REJECTED 4
441 #define REG_STATE_TIMEOUT 5
442 #define REG_STATE_NOAUTH 6
444 /* sip_registry: Registrations with other SIP proxies */
445 struct sip_registry {
446 struct sockaddr_in addr; /* Who we connect to for registration purposes */
447 char username[80]; /* Who we are registering as */
448 char authuser[80]; /* Who we *authenticate* as */
450 char secret[80]; /* Password or key name in []'s */
452 char contact[80]; /* Contact extension */
454 int expire; /* Sched ID of expiration */
455 int timeout; /* sched id of sip_reg_timeout */
456 int refresh; /* How often to refresh */
457 struct sip_pvt *call; /* create a sip_pvt structure for each outbound "registration call" in progress */
459 int callid_valid; /* 0 means we haven't chosen callid for this registry yet. */
460 char callid[80]; /* Global CallID for this registry */
461 unsigned int ocseq; /* Sequence number we got to for REGISTERs for this registry */
462 struct sockaddr_in us; /* Who the server thinks we are */
463 struct sip_registry *next;
466 /*--- The user list: Users and friends ---*/
467 static struct ast_user_list {
468 struct sip_user *users;
472 /*--- The peer list: Peers and Friends ---*/
473 static struct ast_peer_list {
474 struct sip_peer *peers;
478 /*--- The register list: Other SIP proxys we register with and call ---*/
479 static struct ast_register_list {
480 struct sip_registry *registrations;
486 #define REINVITE_INVITE 1
487 #define REINVITE_UPDATE 2
489 static int __sip_do_register(struct sip_registry *r);
491 static int sipsock = -1;
492 static int globalnat = 0;
493 static int globalcanreinvite = REINVITE_INVITE;
496 static struct sockaddr_in bindaddr;
497 static struct sockaddr_in externip;
498 static struct ast_ha *localaddr;
500 static struct ast_frame *sip_read(struct ast_channel *ast);
501 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req);
502 static int transmit_response_with_sdp(struct sip_pvt *p, char *msg, struct sip_request *req, int retrans);
503 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *rand, int reliable, char *header);
504 static int transmit_request(struct sip_pvt *p, char *msg, int inc, int reliable, int newbranch);
505 static int transmit_request_with_auth(struct sip_pvt *p, char *msg, int inc, int reliable, int newbranch);
506 static int transmit_invite(struct sip_pvt *p, char *msg, int sendsdp, char *auth, char *authheader, char *vxml_url,char *distinctive_ring, int init);
507 static int transmit_reinvite_with_sdp(struct sip_pvt *p);
508 static int transmit_info_with_digit(struct sip_pvt *p, char digit);
509 static int transmit_message_with_text(struct sip_pvt *p, char *text);
510 static int transmit_refer(struct sip_pvt *p, char *dest);
511 static struct sip_peer *temp_peer(char *name);
512 static int do_proxy_auth(struct sip_pvt *p, struct sip_request *req, char *header, char *respheader, char *msg, int init);
513 static void free_old_route(struct sip_route *route);
514 static int build_reply_digest(struct sip_pvt *p, char *orig_header, char *digest, int digest_len);
515 static int update_user_counter(struct sip_pvt *fup, int event);
516 static void prune_peers(void);
517 static int sip_do_reload(void);
518 static int sip_debug_test_addr(struct sockaddr_in *addr);
519 static int sip_debug_test_pvt(struct sip_pvt *p);
521 /*--- __sip_xmit: Transmit SIP message ---*/
522 static int __sip_xmit(struct sip_pvt *p, char *data, int len)
526 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->recv, sizeof(struct sockaddr_in));
528 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->sa, sizeof(struct sockaddr_in));
530 ast_log(LOG_WARNING, "sip_xmit of %p (len %d) to %s returned %d: %s\n", data, len, inet_ntoa(p->sa.sin_addr), res, strerror(errno));
535 static void sip_destroy(struct sip_pvt *p);
537 /*--- ast_sip_ouraddrfor: NAT fix - decide which IP address to use for ASterisk server? ---*/
538 /* Only used for outbound registrations */
539 static int ast_sip_ouraddrfor(struct in_addr *them, struct in_addr *us)
542 * Using the localaddr structure built up with localnet statements
543 * apply it to their address to see if we need to substitute our
544 * externip or can get away with our internal bindaddr
546 struct sockaddr_in theirs;
547 theirs.sin_addr = *them;
548 if (localaddr && externip.sin_addr.s_addr &&
549 ast_apply_ha(localaddr, &theirs)) {
551 memcpy(us, &externip.sin_addr, sizeof(struct in_addr));
552 strcpy(t, inet_ntoa(*(struct in_addr *)&them->s_addr));
553 ast_log(LOG_DEBUG, "Target address %s is not local, substituting externip\n", t);
555 else if (bindaddr.sin_addr.s_addr)
556 memcpy(us, &bindaddr.sin_addr, sizeof(struct in_addr));
558 return ast_ouraddrfor(them, us);
562 static int append_history(struct sip_pvt *p, char *event, char *data)
564 struct sip_history *hist, *prev;
568 hist = malloc(sizeof(struct sip_history));
570 memset(hist, 0, sizeof(struct sip_history));
571 snprintf(hist->event, sizeof(hist->event), "%-15s %s", event, data);
575 if ((*c == '\r') || (*c == '\n')) {
581 /* Enqueue into history */
594 /*--- retrans_pkt: Retransmit SIP message if no answer ---*/
595 static int retrans_pkt(void *data)
597 struct sip_pkt *pkt=data, *prev, *cur;
599 ast_mutex_lock(&pkt->owner->lock);
600 if (pkt->retrans < MAX_RETRANS) {
602 if (sip_debug_test_pvt(pkt->owner)) {
604 ast_verbose("Retransmitting #%d (NAT):\n%s\n to %s:%d\n", pkt->retrans, pkt->data, inet_ntoa(pkt->owner->recv.sin_addr), ntohs(pkt->owner->recv.sin_port));
606 ast_verbose("Retransmitting #%d (no NAT):\n%s\n to %s:%d\n", pkt->retrans, pkt->data, inet_ntoa(pkt->owner->sa.sin_addr), ntohs(pkt->owner->sa.sin_port));
608 append_history(pkt->owner, "ReTx", pkt->data);
609 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
612 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");
613 append_history(pkt->owner, "MaxRetries", pkt->flags & FLAG_FATAL ? "(Critical)" : "(Non-critical)");
615 if (pkt->flags & FLAG_FATAL) {
616 while(pkt->owner->owner && ast_mutex_trylock(&pkt->owner->owner->lock)) {
617 ast_mutex_unlock(&pkt->owner->lock);
619 ast_mutex_lock(&pkt->owner->lock);
621 if (pkt->owner->owner) {
622 ast_queue_hangup(pkt->owner->owner);
623 ast_mutex_unlock(&pkt->owner->owner->lock);
625 /* If no owner, destroy now */
626 pkt->owner->needdestroy = 1;
629 /* In any case, go ahead and remove the packet */
631 cur = pkt->owner->packets;
640 prev->next = cur->next;
642 pkt->owner->packets = cur->next;
643 ast_mutex_unlock(&pkt->owner->lock);
647 ast_log(LOG_WARNING, "Weird, couldn't find packet owner!\n");
650 ast_mutex_unlock(&pkt->owner->lock);
654 /*--- __sip_reliable_xmit: transmit packet with retransmits ---*/
655 static int __sip_reliable_xmit(struct sip_pvt *p, int seqno, int resp, char *data, int len, int fatal)
658 pkt = malloc(sizeof(struct sip_pkt) + len);
661 memset(pkt, 0, sizeof(struct sip_pkt));
662 memcpy(pkt->data, data, len);
663 pkt->packetlen = len;
664 pkt->next = p->packets;
669 pkt->flags |= FLAG_FATAL;
670 /* Schedule retransmission */
671 pkt->retransid = ast_sched_add(sched, DEFAULT_RETRANS, retrans_pkt, pkt);
672 pkt->next = p->packets;
674 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
675 if (!strncasecmp(pkt->data, "INVITE", 6)) {
676 /* Note this is a pending invite */
677 p->pendinginvite = seqno;
682 /*--- __sip_autodestruct: Kill a call (called by scheduler) ---*/
683 static int __sip_autodestruct(void *data)
685 struct sip_pvt *p = data;
687 ast_log(LOG_DEBUG, "Auto destroying call '%s'\n", p->callid);
688 append_history(p, "AutoDestroy", "");
690 ast_log(LOG_WARNING, "Autodestruct on call '%s' with owner in place\n", p->callid);
691 ast_queue_hangup(p->owner);
698 /*--- sip_scheddestroy: Schedule destruction of SIP call ---*/
699 static int sip_scheddestroy(struct sip_pvt *p, int ms)
702 if (sip_debug_test_pvt(p))
703 ast_verbose("Scheduling destruction of call '%s' in %d ms\n", p->callid, ms);
705 snprintf(tmp, sizeof(tmp), "%d ms", ms);
706 append_history(p, "SchedDestroy", tmp);
708 if (p->autokillid > -1)
709 ast_sched_del(sched, p->autokillid);
710 p->autokillid = ast_sched_add(sched, ms, __sip_autodestruct, p);
714 /*--- sip_cancel_destroy: Cancel destruction of SIP call ---*/
715 static int sip_cancel_destroy(struct sip_pvt *p)
717 if (p->autokillid > -1)
718 ast_sched_del(sched, p->autokillid);
719 append_history(p, "CancelDestroy", "");
724 /*--- __sip_ack: Acknowledges receipt of a packet and stops retransmission ---*/
725 static int __sip_ack(struct sip_pvt *p, int seqno, int resp)
727 struct sip_pkt *cur, *prev = NULL;
732 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp)) {
733 if (!resp && (seqno == p->pendinginvite)) {
734 ast_log(LOG_DEBUG, "Acked pending invite %d\n", p->pendinginvite);
735 p->pendinginvite = 0;
738 /* this is our baby */
740 prev->next = cur->next;
742 p->packets = cur->next;
743 if (cur->retransid > -1)
744 ast_sched_del(sched, cur->retransid);
752 ast_log(LOG_DEBUG, "Stopping retransmission on '%s' of %s %d: %s\n", p->callid, resp ? "Response" : "Request", seqno, res ? "Not Found" : "Found");
756 /*--- __sip_semi_ack: Acks receipt of packet, keep it around (used for provisional responses) ---*/
757 static int __sip_semi_ack(struct sip_pvt *p, int seqno, int resp)
763 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp)) {
764 /* this is our baby */
765 if (cur->retransid > -1)
766 ast_sched_del(sched, cur->retransid);
773 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");
777 /*--- send_response: Transmit response on SIP request---*/
778 static int send_response(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
781 if (sip_debug_test_pvt(p)) {
783 ast_verbose("%sTransmitting (NAT):\n%s\n to %s:%d\n", reliable ? "Reliably " : "", req->data, inet_ntoa(p->recv.sin_addr), ntohs(p->recv.sin_port));
785 ast_verbose("%sTransmitting (no NAT):\n%s\n to %s:%d\n", reliable ? "Reliably " : "", req->data, inet_ntoa(p->sa.sin_addr), ntohs(p->sa.sin_port));
788 append_history(p, "TxRespRel", req->data);
789 res = __sip_reliable_xmit(p, seqno, 1, req->data, req->len, (reliable > 1));
791 append_history(p, "TxResp", req->data);
792 res = __sip_xmit(p, req->data, req->len);
799 /*--- send_request: Send SIP Request to the other part of the dialogue ---*/
800 static int send_request(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
803 if (sip_debug_test_pvt(p)) {
805 ast_verbose("%sTransmitting:\n%s (NAT) to %s:%d\n", reliable ? "Reliably " : "", req->data, inet_ntoa(p->recv.sin_addr), ntohs(p->recv.sin_port));
807 ast_verbose("%sTransmitting:\n%s (no NAT) to %s:%d\n", reliable ? "Reliably " : "", req->data, inet_ntoa(p->sa.sin_addr), ntohs(p->sa.sin_port));
810 append_history(p, "TxReqRel", req->data);
811 res = __sip_reliable_xmit(p, seqno, 0, req->data, req->len, (reliable > 1));
813 append_history(p, "TxReq", req->data);
814 res = __sip_xmit(p, req->data, req->len);
819 /*--- ditch_braces: Pick out text in braces from character string ---*/
820 static char *ditch_braces(char *tmp)
824 if ((n = strchr(tmp, '<')) ) {
826 while(*c && *c != '>') c++;
828 ast_log(LOG_WARNING, "No closing brace in '%s'\n", tmp);
837 /*--- sip_sendtext: Send SIP MESSAGE text within a call ---*/
838 /* Called from PBX core text message functions */
839 static int sip_sendtext(struct ast_channel *ast, char *text)
841 struct sip_pvt *p = ast->pvt->pvt;
842 if (sip_debug_test_pvt(p))
843 ast_verbose("Sending text %s on %s\n", text, ast->name);
846 if (!text || ast_strlen_zero(text))
848 if (sip_debug_test_pvt(p))
849 ast_verbose("Really sending text %s on %s\n", text, ast->name);
850 transmit_message_with_text(p, text);
856 /*--- mysql_update_peer: Update peer from database ---*/
857 /* This function adds registration state to database */
858 static void mysql_update_peer(char *peer, struct sockaddr_in *sin, char *username, int expiry)
860 if (mysql && (strlen(peer) < 128)) {
865 name = alloca(strlen(peer) * 2 + 1);
866 uname = alloca(strlen(username) * 2 + 1);
868 mysql_real_escape_string(mysql, name, peer, strlen(peer));
869 mysql_real_escape_string(mysql, uname, username, strlen(username));
870 snprintf(query, sizeof(query), "UPDATE sipfriends SET ipaddr=\"%s\", port=\"%d\", regseconds=\"%ld\", username=\"%s\" WHERE name=\"%s\"",
871 inet_ntoa(sin->sin_addr), ntohs(sin->sin_port), nowtime + expiry, uname, name);
872 ast_mutex_lock(&mysqllock);
873 if (mysql_real_query(mysql, query, strlen(query)))
874 ast_log(LOG_WARNING, "Unable to update database\n");
876 ast_mutex_unlock(&mysqllock);
880 /*--- mysql_peer: Get peer from database ---*/
881 static struct sip_peer *mysql_peer(char *peer, struct sockaddr_in *sin)
886 p = malloc(sizeof(struct sip_peer));
887 memset(p, 0, sizeof(struct sip_peer));
888 if (mysql && (!peer || (strlen(peer) < 128))) {
893 time_t regseconds, nowtime;
898 name = alloca(strlen(peer) * 2 + 1);
899 mysql_real_escape_string(mysql, name, peer, strlen(peer));
902 snprintf(query, sizeof(query), "SELECT name, secret, context, username, ipaddr, port, regseconds FROM sipfriends WHERE ipaddr=\"%s\" AND port=\"%d\"", inet_ntoa(sin->sin_addr), ntohs(sin->sin_port));
904 snprintf(query, sizeof(query), "SELECT name, secret, context, username, ipaddr, port, regseconds FROM sipfriends WHERE name=\"%s\"", name);
905 ast_mutex_lock(&mysqllock);
906 mysql_query(mysql, query);
907 if ((result = mysql_store_result(mysql))) {
908 if ((rowval = mysql_fetch_row(result))) {
909 numfields = mysql_num_fields(result);
910 fields = mysql_fetch_fields(result);
912 p->addr.sin_family = AF_INET;
913 for (x=0;x<numfields;x++) {
915 if (!strcasecmp(fields[x].name, "secret")) {
916 strncpy(p->secret, rowval[x], sizeof(p->secret));
917 } else if (!strcasecmp(fields[x].name, "name")) {
918 strncpy(p->name, rowval[x], sizeof(p->name) - 1);
919 } else if (!strcasecmp(fields[x].name, "context")) {
920 strncpy(p->context, rowval[x], sizeof(p->context) - 1);
921 } else if (!strcasecmp(fields[x].name, "username")) {
922 strncpy(p->username, rowval[x], sizeof(p->username) - 1);
923 } else if (!strcasecmp(fields[x].name, "ipaddr")) {
924 inet_aton(rowval[x], &p->addr.sin_addr);
925 } else if (!strcasecmp(fields[x].name, "port")) {
926 if (sscanf(rowval[x], "%i", &port) != 1)
928 p->addr.sin_port = htons(port);
929 } else if (!strcasecmp(fields[x].name, "regseconds")) {
930 if (sscanf(rowval[x], "%li", ®seconds) != 1)
936 if (nowtime > regseconds)
937 memset(&p->addr, 0, sizeof(p->addr));
939 mysql_free_result(result);
942 ast_mutex_unlock(&mysqllock);
949 p->capability = capability;
951 p->dtmfmode = globaldtmfmode;
959 #endif /* MYSQL_FRIENDS */
961 /*--- update_peer: Update peer data in database (if used) ---*/
962 static void update_peer(struct sip_peer *p, int expiry)
966 mysql_update_peer(p->name, &p->addr, p->username, expiry);
971 /*--- find_peer: Locate peer by name or ip address */
972 static struct sip_peer *find_peer(char *peer, struct sockaddr_in *sin)
974 struct sip_peer *p = NULL;
978 /* Find by peer name */
980 if (!strcasecmp(p->name, peer)) {
989 if (!inaddrcmp(&p->addr, sin) ||
991 (p->addr.sin_addr.s_addr == sin->sin_addr.s_addr))) {
1000 p = mysql_peer(peer, sin);
1007 /*--- find_user: Locate user by name */
1008 static struct sip_user *find_user(char *name)
1010 struct sip_user *u = NULL;
1014 if (!strcasecmp(u->name, name)) {
1023 /*--- sip_debug_test_addr: See if we pass debug IP filter */
1024 static int sip_debug_test_addr(struct sockaddr_in *addr) {
1025 if (sipdebug == 0) return 0;
1026 if (debugaddr.sin_addr.s_addr) {
1027 if (((ntohs(debugaddr.sin_port) != 0) &&
1028 (debugaddr.sin_port != addr->sin_port)) ||
1029 (debugaddr.sin_addr.s_addr != addr->sin_addr.s_addr))
1035 static int sip_debug_test_pvt(struct sip_pvt *p) {
1036 return (sipdebug && sip_debug_test_addr((p->nat ? &p->recv : &p->sa)));
1039 /*--- create_addr: create address structure from peer definition ---*/
1040 /* Or, if peer not found, find it in the global DNS */
1041 /* returns TRUE on failure, FALSE on success */
1042 static int create_addr(struct sip_pvt *r, char *peer)
1045 struct ast_hostent ahp;
1050 char host[256], *hostn;
1052 r->sa.sin_family = AF_INET;
1053 ast_mutex_lock(&peerl.lock);
1054 p = find_peer(peer, NULL);
1058 r->capability = p->capability;
1061 ast_log(LOG_DEBUG, "Setting NAT on RTP to %d\n", r->nat);
1062 ast_rtp_setnat(r->rtp, r->nat);
1065 ast_log(LOG_DEBUG, "Setting NAT on VRTP to %d\n", r->nat);
1066 ast_rtp_setnat(r->vrtp, r->nat);
1068 strncpy(r->peername, p->username, sizeof(r->peername)-1);
1069 strncpy(r->authname, p->username, sizeof(r->authname)-1);
1070 strncpy(r->peersecret, p->secret, sizeof(r->peersecret)-1);
1071 strncpy(r->peermd5secret, p->md5secret, sizeof(r->peermd5secret)-1);
1072 strncpy(r->username, p->username, sizeof(r->username)-1);
1073 strncpy(r->tohost, p->tohost, sizeof(r->tohost)-1);
1074 if (ast_strlen_zero(r->tohost)) {
1075 if (p->addr.sin_addr.s_addr)
1076 snprintf(r->tohost, sizeof(r->tohost), inet_ntoa(p->addr.sin_addr));
1078 snprintf(r->tohost, sizeof(r->tohost), inet_ntoa(p->defaddr.sin_addr));
1080 if (!ast_strlen_zero(p->fromdomain))
1081 strncpy(r->fromdomain, p->fromdomain, sizeof(r->fromdomain)-1);
1082 if (!ast_strlen_zero(p->fromuser))
1083 strncpy(r->fromuser, p->fromuser, sizeof(r->fromuser)-1);
1084 r->insecure = p->insecure;
1085 r->canreinvite = p->canreinvite;
1086 r->maxtime = p->maxms;
1087 r->callgroup = p->callgroup;
1088 r->pickupgroup = p->pickupgroup;
1090 r->dtmfmode = p->dtmfmode;
1091 if (r->dtmfmode & SIP_DTMF_RFC2833)
1092 r->noncodeccapability |= AST_RTP_DTMF;
1094 r->noncodeccapability &= ~AST_RTP_DTMF;
1096 strncpy(r->context, p->context,sizeof(r->context)-1);
1097 if ((p->addr.sin_addr.s_addr || p->defaddr.sin_addr.s_addr) &&
1098 (!p->maxms || ((p->lastms > 0) && (p->lastms <= p->maxms)))) {
1099 if (p->addr.sin_addr.s_addr) {
1100 r->sa.sin_addr = p->addr.sin_addr;
1101 r->sa.sin_port = p->addr.sin_port;
1103 r->sa.sin_addr = p->defaddr.sin_addr;
1104 r->sa.sin_port = p->defaddr.sin_port;
1106 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1117 ast_mutex_unlock(&peerl.lock);
1119 if ((port=strchr(peer, ':'))) {
1125 portno = atoi(port);
1127 portno = DEFAULT_SIP_PORT;
1132 snprintf(service, sizeof(service), "_sip._udp.%s", peer);
1133 ret = ast_get_srv(NULL, host, sizeof(host), &tportno, service);
1139 hp = ast_gethostbyname(hostn, &ahp);
1141 strncpy(r->tohost, peer, sizeof(r->tohost) - 1);
1142 memcpy(&r->sa.sin_addr, hp->h_addr, sizeof(r->sa.sin_addr));
1143 r->sa.sin_port = htons(portno);
1144 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1147 ast_log(LOG_WARNING, "No such host: %s\n", peer);
1163 /*--- auto_congest: Scheduled congestion on a call ---*/
1164 static int auto_congest(void *nothing)
1166 struct sip_pvt *p = nothing;
1167 ast_mutex_lock(&p->lock);
1170 if (!ast_mutex_trylock(&p->owner->lock)) {
1171 ast_log(LOG_NOTICE, "Auto-congesting %s\n", p->owner->name);
1172 ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
1173 ast_mutex_unlock(&p->owner->lock);
1176 ast_mutex_unlock(&p->lock);
1180 /*--- sip_prefs_free: Free codec list in preference structure ---*/
1181 static void sip_prefs_free(void)
1183 struct sip_codec_pref *cur, *next;
1193 /*--- sip_pref_remove: Remove codec from pref list ---*/
1194 static void sip_pref_remove(int format)
1196 struct sip_codec_pref *cur, *prev=NULL;
1199 if (cur->codec == format) {
1201 prev->next = cur->next;
1212 /*--- sip_pref_append: Append codec to list ---*/
1213 static int sip_pref_append(int format)
1215 struct sip_codec_pref *cur, *tmp;
1216 sip_pref_remove(format);
1217 tmp = (struct sip_codec_pref *)malloc(sizeof(struct sip_codec_pref));
1220 memset(tmp, 0, sizeof(struct sip_codec_pref));
1221 tmp->codec = format;
1232 /*--- sip_codec_choose: Pick a codec ---*/
1233 static int sip_codec_choose(int formats)
1235 struct sip_codec_pref *cur;
1236 formats &= ((AST_FORMAT_MAX_AUDIO << 1) - 1);
1239 if (formats & cur->codec)
1243 return ast_best_codec(formats);
1246 /*--- sip_call: Initiate SIP call from PBX ---*/
1247 /* used from the dial() application */
1248 static int sip_call(struct ast_channel *ast, char *dest, int timeout)
1252 char *vxml_url = NULL;
1253 char *distinctive_ring = NULL;
1254 struct varshead *headp;
1255 struct ast_var_t *current;
1258 if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) {
1259 ast_log(LOG_WARNING, "sip_call called on %s, neither down nor reserved\n", ast->name);
1262 /* Check whether there is vxml_url, distinctive ring variables */
1264 headp=&ast->varshead;
1265 AST_LIST_TRAVERSE(headp,current,entries) {
1266 /* Check whether there is a VXML_URL variable */
1267 if (strcasecmp(ast_var_name(current),"VXML_URL")==0)
1269 vxml_url = ast_var_value(current);
1272 /* Check whether there is a ALERT_INFO variable */
1273 if (strcasecmp(ast_var_name(current),"ALERT_INFO")==0)
1275 distinctive_ring = ast_var_value(current);
1282 ast_log(LOG_DEBUG, "Outgoing Call for %s\n", p->username);
1283 res = update_user_counter(p,INC_OUT_USE);
1285 p->restrictcid = ast->restrictcid;
1286 p->jointcapability = p->capability;
1287 transmit_invite(p, "INVITE", 1, NULL, NULL, vxml_url,distinctive_ring, 1);
1289 /* Initialize auto-congest time */
1290 p->initid = ast_sched_add(sched, p->maxtime * 4, auto_congest, p);
1296 /*--- __sip_destroy: Execute destrucion of call structure, release memory---*/
1297 static void __sip_destroy(struct sip_pvt *p, int lockowner)
1299 struct sip_pvt *cur, *prev = NULL;
1301 struct sip_history *hist;
1302 if (sip_debug_test_pvt(p))
1303 ast_verbose("Destroying call '%s'\n", p->callid);
1304 if (p->stateid > -1)
1305 ast_extension_state_del(p->stateid, NULL);
1307 ast_sched_del(sched, p->initid);
1308 if (p->autokillid > -1)
1309 ast_sched_del(sched, p->autokillid);
1312 ast_rtp_destroy(p->rtp);
1315 ast_rtp_destroy(p->vrtp);
1318 free_old_route(p->route);
1322 /* Carefully unlink from registry */
1323 struct sip_registry *reg;
1324 ast_mutex_lock(®l.lock);
1325 reg = regl.registrations;
1327 if ((reg == p->registry) && (p->registry->call == p))
1328 p->registry->call=NULL;
1331 ast_mutex_unlock(®l.lock);
1333 /* Unlink us from the owner if we have one */
1336 ast_mutex_lock(&p->owner->lock);
1337 ast_log(LOG_DEBUG, "Detaching from %s\n", p->owner->name);
1338 p->owner->pvt->pvt = NULL;
1340 ast_mutex_unlock(&p->owner->lock);
1345 p->history = p->history->next;
1352 prev->next = cur->next;
1361 ast_log(LOG_WARNING, "%p is not in list?!?! \n", cur);
1364 ast_sched_del(sched, p->initid);
1365 while((cp = p->packets)) {
1366 p->packets = p->packets->next;
1367 if (cp->retransid > -1)
1368 ast_sched_del(sched, cp->retransid);
1371 ast_mutex_destroy(&p->lock);
1376 /*--- update_user_counter: Handle incominglimit and outgoinglimit for SIP users ---*/
1377 /* Note: This is going to be replaced by app_groupcount */
1378 static int update_user_counter(struct sip_pvt *fup, int event)
1380 char name[256] = "";
1382 strncpy(name, fup->username, sizeof(name) - 1);
1383 ast_mutex_lock(&userl.lock);
1384 u = find_user(name);
1386 ast_log(LOG_DEBUG, "%s is not a local user\n", name);
1387 ast_mutex_unlock(&userl.lock);
1391 /* incoming and outgoing affects the inUse counter */
1394 if ( u->inUse > 0 ) {
1402 if (u->incominglimit > 0 ) {
1403 if (u->inUse >= u->incominglimit) {
1404 ast_log(LOG_ERROR, "Call from user '%s' rejected due to usage limit of %d\n", u->name, u->incominglimit);
1405 /* inc inUse as well */
1406 if ( event == INC_OUT_USE ) {
1409 ast_mutex_unlock(&userl.lock);
1414 ast_log(LOG_DEBUG, "Call from user '%s' is %d out of %d\n", u->name, u->inUse, u->incominglimit);
1416 /* we don't use these anymore
1418 if ( u->outUse > 0 ) {
1425 if ( u->outgoinglimit > 0 ) {
1426 if ( u->outUse >= u->outgoinglimit ) {
1427 ast_log(LOG_ERROR, "Outgoing call from user '%s' rejected due to usage limit of %d\n", u->name, u->outgoinglimit);
1428 ast_mutex_unlock(&userl.lock);
1436 ast_log(LOG_ERROR, "update_user_counter(%s,%d) called with no event!\n",u->name,event);
1438 ast_mutex_unlock(&userl.lock);
1442 /*--- sip_destroy: Destroy SIP call structure ---*/
1443 static void sip_destroy(struct sip_pvt *p)
1445 ast_mutex_lock(&iflock);
1446 __sip_destroy(p, 1);
1447 ast_mutex_unlock(&iflock);
1451 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal);
1453 static int hangup_sip2cause(int cause)
1455 /* Possible values from causes.h
1456 AST_CAUSE_NOTDEFINED AST_CAUSE_NORMAL AST_CAUSE_BUSY
1457 AST_CAUSE_FAILURE AST_CAUSE_CONGESTION AST_CAUSE_UNALLOCATED
1461 case 404: /* Not found */
1462 return AST_CAUSE_UNALLOCATED;
1463 case 483: /* Too many hops */
1464 return AST_CAUSE_FAILURE;
1466 return AST_CAUSE_BUSY;
1468 return AST_CAUSE_NORMAL;
1474 static char *hangup_cause2sip(int cause)
1478 case AST_CAUSE_FAILURE:
1479 return "500 Server internal failure";
1480 case AST_CAUSE_CONGESTION:
1481 return "503 Service Unavailable";
1482 case AST_CAUSE_BUSY:
1491 /*--- sip_hangup: Hangup SIP call */
1492 static int sip_hangup(struct ast_channel *ast)
1494 struct sip_pvt *p = ast->pvt->pvt;
1496 int needdestroy = 0;
1498 ast_log(LOG_DEBUG, "sip_hangup(%s)\n", ast->name);
1499 if (!ast->pvt->pvt) {
1500 ast_log(LOG_DEBUG, "Asked to hangup channel not connected\n");
1503 ast_mutex_lock(&p->lock);
1504 if ( p->outgoing ) {
1505 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement outUse counter\n", p->username);
1506 update_user_counter(p, DEC_OUT_USE);
1508 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement inUse counter\n", p->username);
1509 update_user_counter(p, DEC_IN_USE);
1511 /* Determine how to disconnect */
1512 if (p->owner != ast) {
1513 ast_log(LOG_WARNING, "Huh? We aren't the owner?\n");
1514 ast_mutex_unlock(&p->lock);
1517 if (!ast || (ast->_state != AST_STATE_UP))
1522 ast_dsp_free(p->vad);
1525 ast->pvt->pvt = NULL;
1527 ast_mutex_lock(&usecnt_lock);
1529 ast_mutex_unlock(&usecnt_lock);
1530 ast_update_use_count();
1533 /* Start the process if it's not already started */
1534 if (!p->alreadygone && !ast_strlen_zero(p->initreq.data)) {
1537 transmit_request_with_auth(p, "CANCEL", p->ocseq, 1, 0);
1538 /* Actually don't destroy us yet, wait for the 487 on our original
1539 INVITE, but do set an autodestruct just in case we never get it. */
1541 sip_scheddestroy(p, 15000);
1542 if ( p->initid != -1 ) {
1543 /* channel still up - reverse dec of inUse counter
1544 only if the channel is not auto-congested */
1545 if ( p->outgoing ) {
1546 update_user_counter(p, INC_OUT_USE);
1549 update_user_counter(p, INC_IN_USE);
1554 if (ast->hangupcause && ((res = hangup_cause2sip(ast->hangupcause)))) {
1555 transmit_response_reliable(p, res, &p->initreq, 1);
1557 transmit_response_reliable(p, "403 Forbidden", &p->initreq, 1);
1560 if (!p->pendinginvite) {
1562 transmit_request_with_auth(p, "BYE", 0, 1, 1);
1564 /* Note we will need a BYE when this all settles out
1565 but we can't send one while we have "INVITE" outstanding. */
1567 p->needreinvite = 0;
1571 p->needdestroy = needdestroy;
1572 ast_mutex_unlock(&p->lock);
1576 /*--- sip_answer: Answer SIP call , send 200 OK on Invite */
1577 static int sip_answer(struct ast_channel *ast)
1581 struct sip_pvt *p = ast->pvt->pvt;
1584 if (ast->_state != AST_STATE_UP) {
1588 codec=pbx_builtin_getvar_helper(p->owner,"SIP_CODEC");
1590 fmt=ast_getformatbyname(codec);
1592 ast_log(LOG_NOTICE, "Changing codec to '%s' for this call because of ${SIP_CODEC) variable\n",codec);
1593 p->jointcapability=fmt;
1594 } else ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because of unrecognized/not configured codec (check allow/disallow in sip.conf): %s\n",codec);
1597 ast_setstate(ast, AST_STATE_UP);
1599 ast_log(LOG_DEBUG, "sip_answer(%s)\n", ast->name);
1600 res = transmit_response_with_sdp(p, "200 OK", &p->initreq, 1);
1605 /*--- sip_write: Send response, support audio media ---*/
1606 static int sip_write(struct ast_channel *ast, struct ast_frame *frame)
1608 struct sip_pvt *p = ast->pvt->pvt;
1610 if (frame->frametype == AST_FRAME_VOICE) {
1611 if (!(frame->subclass & ast->nativeformats)) {
1612 ast_log(LOG_WARNING, "Asked to transmit frame type %d, while native formats is %d (read/write = %d/%d)\n",
1613 frame->subclass, ast->nativeformats, ast->readformat, ast->writeformat);
1617 ast_mutex_lock(&p->lock);
1619 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1620 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1623 res = ast_rtp_write(p->rtp, frame);
1625 ast_mutex_unlock(&p->lock);
1627 } else if (frame->frametype == AST_FRAME_VIDEO) {
1629 ast_mutex_lock(&p->lock);
1631 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1632 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1635 res = ast_rtp_write(p->vrtp, frame);
1637 ast_mutex_unlock(&p->lock);
1639 } else if (frame->frametype == AST_FRAME_IMAGE) {
1642 ast_log(LOG_WARNING, "Can't send %d type frames with SIP write\n", frame->frametype);
1649 /*--- sip_fixup: Fix up a channel: If a channel is consumed, this is called.
1650 Basically update any ->owner links ----*/
1651 static int sip_fixup(struct ast_channel *oldchan, struct ast_channel *newchan)
1653 struct sip_pvt *p = newchan->pvt->pvt;
1654 ast_mutex_lock(&p->lock);
1655 if (p->owner != oldchan) {
1656 ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, p->owner);
1657 ast_mutex_unlock(&p->lock);
1661 ast_mutex_unlock(&p->lock);
1665 /*--- sip_senddigit: Send DTMF character on SIP channel */
1666 /* within one call, we're able to transmit in many methods simultaneously */
1667 static int sip_senddigit(struct ast_channel *ast, char digit)
1669 struct sip_pvt *p = ast->pvt->pvt;
1670 if (p && (p->dtmfmode & SIP_DTMF_INFO)) {
1671 transmit_info_with_digit(p, digit);
1673 if (p && p->rtp && (p->dtmfmode & SIP_DTMF_RFC2833)) {
1674 ast_rtp_senddigit(p->rtp, digit);
1676 /* If in-band DTMF is desired, send that */
1677 if (p->dtmfmode & SIP_DTMF_INBAND)
1683 /*--- sip_transfer: Transfer SIP call */
1684 static int sip_transfer(struct ast_channel *ast, char *dest)
1686 struct sip_pvt *p = ast->pvt->pvt;
1688 res = transmit_refer(p, dest);
1692 /*--- sip_indicate: Play indication to user */
1693 /* With SIP a lot of indications is sent as messages, letting the device play
1694 the indication - busy signal, congestion etc */
1695 static int sip_indicate(struct ast_channel *ast, int condition)
1697 struct sip_pvt *p = ast->pvt->pvt;
1699 case AST_CONTROL_RINGING:
1700 if (ast->_state == AST_STATE_RING) {
1702 transmit_response(p, "180 Ringing", &p->initreq);
1706 /* Oops, we've sent progress tones. Let Asterisk do it instead */
1710 case AST_CONTROL_BUSY:
1711 if (ast->_state != AST_STATE_UP) {
1712 transmit_response(p, "486 Busy Here", &p->initreq);
1714 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1718 case AST_CONTROL_CONGESTION:
1719 if (ast->_state != AST_STATE_UP) {
1720 transmit_response(p, "503 Service Unavailable", &p->initreq);
1722 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1726 case AST_CONTROL_PROGRESS:
1727 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1728 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1736 ast_log(LOG_WARNING, "Don't know how to indicate condition %d\n", condition);
1744 /*--- sip_new: Initiate a call in the SIP channel */
1745 /* called from sip_request_call (calls from the pbx ) */
1746 static struct ast_channel *sip_new(struct sip_pvt *i, int state, char *title)
1748 struct ast_channel *tmp;
1750 ast_mutex_unlock(&i->lock);
1751 /* Don't hold a sip pvt lock while we allocate a channel */
1752 tmp = ast_channel_alloc(1);
1753 ast_mutex_lock(&i->lock);
1755 /* Select our native format based on codec preference until we receive
1756 something from another device to the contrary. */
1757 if (i->jointcapability)
1758 tmp->nativeformats = sip_codec_choose(i->jointcapability);
1759 else if (i->capability)
1760 tmp->nativeformats = sip_codec_choose(i->capability);
1762 tmp->nativeformats = sip_codec_choose(capability);
1763 fmt = ast_best_codec(tmp->nativeformats);
1765 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%04x", title, rand() & 0xffff);
1767 if (strchr(i->fromdomain,':'))
1769 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", strchr(i->fromdomain,':')+1, (int)(i));
1773 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", i->fromdomain, (int)(i));
1776 if (i->dtmfmode & SIP_DTMF_INBAND) {
1777 i->vad = ast_dsp_new();
1778 ast_dsp_set_features(i->vad, DSP_FEATURE_DTMF_DETECT);
1780 ast_dsp_digitmode(i->vad, DSP_DIGITMODE_DTMF | DSP_DIGITMODE_RELAXDTMF);
1782 tmp->fds[0] = ast_rtp_fd(i->rtp);
1783 tmp->fds[1] = ast_rtcp_fd(i->rtp);
1785 tmp->fds[2] = ast_rtp_fd(i->vrtp);
1786 tmp->fds[3] = ast_rtcp_fd(i->vrtp);
1788 if (state == AST_STATE_RING)
1790 tmp->adsicpe = AST_ADSI_UNAVAILABLE;
1791 tmp->writeformat = fmt;
1792 tmp->pvt->rawwriteformat = fmt;
1793 tmp->readformat = fmt;
1794 tmp->pvt->rawreadformat = fmt;
1796 tmp->pvt->send_text = sip_sendtext;
1797 tmp->pvt->call = sip_call;
1798 tmp->pvt->hangup = sip_hangup;
1799 tmp->pvt->answer = sip_answer;
1800 tmp->pvt->read = sip_read;
1801 tmp->pvt->write = sip_write;
1802 tmp->pvt->write_video = sip_write;
1803 tmp->pvt->indicate = sip_indicate;
1804 tmp->pvt->transfer = sip_transfer;
1805 tmp->pvt->fixup = sip_fixup;
1806 tmp->pvt->send_digit = sip_senddigit;
1808 tmp->pvt->bridge = ast_rtp_bridge;
1810 tmp->callgroup = i->callgroup;
1811 tmp->pickupgroup = i->pickupgroup;
1812 tmp->restrictcid = i->restrictcid;
1813 if (!ast_strlen_zero(i->accountcode))
1814 strncpy(tmp->accountcode, i->accountcode, sizeof(tmp->accountcode)-1);
1816 tmp->amaflags = i->amaflags;
1817 if (!ast_strlen_zero(i->language))
1818 strncpy(tmp->language, i->language, sizeof(tmp->language)-1);
1819 if (!ast_strlen_zero(i->musicclass))
1820 strncpy(tmp->musicclass, i->musicclass, sizeof(tmp->musicclass)-1);
1822 ast_mutex_lock(&usecnt_lock);
1824 ast_mutex_unlock(&usecnt_lock);
1825 strncpy(tmp->context, i->context, sizeof(tmp->context)-1);
1826 strncpy(tmp->exten, i->exten, sizeof(tmp->exten)-1);
1827 if (!ast_strlen_zero(i->callerid))
1828 tmp->callerid = strdup(i->callerid);
1829 if (!ast_strlen_zero(i->rdnis))
1830 tmp->rdnis = strdup(i->rdnis);
1831 if (!ast_strlen_zero(i->exten) && strcmp(i->exten, "s"))
1832 tmp->dnid = strdup(i->exten);
1834 if (!ast_strlen_zero(i->domain)) {
1835 pbx_builtin_setvar_helper(tmp, "SIPDOMAIN", i->domain);
1837 if (!ast_strlen_zero(i->useragent)) {
1838 pbx_builtin_setvar_helper(tmp, "SIPUSERAGENT", i->useragent);
1840 if (!ast_strlen_zero(i->callid)) {
1841 pbx_builtin_setvar_helper(tmp, "SIPCALLID", i->callid);
1843 ast_setstate(tmp, state);
1844 if (state != AST_STATE_DOWN) {
1845 if (ast_pbx_start(tmp)) {
1846 ast_log(LOG_WARNING, "Unable to start PBX on %s\n", tmp->name);
1852 ast_log(LOG_WARNING, "Unable to allocate channel structure\n");
1856 static struct cfalias {
1860 { "Content-Type", "c" },
1861 { "Content-Encoding", "e" },
1865 { "Content-Length", "l" },
1868 { "Supported", "k" },
1869 { "Refer-To", "r" },
1870 { "Allow-Events", "u" },
1875 /*--- get_sdp_by_line: Reads one line of SIP message body */
1876 static char* get_sdp_by_line(char* line, char *name, int nameLen) {
1877 if (strncasecmp(line, name, nameLen) == 0 && line[nameLen] == '=') {
1878 char* r = line + nameLen + 1;
1879 while (*r && (*r < 33)) ++r;
1886 /*--- get_sdp: Gets all kind of SIP message bodies, including SDP,
1887 but the name wrongly applies _only_ sdp */
1888 static char *get_sdp(struct sip_request *req, char *name) {
1890 int len = strlen(name);
1893 for (x=0; x<req->lines; x++) {
1894 r = get_sdp_by_line(req->line[x], name, len);
1895 if (r[0] != '\0') return r;
1901 static void sdpLineNum_iterator_init(int* iterator) {
1905 static char* get_sdp_iterate(int* iterator,
1906 struct sip_request *req, char *name) {
1907 int len = strlen(name);
1909 while (*iterator < req->lines) {
1910 r = get_sdp_by_line(req->line[(*iterator)++], name, len);
1911 if (r[0] != '\0') return r;
1916 static char *__get_header(struct sip_request *req, char *name, int *start)
1919 int len = strlen(name);
1921 for (x=*start;x<req->headers;x++) {
1922 if (!strncasecmp(req->header[x], name, len) &&
1923 (req->header[x][len] == ':')) {
1924 r = req->header[x] + len + 1;
1925 while(*r && (*r < 33))
1932 for (x=0;x<sizeof(aliases) / sizeof(aliases[0]); x++)
1933 if (!strcasecmp(aliases[x].fullname, name))
1934 return __get_header(req, aliases[x].shortname, start);
1936 /* Don't return NULL, so get_header is always a valid pointer */
1940 /*--- get_header: Get header from SIP request ---*/
1941 static char *get_header(struct sip_request *req, char *name)
1944 return __get_header(req, name, &start);
1947 /*--- sip_rtp_read: Read RTP from network ---*/
1948 static struct ast_frame *sip_rtp_read(struct ast_channel *ast, struct sip_pvt *p)
1950 /* Retrieve audio/etc from channel. Assumes p->lock is already held. */
1951 struct ast_frame *f;
1952 static struct ast_frame null_frame = { AST_FRAME_NULL, };
1955 f = ast_rtp_read(p->rtp); /* RTP Audio */
1958 f = ast_rtcp_read(p->rtp); /* RTCP Control Channel */
1961 f = ast_rtp_read(p->vrtp); /* RTP Video */
1964 f = ast_rtcp_read(p->vrtp); /* RTCP Control Channel for video */
1969 /* Don't send RFC2833 if we're not supposed to */
1970 if (f && (f->frametype == AST_FRAME_DTMF) && !(p->dtmfmode & SIP_DTMF_RFC2833))
1973 /* We already hold the channel lock */
1974 if (f->frametype == AST_FRAME_VOICE) {
1975 if (f->subclass != p->owner->nativeformats) {
1976 ast_log(LOG_DEBUG, "Oooh, format changed to %d\n", f->subclass);
1977 p->owner->nativeformats = f->subclass;
1978 ast_set_read_format(p->owner, p->owner->readformat);
1979 ast_set_write_format(p->owner, p->owner->writeformat);
1981 if ((p->dtmfmode & SIP_DTMF_INBAND) && p->vad) {
1982 f = ast_dsp_process(p->owner,p->vad,f);
1983 if (f && (f->frametype == AST_FRAME_DTMF))
1984 ast_log(LOG_DEBUG, "Detected DTMF '%c'\n", f->subclass);
1991 /*--- sip_read: Read SIP RTP from channel */
1992 static struct ast_frame *sip_read(struct ast_channel *ast)
1994 struct ast_frame *fr;
1995 struct sip_pvt *p = ast->pvt->pvt;
1996 ast_mutex_lock(&p->lock);
1997 fr = sip_rtp_read(ast, p);
1998 time(&p->lastrtprx);
1999 ast_mutex_unlock(&p->lock);
2003 /*--- build_callid: Build SIP CALLID header ---*/
2004 static void build_callid(char *callid, int len, struct in_addr ourip)
2011 res = snprintf(callid, len, "%08x", val);
2015 /* It's not important that we really use our right IP here... */
2016 snprintf(callid, len, "@%s", inet_ntoa(ourip));
2019 /*--- sip_alloc: Allocate SIP_PVT structure and set defaults ---*/
2020 static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useglobalnat)
2024 p = malloc(sizeof(struct sip_pvt));
2025 ast_mutex_init(&p->lock);
2028 /* Keep track of stuff */
2029 memset(p, 0, sizeof(struct sip_pvt));
2033 p->rtp = ast_rtp_new(sched, io, 1, 0);
2035 p->vrtp = ast_rtp_new(sched, io, 1, 0);
2039 /* Start with 101 instead of 1 */
2042 ast_log(LOG_WARNING, "Unable to create RTP session: %s\n", strerror(errno));
2043 ast_mutex_destroy(&p->lock);
2047 ast_rtp_settos(p->rtp, tos);
2049 ast_rtp_settos(p->vrtp, tos);
2050 if (useglobalnat && sin) {
2051 /* Setup NAT structure according to global settings if we have an address */
2053 memcpy(&p->recv, sin, sizeof(p->recv));
2054 ast_rtp_setnat(p->rtp, p->nat);
2056 ast_rtp_setnat(p->vrtp, p->nat);
2060 memcpy(&p->sa, sin, sizeof(p->sa));
2061 if (ast_sip_ouraddrfor(&p->sa.sin_addr,&p->ourip))
2062 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2064 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2066 /* z9hG4bK is a magic cookie. See RFC 3261 section 8.1.1.7 */
2067 snprintf(p->via, sizeof(p->via), "SIP/2.0/UDP %s:%d;branch=z9hG4bK%08x", inet_ntoa(p->ourip), ourport, p->branch);
2069 build_callid(p->callid, sizeof(p->callid), p->ourip);
2071 strncpy(p->callid, callid, sizeof(p->callid) - 1);
2072 /* Assume reinvite OK and via INVITE */
2073 p->canreinvite = globalcanreinvite;
2074 /* Assign default music on hold class */
2075 strncpy(p->musicclass, globalmusicclass, sizeof(p->musicclass));
2076 p->dtmfmode = globaldtmfmode;
2077 p->rtptimeout = globalrtptimeout;
2078 p->rtpholdtimeout = globalrtpholdtimeout;
2079 p->capability = capability;
2080 if (p->dtmfmode & SIP_DTMF_RFC2833)
2081 p->noncodeccapability |= AST_RTP_DTMF;
2082 strncpy(p->context, context, sizeof(p->context) - 1);
2083 strncpy(p->fromdomain, fromdomain, sizeof(p->fromdomain) - 1);
2085 ast_mutex_lock(&iflock);
2088 ast_mutex_unlock(&iflock);
2090 ast_log(LOG_DEBUG, "Allocating new SIP call for %s\n", callid);
2094 /*--- find_call: Connect incoming SIP message to current call or create new call structure */
2095 /* Called by handle_request ,sipsock_read */
2096 static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *sin)
2104 callid = get_header(req, "Call-ID");
2106 if (pedanticsipchecking) {
2107 /* In principle Call-ID's uniquely identify a call, however some vendors
2108 (i.e. Pingtel) send multiple calls with the same Call-ID and different
2109 tags in order to simplify billing. The RFC does state that we have to
2110 compare tags in addition to the call-id, but this generate substantially
2111 more overhead which is totally unnecessary for the vast majority of sane
2112 SIP implementations, and thus Asterisk does not enable this behavior
2113 by default. Short version: You'll need this option to support conferencing
2115 strncpy(tmp, req->header[0], sizeof(tmp) - 1);
2117 c = strchr(tmp, ' ');
2120 if (!strcasecmp(cmd, "SIP/2.0")) {
2126 strncpy(tmp, get_header(req, "From"), sizeof(tmp) - 1);
2128 strncpy(tmp, get_header(req, "To"), sizeof(tmp) - 1);
2129 tag = strstr(tmp, "tag=");
2132 c = strchr(tag, ';');
2139 if (ast_strlen_zero(callid)) {
2140 ast_log(LOG_WARNING, "Call missing call ID from '%s'\n", inet_ntoa(sin->sin_addr));
2143 ast_mutex_lock(&iflock);
2146 if (!strcmp(p->callid, callid) &&
2147 (!pedanticsipchecking || !tag || ast_strlen_zero(p->theirtag) || !strcmp(p->theirtag, tag))) {
2148 /* Found the call */
2149 ast_mutex_lock(&p->lock);
2150 ast_mutex_unlock(&iflock);
2155 ast_mutex_unlock(&iflock);
2156 p = sip_alloc(callid, sin, 1);
2158 ast_mutex_lock(&p->lock);
2162 /*--- sip_register: Parse register=> line in sip.conf and add to registry */
2163 static int sip_register(char *value, int lineno)
2165 struct sip_registry *reg;
2166 char copy[256] = "";
2167 char *username=NULL, *hostname=NULL, *secret=NULL, *authuser=NULL;
2173 struct ast_hostent ahp;
2176 strncpy(copy, value, sizeof(copy)-1);
2179 hostname = strrchr(stringp, '@');
2184 if (!username || ast_strlen_zero(username) || !hostname || ast_strlen_zero(hostname)) {
2185 ast_log(LOG_WARNING, "Format for registration is user[:secret[:authuser]]@host[:port][/contact] at line %d", lineno);
2189 username = strsep(&stringp, ":");
2191 secret = strsep(&stringp, ":");
2193 authuser = strsep(&stringp, ":");
2196 hostname = strsep(&stringp, "/");
2198 contact = strsep(&stringp, "/");
2199 if (!contact || ast_strlen_zero(contact))
2202 hostname = strsep(&stringp, ":");
2203 porta = strsep(&stringp, ":");
2205 if (porta && !atoi(porta)) {
2206 ast_log(LOG_WARNING, "%s is not a valid port number at line %d\n", porta, lineno);
2209 hp = ast_gethostbyname(hostname, &ahp);
2211 ast_log(LOG_WARNING, "Host '%s' not found at line %d\n", hostname, lineno);
2214 reg = malloc(sizeof(struct sip_registry));
2216 memset(reg, 0, sizeof(struct sip_registry));
2217 strncpy(reg->contact, contact, sizeof(reg->contact) - 1);
2219 strncpy(reg->username, username, sizeof(reg->username)-1);
2221 strncpy(reg->hostname, hostname, sizeof(reg->hostname)-1);
2223 strncpy(reg->authuser, authuser, sizeof(reg->authuser)-1);
2225 strncpy(reg->secret, secret, sizeof(reg->secret)-1);
2228 reg->refresh = default_expiry;
2229 reg->addr.sin_family = AF_INET;
2230 memcpy(®->addr.sin_addr, hp->h_addr, sizeof(®->addr.sin_addr));
2231 reg->addr.sin_port = porta ? htons(atoi(porta)) : htons(DEFAULT_SIP_PORT);
2232 reg->callid_valid = 0;
2234 ast_mutex_lock(®l.lock);
2235 reg->next = regl.registrations;
2236 regl.registrations = reg;
2237 ast_mutex_unlock(®l.lock);
2239 ast_log(LOG_ERROR, "Out of memory\n");
2245 /*--- lws2sws: Parse multiline SIP headers into one header */
2246 /* This is enabled if pedanticsipchecking is enabled */
2247 static int lws2sws(char *msgbuf, int len)
2253 /* Eliminate all CRs */
2254 if (msgbuf[h] == '\r') {
2258 /* Check for end-of-line */
2259 if (msgbuf[h] == '\n') {
2260 /* Check for end-of-message */
2263 /* Check for a continuation line */
2264 if (msgbuf[h + 1] == ' ') {
2265 /* Merge continuation line */
2269 /* Propagate LF and start new line */
2270 msgbuf[t++] = msgbuf[h++];
2275 if (msgbuf[h] == ' ' || msgbuf[h] == '\t') {
2280 msgbuf[t++] = msgbuf[h++];
2284 msgbuf[t++] = msgbuf[h++];
2292 /*--- parse: Parse a SIP message ----*/
2293 static void parse(struct sip_request *req)
2295 /* Divide fields by NULL's */
2300 /* First header starts immediately */
2304 /* We've got a new header */
2308 printf("Header: %s (%d)\n", req->header[f], strlen(req->header[f]));
2310 if (ast_strlen_zero(req->header[f])) {
2311 /* Line by itself means we're now in content */
2315 if (f >= SIP_MAX_HEADERS - 1) {
2316 ast_log(LOG_WARNING, "Too many SIP headers...\n");
2319 req->header[f] = c + 1;
2320 } else if (*c == '\r') {
2321 /* Ignore but eliminate \r's */
2326 /* Check for last header */
2327 if (!ast_strlen_zero(req->header[f]))
2330 /* Now we process any mime content */
2335 /* We've got a new line */
2338 printf("Line: %s (%d)\n", req->line[f], strlen(req->line[f]));
2340 if (f >= SIP_MAX_LINES - 1) {
2341 ast_log(LOG_WARNING, "Too many SDP lines...\n");
2344 req->line[f] = c + 1;
2345 } else if (*c == '\r') {
2346 /* Ignore and eliminate \r's */
2351 /* Check for last line */
2352 if (!ast_strlen_zero(req->line[f]))
2356 ast_log(LOG_WARNING, "Odd content, extra stuff left over ('%s')\n", c);
2359 /*--- process_sdp: Process SIP SDP ---*/
2360 static int process_sdp(struct sip_pvt *p, struct sip_request *req)
2369 int peercapability, peernoncodeccapability;
2370 int vpeercapability=0, vpeernoncodeccapability=0;
2371 struct sockaddr_in sin;
2374 struct ast_hostent ahp;
2380 /* Update our last rtprx when we receive an SDP, too */
2381 time(&p->lastrtprx);
2383 /* Get codec and RTP info from SDP */
2384 if (strcasecmp(get_header(req, "Content-Type"), "application/sdp")) {
2385 ast_log(LOG_NOTICE, "Content is '%s', not 'application/sdp'\n", get_header(req, "Content-Type"));
2388 m = get_sdp(req, "m");
2389 c = get_sdp(req, "c");
2390 if (ast_strlen_zero(m) || ast_strlen_zero(c)) {
2391 ast_log(LOG_WARNING, "Insufficient information for SDP (m = '%s', c = '%s')\n", m, c);
2394 if (sscanf(c, "IN IP4 %256s", host) != 1) {
2395 ast_log(LOG_WARNING, "Invalid host in c= line, '%s'\n", c);
2398 /* XXX This could block for a long time, and block the main thread! XXX */
2399 hp = ast_gethostbyname(host, &ahp);
2401 ast_log(LOG_WARNING, "Unable to lookup host in c= line, '%s'\n", c);
2404 sdpLineNum_iterator_init(&iterator);
2405 while ((m = get_sdp_iterate(&iterator, req, "m"))[0] != '\0') {
2406 if ((sscanf(m, "audio %d RTP/AVP %n", &x, &len) == 1)) {
2408 /* Scan through the RTP payload types specified in a "m=" line: */
2409 ast_rtp_pt_clear(p->rtp);
2411 while(!ast_strlen_zero(codecs)) {
2412 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2413 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2416 if (sip_debug_test_pvt(p))
2417 ast_verbose("Found RTP audio format %d\n", codec);
2418 ast_rtp_set_m_type(p->rtp, codec);
2420 /* Skip over any whitespace */
2421 while(*codecs && (*codecs < 33)) codecs++;
2425 ast_rtp_pt_clear(p->vrtp); /* Must be cleared in case no m=video line exists */
2427 if (p->vrtp && (sscanf(m, "video %d RTP/AVP %n", &x, &len) == 1)) {
2429 /* Scan through the RTP payload types specified in a "m=" line: */
2431 while(!ast_strlen_zero(codecs)) {
2432 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2433 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2436 if (sip_debug_test_pvt(p))
2437 ast_verbose("Found video format %s\n", ast_getformatname(codec));
2438 ast_rtp_set_m_type(p->vrtp, codec);
2440 /* Skip over any whitespace */
2441 while(*codecs && (*codecs < 33)) codecs++;
2446 /* RTP addresses and ports for audio and video */
2447 sin.sin_family = AF_INET;
2448 memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
2449 /* Setup audio port number */
2450 sin.sin_port = htons(portno);
2451 if (p->rtp && sin.sin_port)
2452 ast_rtp_set_peer(p->rtp, &sin);
2453 /* Setup video port number */
2454 sin.sin_port = htons(vportno);
2455 if (p->vrtp && sin.sin_port)
2456 ast_rtp_set_peer(p->vrtp, &sin);
2459 ast_verbose("Peer RTP is at port %s:%d\n", inet_ntoa(sin.sin_addr), ntohs(sin.sin_port));
2461 /* Next, scan through each "a=rtpmap:" line, noting each
2462 * specified RTP payload type (with corresponding MIME subtype):
2464 sdpLineNum_iterator_init(&iterator);
2465 while ((a = get_sdp_iterate(&iterator, req, "a"))[0] != '\0') {
2466 char* mimeSubtype = ast_strdupa(a); /* ensures we have enough space */
2467 if (!strcasecmp(a, "sendonly")) {
2471 if (!strcasecmp(a, "sendrecv")) {
2474 if (sscanf(a, "rtpmap: %u %[^/]/", &codec, mimeSubtype) != 2) continue;
2475 if (sip_debug_test_pvt(p))
2476 ast_verbose("Found description format %s\n", mimeSubtype);
2477 /* Note: should really look at the 'freq' and '#chans' params too */
2478 ast_rtp_set_rtpmap_type(p->rtp, codec, "audio", mimeSubtype);
2480 ast_rtp_set_rtpmap_type(p->vrtp, codec, "video", mimeSubtype);
2483 /* Now gather all of the codecs that were asked for: */
2484 ast_rtp_get_current_formats(p->rtp,
2485 &peercapability, &peernoncodeccapability);
2487 ast_rtp_get_current_formats(p->vrtp,
2488 &vpeercapability, &vpeernoncodeccapability);
2489 p->jointcapability = p->capability & (peercapability | vpeercapability);
2490 p->noncodeccapability = noncodeccapability & (peernoncodeccapability | vpeernoncodeccapability);
2492 if (sip_debug_test_pvt(p)) {
2493 const unsigned slen=80;
2494 char s1[slen], s2[slen], s3[slen], s4[slen];
2496 ast_verbose("Capabilities: us - %s, peer - audio=%s/video=%s, combined - %s\n",
2497 ast_getformatname_multiple(s1, slen, p->capability),
2498 ast_getformatname_multiple(s2, slen, peercapability),
2499 ast_getformatname_multiple(s3, slen, vpeercapability),
2500 ast_getformatname_multiple(s4, slen, p->jointcapability));
2502 ast_verbose("Non-codec capabilities: us - %s, peer - %s, combined - %s\n",
2503 ast_getformatname_multiple(s1, slen, noncodeccapability),
2504 ast_getformatname_multiple(s2, slen, peernoncodeccapability),
2505 ast_getformatname_multiple(s3, slen, p->noncodeccapability));
2507 if (!p->jointcapability) {
2508 ast_log(LOG_WARNING, "No compatible codecs!\n");
2512 if (!(p->owner->nativeformats & p->jointcapability)) {
2513 const unsigned slen=80;
2514 char s1[slen], s2[slen];
2515 ast_log(LOG_DEBUG, "Oooh, we need to change our formats since our peer supports only %s and not %s\n",
2516 ast_getformatname_multiple(s1, slen, p->jointcapability),
2517 ast_getformatname_multiple(s2, slen, p->owner->nativeformats));
2518 p->owner->nativeformats = sip_codec_choose(p->jointcapability);
2519 ast_set_read_format(p->owner, p->owner->readformat);
2520 ast_set_write_format(p->owner, p->owner->writeformat);
2522 if (p->owner->bridge) {
2523 /* Turn on/off music on hold if we are holding/unholding */
2524 if (sin.sin_addr.s_addr && !sendonly) {
2525 ast_moh_stop(p->owner->bridge);
2527 ast_moh_start(p->owner->bridge, NULL);
2535 /*--- add_header: Add header to SIP message */
2536 static int add_header(struct sip_request *req, char *var, char *value)
2538 if (req->len >= sizeof(req->data) - 4) {
2539 ast_log(LOG_WARNING, "Out of space, can't add anymore (%s:%s)\n", var, value);
2543 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2546 req->header[req->headers] = req->data + req->len;
2547 snprintf(req->header[req->headers], sizeof(req->data) - req->len - 4, "%s: %s\r\n", var, value);
2548 req->len += strlen(req->header[req->headers]);
2549 if (req->headers < SIP_MAX_HEADERS)
2552 ast_log(LOG_WARNING, "Out of header space\n");
2558 /*--- add_blank_header: Add blank header to SIP message */
2559 static int add_blank_header(struct sip_request *req)
2561 if (req->len >= sizeof(req->data) - 4) {
2562 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2566 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2569 req->header[req->headers] = req->data + req->len;
2570 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "\r\n");
2571 req->len += strlen(req->header[req->headers]);
2572 if (req->headers < SIP_MAX_HEADERS)
2575 ast_log(LOG_WARNING, "Out of header space\n");
2581 /*--- add_line: Add content (not header) to SIP message */
2582 static int add_line(struct sip_request *req, char *line)
2584 if (req->len >= sizeof(req->data) - 4) {
2585 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2589 /* Add extra empty return */
2590 snprintf(req->data + req->len, sizeof(req->data) - req->len, "\r\n");
2591 req->len += strlen(req->data + req->len);
2593 req->line[req->lines] = req->data + req->len;
2594 snprintf(req->line[req->lines], sizeof(req->data) - req->len, "%s", line);
2595 req->len += strlen(req->line[req->lines]);
2596 if (req->lines < SIP_MAX_LINES)
2599 ast_log(LOG_WARNING, "Out of line space\n");
2605 /*--- copy_header: Copy one header field from one request to another */
2606 static int copy_header(struct sip_request *req, struct sip_request *orig, char *field)
2609 tmp = get_header(orig, field);
2610 if (!ast_strlen_zero(tmp)) {
2611 /* Add what we're responding to */
2612 return add_header(req, field, tmp);
2614 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2618 /*--- copy_all_header: Copy all headers from one request to another ---*/
2619 static int copy_all_header(struct sip_request *req, struct sip_request *orig, char *field)
2625 tmp = __get_header(orig, field, &start);
2626 if (!ast_strlen_zero(tmp)) {
2627 /* Add what we're responding to */
2628 add_header(req, field, tmp);
2633 return copied ? 0 : -1;
2636 /*--- copy_via_headers: Copy SIP VIA Headers from one request to another ---*/
2637 static int copy_via_headers(struct sip_pvt *p, struct sip_request *req, struct sip_request *orig, char *field)
2644 tmp = __get_header(orig, field, &start);
2645 if (!ast_strlen_zero(tmp)) {
2646 if (!copied && p->nat) {
2647 #ifdef THE_SIP_AUTHORS_CAN_SUCK_MY_GONADS
2648 /* SLD: FIXME: Nice try, but the received= should not have a port */
2649 /* SLD: FIXME: See RFC2543 BNF in Section 6.40.5 */
2650 /* MAS: Yup, RFC says you can't do it. No way to indicate PAT...
2652 if (ntohs(p->recv.sin_port) != DEFAULT_SIP_PORT)
2653 snprintf(new, sizeof(new), "%s;received=%s:%d", tmp, inet_ntoa(p->recv.sin_addr), ntohs(p->recv.sin_port));
2656 snprintf(new, sizeof(new), "%s;received=%s", tmp, inet_ntoa(p->recv.sin_addr));
2657 add_header(req, field, new);
2659 /* Add what we're responding to */
2660 add_header(req, field, tmp);
2667 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2673 /*--- add_route: Add route header into request per learned route ---*/
2674 static void add_route(struct sip_request *req, struct sip_route *route)
2677 int n, rem = 255; /* sizeof(r)-1: Room for terminating 0 */
2683 n = strlen(route->hop);
2684 if ((n+3)>rem) break;
2690 strcpy(p, route->hop); p += n;
2693 route = route->next;
2696 add_header(req, "Route", r);
2699 /*--- set_destination: Set destination from SIP URI ---*/
2700 static void set_destination(struct sip_pvt *p, char *uri)
2702 char *h, *maddr, hostname[256];
2705 struct ast_hostent ahp;
2707 /* Parse uri to h (host) and port - uri is already just the part inside the <> */
2708 /* general form we are expecting is sip[s]:username[:password]@host[:port][;...] */
2710 if (sip_debug_test_pvt(p))
2711 ast_verbose("set_destination: Parsing <%s> for address/port to send to\n", uri);
2713 /* Find and parse hostname */
2714 h = strchr(uri, '@');
2719 if (strncmp(h, "sip:", 4) == 0)
2721 else if (strncmp(h, "sips:", 5) == 0)
2724 hn = strcspn(h, ":;>");
2726 strncpy(hostname, h, hn); hostname[hn] = '\0';
2729 /* Is "port" present? if not default to 5060 */
2733 port = strtol(h, &h, 10);
2738 /* Got the hostname:port - but maybe there's a "maddr=" to override address? */
2739 maddr = strstr(h, "maddr=");
2742 hn = strspn(maddr, "0123456789.");
2744 strncpy(hostname, maddr, hn); hostname[hn] = '\0';
2747 hp = ast_gethostbyname(hostname, &ahp);
2749 ast_log(LOG_WARNING, "Can't find address for host '%s'\n", hostname);
2752 p->sa.sin_family = AF_INET;
2753 memcpy(&p->sa.sin_addr, hp->h_addr, sizeof(p->sa.sin_addr));
2754 p->sa.sin_port = htons(port);
2755 if (sip_debug_test_pvt(p))
2756 ast_verbose("set_destination: set destination to %s, port %d\n", inet_ntoa(p->sa.sin_addr), port);
2759 /*--- init_resp: Initialize SIP response, based on SIP request ---*/
2760 static int init_resp(struct sip_request *req, char *resp, struct sip_request *orig)
2762 /* Initialize a response */
2763 if (req->headers || req->len) {
2764 ast_log(LOG_WARNING, "Request already initialized?!?\n");
2767 req->header[req->headers] = req->data + req->len;
2768 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "SIP/2.0 %s\r\n", resp);
2769 req->len += strlen(req->header[req->headers]);
2770 if (req->headers < SIP_MAX_HEADERS)
2773 ast_log(LOG_WARNING, "Out of header space\n");
2777 /*--- init_req: Initialize SIP request ---*/
2778 static int init_req(struct sip_request *req, char *resp, char *recip)
2780 /* Initialize a response */
2781 if (req->headers || req->len) {
2782 ast_log(LOG_WARNING, "Request already initialized?!?\n");
2785 req->header[req->headers] = req->data + req->len;
2786 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "%s %s SIP/2.0\r\n", resp, recip);
2787 req->len += strlen(req->header[req->headers]);
2788 if (req->headers < SIP_MAX_HEADERS)
2791 ast_log(LOG_WARNING, "Out of header space\n");
2796 static int respprep(struct sip_request *resp, struct sip_pvt *p, char *msg, struct sip_request *req)
2798 char newto[256] = "", *ot;
2799 memset(resp, 0, sizeof(*resp));
2800 init_resp(resp, msg, req);
2801 copy_via_headers(p, resp, req, "Via");
2802 if (msg[0] == '2') copy_all_header(resp, req, "Record-Route");
2803 copy_header(resp, req, "From");
2804 ot = get_header(req, "To");
2805 if (!strstr(ot, "tag=")) {
2806 /* Add the proper tag if we don't have it already. If they have specified
2807 their tag, use it. Otherwise, use our own tag */
2808 if (!ast_strlen_zero(p->theirtag) && p->outgoing)
2809 snprintf(newto, sizeof(newto), "%s;tag=%s", ot, p->theirtag);
2810 else if (p->tag && !p->outgoing)
2811 snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag);
2813 strncpy(newto, ot, sizeof(newto) - 1);
2816 add_header(resp, "To", ot);
2817 copy_header(resp, req, "Call-ID");
2818 copy_header(resp, req, "CSeq");
2819 add_header(resp, "User-Agent", useragent);
2820 add_header(resp, "Allow", ALLOWED_METHODS);
2822 /* For registration responses, we also need expiry and
2826 snprintf(contact, sizeof(contact), "%s;expires=%d", p->our_contact, p->expiry);
2827 snprintf(tmp, sizeof(tmp), "%d", p->expiry);
2828 add_header(resp, "Expires", tmp);
2829 add_header(resp, "Contact", contact);
2831 add_header(resp, "Contact", p->our_contact);
2836 static int reqprep(struct sip_request *req, struct sip_pvt *p, char *msg, int seqno, int newbranch)
2838 struct sip_request *orig = &p->initreq;
2839 char stripped[80] ="";
2845 memset(req, 0, sizeof(struct sip_request));
2847 snprintf(p->lastmsg, sizeof(p->lastmsg), "Tx: %s", msg);
2855 p->branch ^= rand();
2856 snprintf(p->via, sizeof(p->via), "SIP/2.0/UDP %s:%d;branch=z9hG4bK%08x", inet_ntoa(p->ourip), ourport, p->branch);
2859 if (!ast_strlen_zero(p->uri)) {
2863 strncpy(stripped, get_header(orig, "To"), sizeof(stripped) - 1);
2865 strncpy(stripped, get_header(orig, "From"), sizeof(stripped) - 1);
2867 c = strchr(stripped, '<');
2879 init_req(req, msg, c);
2881 snprintf(tmp, sizeof(tmp), "%d %s", seqno, msg);
2883 add_header(req, "Via", p->via);
2885 set_destination(p, p->route->hop);
2886 add_route(req, p->route->next);
2889 ot = get_header(orig, "To");
2890 of = get_header(orig, "From");
2892 /* Add tag *unless* this is a CANCEL, in which case we need to send it exactly
2893 as our original request, including tag (or presumably lack thereof) */
2894 if (!strstr(ot, "tag=") && strcasecmp(msg, "CANCEL")) {
2895 /* Add the proper tag if we don't have it already. If they have specified
2896 their tag, use it. Otherwise, use our own tag */
2897 if (p->outgoing && !ast_strlen_zero(p->theirtag))
2898 snprintf(newto, sizeof(newto), "%s;tag=%s", ot, p->theirtag);
2899 else if (!p->outgoing)
2900 snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag);
2902 snprintf(newto, sizeof(newto), "%s", ot);
2907 add_header(req, "From", of);
2908 add_header(req, "To", ot);
2910 add_header(req, "From", ot);
2911 add_header(req, "To", of);
2913 add_header(req, "Contact", p->our_contact);
2914 copy_header(req, orig, "Call-ID");
2915 add_header(req, "CSeq", tmp);
2917 add_header(req, "User-Agent", useragent);
2921 static int __transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req, int reliable)
2923 struct sip_request resp;
2925 if (reliable && (sscanf(get_header(req, "CSeq"), "%i ", &seqno) != 1)) {
2926 ast_log(LOG_WARNING, "Unable to determine sequence number from '%s'\n", get_header(req, "CSeq"));
2929 respprep(&resp, p, msg, req);
2930 add_header(&resp, "Content-Length", "0");
2931 add_blank_header(&resp);
2932 return send_response(p, &resp, reliable, seqno);
2935 /*--- transmit_response: Transmit response, no retransmits */
2936 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req)
2938 return __transmit_response(p, msg, req, 0);
2941 /*--- transmit_response: Transmit response, Make sure you get a reply */
2942 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal)
2944 return __transmit_response(p, msg, req, fatal ? 2 : 1);
2947 /*--- append_date: Append date to SIP message ---*/
2948 static void append_date(struct sip_request *req)
2955 strftime(tmpdat, sizeof(tmpdat), "%a, %d %b %Y %T GMT", &tm);
2956 add_header(req, "Date", tmpdat);
2959 /*--- transmit_response_with_date: Append date and content length before transmitting response ---*/
2960 static int transmit_response_with_date(struct sip_pvt *p, char *msg, struct sip_request *req)
2962 struct sip_request resp;
2963 respprep(&resp, p, msg, req);
2965 add_header(&resp, "Content-Length", "0");
2966 add_blank_header(&resp);
2967 return send_response(p, &resp, 0, 0);
2970 /*--- transmit_response_with_allow: Append Accept header, content length before transmitting response ---*/
2971 static int transmit_response_with_allow(struct sip_pvt *p, char *msg, struct sip_request *req, int reliable)
2973 struct sip_request resp;
2974 respprep(&resp, p, msg, req);
2975 add_header(&resp, "Accept", "application/sdp");
2976 add_header(&resp, "Content-Length", "0");
2977 add_blank_header(&resp);
2978 return send_response(p, &resp, reliable, 0);
2981 /* transmit_response_with_auth: Respond with authorization request */
2982 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *randdata, int reliable, char *header)
2984 struct sip_request resp;
2987 if (reliable && (sscanf(get_header(req, "CSeq"), "%i ", &seqno) != 1)) {
2988 ast_log(LOG_WARNING, "Unable to determine sequence number from '%s'\n", get_header(req, "CSeq"));
2991 snprintf(tmp, sizeof(tmp), "Digest realm=\"%s\", nonce=\"%s\"", global_realm, randdata);
2992 respprep(&resp, p, msg, req);
2993 add_header(&resp, header, tmp);
2994 add_header(&resp, "Content-Length", "0");
2995 add_blank_header(&resp);
2996 return send_response(p, &resp, reliable, seqno);
2999 /*--- add_text: Add text body to SIP message ---*/
3000 static int add_text(struct sip_request *req, char *text)
3002 /* XXX Convert \n's to \r\n's XXX */
3003 int len = strlen(text);
3005 snprintf(clen, sizeof(clen), "%d", len);
3006 add_header(req, "Content-Type", "text/plain");
3007 add_header(req, "Content-Length", clen);
3008 add_line(req, text);
3012 /*--- add_digit: add DTMF INFO tone to sip message ---*/
3013 /* Always adds default duration 250 ms, regardless of what came in over the line */
3014 static int add_digit(struct sip_request *req, char digit)
3019 snprintf(tmp, sizeof(tmp), "Signal=%c\r\nDuration=250\r\n", digit);
3021 snprintf(clen, sizeof(clen), "%d", len);
3022 add_header(req, "Content-Type", "application/dtmf-relay");
3023 add_header(req, "Content-Length", clen);
3028 /*--- add_sdp: Add Session Description Protocol message ---*/
3029 static int add_sdp(struct sip_request *resp, struct sip_pvt *p)
3033 int alreadysent = 0;
3035 struct sockaddr_in sin;
3036 struct sockaddr_in vsin;
3037 struct sip_codec_pref *cur;
3049 struct sockaddr_in dest;
3050 struct sockaddr_in vdest = { 0, };
3051 /* XXX We break with the "recommendation" and send our IP, in order that our
3052 peer doesn't have to ast_gethostbyname() us XXX */
3055 ast_log(LOG_WARNING, "No way to add SDP without an RTP structure\n");
3058 capability = p->jointcapability;
3060 if (!p->sessionid) {
3061 p->sessionid = getpid();
3062 p->sessionversion = p->sessionid;
3064 p->sessionversion++;
3065 ast_rtp_get_us(p->rtp, &sin);
3067 ast_rtp_get_us(p->vrtp, &vsin);