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/features.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 default_useragent[AST_MAX_EXTENSION] = DEFAULT_USERAGENT;
137 static char default_context[AST_MAX_EXTENSION] = "default";
139 static char default_language[MAX_LANGUAGE] = "";
141 static char default_callerid[AST_MAX_EXTENSION] = "asterisk";
143 static char default_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 global_rtptimeout = 0;
157 static int global_rtpholdtimeout = 0;
159 static int global_trustrpid = 0;
161 static int global_progressinband = 0;
164 static int global_ospauth = 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 global_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 global_dtmfmode = SIP_DTMF_RFC2833; /* DTMF mode default */
201 static int recordhistory = 0;
202 static int global_promiscredir;
204 static char global_musicclass[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 int portno; /* Optional port override */
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 global_nat = SIP_NAT_RFC3581;
531 static int global_canreinvite = 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)) {
610 char iabuf[INET_ADDRSTRLEN];
611 memcpy(us, &externip.sin_addr, sizeof(struct in_addr));
612 ast_inet_ntoa(iabuf, sizeof(iabuf), *(struct in_addr *)&them->s_addr);
613 ast_log(LOG_DEBUG, "Target address %s is not local, substituting externip\n", iabuf);
615 else if (bindaddr.sin_addr.s_addr)
616 memcpy(us, &bindaddr.sin_addr, sizeof(struct in_addr));
618 return ast_ouraddrfor(them, us);
622 static int append_history(struct sip_pvt *p, char *event, char *data)
624 struct sip_history *hist, *prev;
628 hist = malloc(sizeof(struct sip_history));
630 memset(hist, 0, sizeof(struct sip_history));
631 snprintf(hist->event, sizeof(hist->event), "%-15s %s", event, data);
635 if ((*c == '\r') || (*c == '\n')) {
641 /* Enqueue into history */
654 /*--- retrans_pkt: Retransmit SIP message if no answer ---*/
655 static int retrans_pkt(void *data)
657 struct sip_pkt *pkt=data, *prev, *cur;
659 char iabuf[INET_ADDRSTRLEN];
660 ast_mutex_lock(&pkt->owner->lock);
661 if (pkt->retrans < MAX_RETRANS) {
663 if (sip_debug_test_pvt(pkt->owner)) {
664 if (pkt->owner->nat == SIP_NAT_ALWAYS)
665 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));
667 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));
669 append_history(pkt->owner, "ReTx", pkt->data);
670 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
673 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");
674 append_history(pkt->owner, "MaxRetries", pkt->flags & FLAG_FATAL ? "(Critical)" : "(Non-critical)");
676 if (pkt->flags & FLAG_FATAL) {
677 while(pkt->owner->owner && ast_mutex_trylock(&pkt->owner->owner->lock)) {
678 ast_mutex_unlock(&pkt->owner->lock);
680 ast_mutex_lock(&pkt->owner->lock);
682 if (pkt->owner->owner) {
683 ast_queue_hangup(pkt->owner->owner);
684 ast_mutex_unlock(&pkt->owner->owner->lock);
686 /* If no owner, destroy now */
687 pkt->owner->needdestroy = 1;
690 /* In any case, go ahead and remove the packet */
692 cur = pkt->owner->packets;
701 prev->next = cur->next;
703 pkt->owner->packets = cur->next;
704 ast_mutex_unlock(&pkt->owner->lock);
708 ast_log(LOG_WARNING, "Weird, couldn't find packet owner!\n");
711 ast_mutex_unlock(&pkt->owner->lock);
715 /*--- __sip_reliable_xmit: transmit packet with retransmits ---*/
716 static int __sip_reliable_xmit(struct sip_pvt *p, int seqno, int resp, char *data, int len, int fatal)
719 pkt = malloc(sizeof(struct sip_pkt) + len + 1);
722 memset(pkt, 0, sizeof(struct sip_pkt));
723 memcpy(pkt->data, data, len);
724 pkt->packetlen = len;
725 pkt->next = p->packets;
729 pkt->data[len] = '\0';
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, const char *msg)
789 struct sip_pkt *cur, *prev = NULL;
792 /* Just in case... */
793 if (!msg) msg = "___NEVER___";
796 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp) &&
797 ((cur->flags & FLAG_RESPONSE) ||
798 (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
799 if (!resp && (seqno == p->pendinginvite)) {
800 ast_log(LOG_DEBUG, "Acked pending invite %d\n", p->pendinginvite);
801 p->pendinginvite = 0;
804 /* this is our baby */
806 prev->next = cur->next;
808 p->packets = cur->next;
809 if (cur->retransid > -1)
810 ast_sched_del(sched, cur->retransid);
818 ast_log(LOG_DEBUG, "Stopping retransmission on '%s' of %s %d: %s\n", p->callid, resp ? "Response" : "Request", seqno, res ? "Not Found" : "Found");
822 /*--- __sip_semi_ack: Acks receipt of packet, keep it around (used for provisional responses) ---*/
823 static int __sip_semi_ack(struct sip_pvt *p, int seqno, int resp, const char *msg)
829 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp) &&
830 ((cur->flags & FLAG_RESPONSE) ||
831 (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
832 /* this is our baby */
833 if (cur->retransid > -1)
834 ast_sched_del(sched, cur->retransid);
841 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");
845 static void parse(struct sip_request *req);
846 static char *get_header(struct sip_request *req, char *name);
847 static void copy_request(struct sip_request *dst,struct sip_request *src);
849 static void parse_copy(struct sip_request *dst, struct sip_request *src)
851 memset(dst, 0, sizeof(*dst));
852 memcpy(dst->data, src->data, sizeof(dst->data));
856 /*--- send_response: Transmit response on SIP request---*/
857 static int send_response(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
860 char iabuf[INET_ADDRSTRLEN];
861 struct sip_request tmp;
863 if (sip_debug_test_pvt(p)) {
864 if (p->nat == SIP_NAT_ALWAYS)
865 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));
867 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));
871 parse_copy(&tmp, req);
872 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
873 append_history(p, "TxRespRel", tmpmsg);
875 res = __sip_reliable_xmit(p, seqno, 1, req->data, req->len, (reliable > 1));
878 parse_copy(&tmp, req);
879 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
880 append_history(p, "TxResp", tmpmsg);
882 res = __sip_xmit(p, req->data, req->len);
889 /*--- send_request: Send SIP Request to the other part of the dialogue ---*/
890 static int send_request(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
893 char iabuf[INET_ADDRSTRLEN];
894 struct sip_request tmp;
896 if (sip_debug_test_pvt(p)) {
897 if (p->nat == SIP_NAT_ALWAYS)
898 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));
900 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));
904 parse_copy(&tmp, req);
905 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
906 append_history(p, "TxReqRel", tmpmsg);
908 res = __sip_reliable_xmit(p, seqno, 0, req->data, req->len, (reliable > 1));
911 parse_copy(&tmp, req);
912 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
913 append_history(p, "TxReq", tmpmsg);
915 res = __sip_xmit(p, req->data, req->len);
920 /*--- url_decode: Decode SIP URL ---*/
921 static void url_decode(char *s)
929 if (sscanf(s + 1, "%2x", &tmp) == 1) {
931 s += 2; /* Will be incremented once more when we break out */
935 /* Fall through if something wasn't right with the formatting */
945 /*--- ditch_braces: Pick out text in braces from character string ---*/
946 static char *ditch_braces(char *tmp)
950 if ((n = strchr(tmp, '<')) ) {
952 while(*c && *c != '>') c++;
954 ast_log(LOG_WARNING, "No closing brace in '%s'\n", tmp);
963 /*--- sip_sendtext: Send SIP MESSAGE text within a call ---*/
964 /* Called from PBX core text message functions */
965 static int sip_sendtext(struct ast_channel *ast, char *text)
967 struct sip_pvt *p = ast->pvt->pvt;
968 int debug=sip_debug_test_pvt(p);
971 ast_verbose("Sending text %s on %s\n", text, ast->name);
974 if (!text || ast_strlen_zero(text))
977 ast_verbose("Really sending text %s on %s\n", text, ast->name);
978 transmit_message_with_text(p, text);
984 /* Ehud Gavron 08-Jun-2004: */
985 /* The Mysql stuff works great for peers but not for users. */
986 /* Unfortunately multi-line phones (e.g. cisco 7960) and many */
987 /* SIP users behind the same NAT gateway need users. So.... */
989 /* mysql_update_user is not needed */
990 /*--- mysql_host: Get user from database ---*/
991 static struct sip_user *mysql_user(char *user)
995 u = malloc(sizeof(struct sip_user));
996 memset(u, 0, sizeof(struct sip_user));
997 if (mysql && (!user || (strlen(user) < 128))) {
1001 time_t regseconds, nowtime;
1003 MYSQL_FIELD *fields;
1006 name = alloca(strlen(user) * 2 + 1);
1007 mysql_real_escape_string(mysql, name, user, strlen(user));
1010 snprintf(query, sizeof(query), "SELECT name, secret, context, username, ipaddr, port, regseconds, callerid, restrictcid FROM sipfriends WHERE name=\"%s\"", name);
1012 ast_mutex_lock(&mysqllock);
1013 mysql_query(mysql, query);
1014 if ((result = mysql_store_result(mysql))) {
1016 if ((rowval = mysql_fetch_row(result))) {
1017 numfields = mysql_num_fields(result);
1018 fields = mysql_fetch_fields(result);
1020 for (x=0;x<numfields;x++) {
1022 if (!strcasecmp(fields[x].name, "secret")) {
1023 strncpy(u->secret, rowval[x], sizeof(u->secret) - 1);
1024 } else if (!strcasecmp(fields[x].name, "name")) {
1025 strncpy(u->name, rowval[x], sizeof(u->name) - 1);
1026 } else if (!strcasecmp(fields[x].name, "context")) {
1027 strncpy(u->context, rowval[x], sizeof(u->context) - 1);
1028 } else if (!strcasecmp(fields[x].name, "username")) {
1029 strncpy(u->name, rowval[x], sizeof(u->name) - 1);
1030 } else if (!strcasecmp(fields[x].name, "regseconds")) {
1031 if (sscanf(rowval[x], "%li", ®seconds) != 1)
1033 } else if (!strcasecmp(fields[x].name, "restrictcid")) {
1035 } else if (!strcasecmp(fields[x].name, "callerid")) {
1036 strncpy(u->callerid, rowval[x], sizeof(u->callerid) - 1);
1043 mysql_free_result(result);
1046 ast_mutex_unlock(&mysqllock);
1052 u->capability = global_capability;
1053 u->nat = global_nat;
1054 u->dtmfmode = global_dtmfmode;
1060 #endif /* MYSQL_USERS */
1062 #ifdef MYSQL_FRIENDS
1063 /*--- mysql_update_peer: Update peer from database ---*/
1064 /* This function adds registration state to database */
1065 static void mysql_update_peer(char *peer, struct sockaddr_in *sin, char *username, int expiry)
1067 if (mysql && (strlen(peer) < 128)) {
1071 char iabuf[INET_ADDRSTRLEN];
1073 name = alloca(strlen(peer) * 2 + 1);
1074 uname = alloca(strlen(username) * 2 + 1);
1076 mysql_real_escape_string(mysql, name, peer, strlen(peer));
1077 mysql_real_escape_string(mysql, uname, username, strlen(username));
1078 snprintf(query, sizeof(query), "UPDATE sipfriends SET ipaddr=\"%s\", port=\"%d\", regseconds=\"%ld\", username=\"%s\" WHERE name=\"%s\"",
1079 ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr), ntohs(sin->sin_port), nowtime + expiry, uname, name);
1080 ast_mutex_lock(&mysqllock);
1081 if (mysql_real_query(mysql, query, strlen(query)))
1082 ast_log(LOG_WARNING, "Unable to update database\n");
1084 ast_mutex_unlock(&mysqllock);
1088 /*--- mysql_peer: Get peer from database ---*/
1089 static struct sip_peer *mysql_peer(char *peer, struct sockaddr_in *sin)
1094 p = malloc(sizeof(struct sip_peer));
1095 memset(p, 0, sizeof(struct sip_peer));
1096 if (mysql && (!peer || (strlen(peer) < 128))) {
1101 char iabuf[INET_ADDRSTRLEN];
1102 time_t regseconds, nowtime;
1104 MYSQL_FIELD *fields;
1107 name = alloca(strlen(peer) * 2 + 1);
1108 mysql_real_escape_string(mysql, name, peer, strlen(peer));
1111 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));
1113 snprintf(query, sizeof(query), "SELECT name, secret, context, username, ipaddr, port, regseconds FROM sipfriends WHERE name=\"%s\"", name);
1114 ast_mutex_lock(&mysqllock);
1115 mysql_query(mysql, query);
1116 if ((result = mysql_store_result(mysql))) {
1117 if ((rowval = mysql_fetch_row(result))) {
1118 numfields = mysql_num_fields(result);
1119 fields = mysql_fetch_fields(result);
1121 p->addr.sin_family = AF_INET;
1122 for (x=0;x<numfields;x++) {
1124 if (!strcasecmp(fields[x].name, "secret")) {
1125 strncpy(p->secret, rowval[x], sizeof(p->secret) - 1);
1126 } else if (!strcasecmp(fields[x].name, "name")) {
1127 strncpy(p->name, rowval[x], sizeof(p->name) - 1);
1128 } else if (!strcasecmp(fields[x].name, "context")) {
1129 strncpy(p->context, rowval[x], sizeof(p->context) - 1);
1130 } else if (!strcasecmp(fields[x].name, "username")) {
1131 strncpy(p->username, rowval[x], sizeof(p->username) - 1);
1132 } else if (!strcasecmp(fields[x].name, "ipaddr")) {
1133 inet_aton(rowval[x], &p->addr.sin_addr);
1134 } else if (!strcasecmp(fields[x].name, "port")) {
1135 if (sscanf(rowval[x], "%i", &port) != 1)
1137 p->addr.sin_port = htons(port);
1138 } else if (!strcasecmp(fields[x].name, "regseconds")) {
1139 if (sscanf(rowval[x], "%li", ®seconds) != 1)
1145 if (nowtime > regseconds)
1146 memset(&p->addr, 0, sizeof(p->addr));
1148 mysql_free_result(result);
1151 ast_mutex_unlock(&mysqllock);
1158 p->capability = global_capability;
1159 p->nat = global_nat;
1160 p->dtmfmode = global_dtmfmode;
1161 p->promiscredir = global_promiscredir;
1169 #endif /* MYSQL_FRIENDS */
1171 /*--- update_peer: Update peer data in database (if used) ---*/
1172 static void update_peer(struct sip_peer *p, int expiry)
1174 #ifdef MYSQL_FRIENDS
1176 mysql_update_peer(p->name, &p->addr, p->username, expiry);
1181 /*--- find_peer: Locate peer by name or ip address */
1182 static struct sip_peer *find_peer(char *peer, struct sockaddr_in *sin)
1184 struct sip_peer *p = NULL;
1188 /* Find by peer name */
1190 if (!strcasecmp(p->name, peer)) {
1199 if (!inaddrcmp(&p->addr, sin) ||
1201 (p->addr.sin_addr.s_addr == sin->sin_addr.s_addr))) {
1208 #ifdef MYSQL_FRIENDS
1210 p = mysql_peer(peer, sin);
1217 /*--- find_user: Locate user by name */
1218 static struct sip_user *find_user(char *name)
1220 struct sip_user *u = NULL;
1224 if (!strcasecmp(u->name, name)) {
1231 u = mysql_user(name);
1233 #endif /* MYSQL_USERS */
1237 /*--- create_addr: create address structure from peer definition ---*/
1238 /* Or, if peer not found, find it in the global DNS */
1239 /* returns TRUE on failure, FALSE on success */
1240 static int create_addr(struct sip_pvt *r, char *opeer)
1243 struct ast_hostent ahp;
1248 char host[256], *hostn;
1251 strncpy(peer, opeer, sizeof(peer) - 1);
1252 port = strchr(peer, ':');
1257 r->sa.sin_family = AF_INET;
1258 ast_mutex_lock(&peerl.lock);
1259 p = find_peer(peer, NULL);
1263 r->capability = p->capability;
1266 ast_log(LOG_DEBUG, "Setting NAT on RTP to %d\n", (r->nat == SIP_NAT_ALWAYS));
1267 ast_rtp_setnat(r->rtp, (r->nat == SIP_NAT_ALWAYS));
1270 ast_log(LOG_DEBUG, "Setting NAT on VRTP to %d\n", (r->nat == SIP_NAT_ALWAYS));
1271 ast_rtp_setnat(r->vrtp, (r->nat == SIP_NAT_ALWAYS));
1273 strncpy(r->peername, p->username, sizeof(r->peername)-1);
1274 strncpy(r->authname, p->username, sizeof(r->authname)-1);
1275 strncpy(r->peersecret, p->secret, sizeof(r->peersecret)-1);
1276 strncpy(r->peermd5secret, p->md5secret, sizeof(r->peermd5secret)-1);
1277 strncpy(r->username, p->username, sizeof(r->username)-1);
1278 strncpy(r->tohost, p->tohost, sizeof(r->tohost)-1);
1279 if (ast_strlen_zero(r->tohost)) {
1280 if (p->addr.sin_addr.s_addr)
1281 ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->addr.sin_addr);
1283 ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->defaddr.sin_addr);
1285 if (!ast_strlen_zero(p->fromdomain))
1286 strncpy(r->fromdomain, p->fromdomain, sizeof(r->fromdomain)-1);
1287 if (!ast_strlen_zero(p->fromuser))
1288 strncpy(r->fromuser, p->fromuser, sizeof(r->fromuser)-1);
1289 r->insecure = p->insecure;
1290 r->canreinvite = p->canreinvite;
1291 r->maxtime = p->maxms;
1292 r->callgroup = p->callgroup;
1293 r->pickupgroup = p->pickupgroup;
1295 r->dtmfmode = p->dtmfmode;
1296 if (r->dtmfmode & SIP_DTMF_RFC2833)
1297 r->noncodeccapability |= AST_RTP_DTMF;
1299 r->noncodeccapability &= ~AST_RTP_DTMF;
1301 r->promiscredir = p->promiscredir;
1302 strncpy(r->context, p->context,sizeof(r->context)-1);
1303 if ((p->addr.sin_addr.s_addr || p->defaddr.sin_addr.s_addr) &&
1304 (!p->maxms || ((p->lastms > 0) && (p->lastms <= p->maxms)))) {
1305 if (p->addr.sin_addr.s_addr) {
1306 r->sa.sin_addr = p->addr.sin_addr;
1307 r->sa.sin_port = p->addr.sin_port;
1309 r->sa.sin_addr = p->defaddr.sin_addr;
1310 r->sa.sin_port = p->defaddr.sin_port;
1312 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1323 ast_mutex_unlock(&peerl.lock);
1327 portno = atoi(port);
1329 portno = DEFAULT_SIP_PORT;
1334 snprintf(service, sizeof(service), "_sip._udp.%s", peer);
1335 ret = ast_get_srv(NULL, host, sizeof(host), &tportno, service);
1341 hp = ast_gethostbyname(hostn, &ahp);
1343 strncpy(r->tohost, peer, sizeof(r->tohost) - 1);
1344 memcpy(&r->sa.sin_addr, hp->h_addr, sizeof(r->sa.sin_addr));
1345 r->sa.sin_port = htons(portno);
1346 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1349 ast_log(LOG_WARNING, "No such host: %s\n", peer);
1365 /*--- auto_congest: Scheduled congestion on a call ---*/
1366 static int auto_congest(void *nothing)
1368 struct sip_pvt *p = nothing;
1369 ast_mutex_lock(&p->lock);
1372 if (!ast_mutex_trylock(&p->owner->lock)) {
1373 ast_log(LOG_NOTICE, "Auto-congesting %s\n", p->owner->name);
1374 ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
1375 ast_mutex_unlock(&p->owner->lock);
1378 ast_mutex_unlock(&p->lock);
1382 /*--- sip_prefs_free: Free codec list in preference structure ---*/
1383 static void sip_prefs_free(void)
1385 struct sip_codec_pref *cur, *next;
1395 /*--- sip_pref_remove: Remove codec from pref list ---*/
1396 static void sip_pref_remove(int format)
1398 struct sip_codec_pref *cur, *prev=NULL;
1401 if (cur->codec == format) {
1403 prev->next = cur->next;
1414 /*--- sip_pref_append: Append codec to list ---*/
1415 static int sip_pref_append(int format)
1417 struct sip_codec_pref *cur, *tmp;
1418 sip_pref_remove(format);
1419 tmp = (struct sip_codec_pref *)malloc(sizeof(struct sip_codec_pref));
1422 memset(tmp, 0, sizeof(struct sip_codec_pref));
1423 tmp->codec = format;
1434 /*--- sip_codec_choose: Pick a codec ---*/
1435 static int sip_codec_choose(int formats)
1437 struct sip_codec_pref *cur;
1438 formats &= ((AST_FORMAT_MAX_AUDIO << 1) - 1);
1441 if (formats & cur->codec)
1445 return ast_best_codec(formats);
1448 /*--- sip_call: Initiate SIP call from PBX ---*/
1449 /* used from the dial() application */
1450 static int sip_call(struct ast_channel *ast, char *dest, int timeout)
1454 char *vxml_url = NULL;
1455 char *distinctive_ring = NULL;
1456 char *osptoken = NULL;
1458 char *osphandle = NULL;
1460 struct varshead *headp;
1461 struct ast_var_t *current;
1464 if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) {
1465 ast_log(LOG_WARNING, "sip_call called on %s, neither down nor reserved\n", ast->name);
1468 /* Check whether there is vxml_url, distinctive ring variables */
1470 headp=&ast->varshead;
1471 AST_LIST_TRAVERSE(headp,current,entries) {
1472 /* Check whether there is a VXML_URL variable */
1473 if (strcasecmp(ast_var_name(current),"VXML_URL")==0)
1475 vxml_url = ast_var_value(current);
1477 /* Check whether there is a ALERT_INFO variable */
1478 if (strcasecmp(ast_var_name(current),"ALERT_INFO")==0)
1480 distinctive_ring = ast_var_value(current);
1483 else if (!strcasecmp(ast_var_name(current), "OSPTOKEN")) {
1484 osptoken = ast_var_value(current);
1485 } else if (!strcasecmp(ast_var_name(current), "OSPHANDLE")) {
1486 osphandle = ast_var_value(current);
1494 if (!osptoken || !osphandle || (sscanf(osphandle, "%i", &p->osphandle) != 1)) {
1495 /* Force Disable OSP support */
1501 ast_log(LOG_DEBUG, "Outgoing Call for %s\n", p->username);
1502 res = update_user_counter(p,INC_OUT_USE);
1504 p->restrictcid = ast->restrictcid;
1505 p->jointcapability = p->capability;
1506 transmit_invite(p, "INVITE", 1, NULL, NULL, vxml_url,distinctive_ring, osptoken, 1);
1508 /* Initialize auto-congest time */
1509 p->initid = ast_sched_add(sched, p->maxtime * 4, auto_congest, p);
1515 /*--- __sip_destroy: Execute destrucion of call structure, release memory---*/
1516 static void __sip_destroy(struct sip_pvt *p, int lockowner)
1518 struct sip_pvt *cur, *prev = NULL;
1520 struct sip_history *hist;
1522 if (sip_debug_test_pvt(p))
1523 ast_verbose("Destroying call '%s'\n", p->callid);
1524 if (p->stateid > -1)
1525 ast_extension_state_del(p->stateid, NULL);
1527 ast_sched_del(sched, p->initid);
1528 if (p->autokillid > -1)
1529 ast_sched_del(sched, p->autokillid);
1532 ast_rtp_destroy(p->rtp);
1535 ast_rtp_destroy(p->vrtp);
1538 free_old_route(p->route);
1542 /* Carefully unlink from registry */
1543 struct sip_registry *reg;
1544 ast_mutex_lock(®l.lock);
1545 reg = regl.registrations;
1547 if ((reg == p->registry) && (p->registry->call == p))
1548 p->registry->call=NULL;
1551 ast_mutex_unlock(®l.lock);
1553 /* Unlink us from the owner if we have one */
1556 ast_mutex_lock(&p->owner->lock);
1557 ast_log(LOG_DEBUG, "Detaching from %s\n", p->owner->name);
1558 p->owner->pvt->pvt = NULL;
1560 ast_mutex_unlock(&p->owner->lock);
1565 p->history = p->history->next;
1572 prev->next = cur->next;
1581 ast_log(LOG_WARNING, "%p is not in list?!?! \n", cur);
1584 ast_sched_del(sched, p->initid);
1585 while((cp = p->packets)) {
1586 p->packets = p->packets->next;
1587 if (cp->retransid > -1)
1588 ast_sched_del(sched, cp->retransid);
1591 ast_mutex_destroy(&p->lock);
1596 /*--- update_user_counter: Handle incominglimit and outgoinglimit for SIP users ---*/
1597 /* Note: This is going to be replaced by app_groupcount */
1598 static int update_user_counter(struct sip_pvt *fup, int event)
1600 char name[256] = "";
1602 strncpy(name, fup->username, sizeof(name) - 1);
1603 ast_mutex_lock(&userl.lock);
1604 u = find_user(name);
1606 ast_log(LOG_DEBUG, "%s is not a local user\n", name);
1607 ast_mutex_unlock(&userl.lock);
1611 /* incoming and outgoing affects the inUse counter */
1614 if ( u->inUse > 0 ) {
1622 if (u->incominglimit > 0 ) {
1623 if (u->inUse >= u->incominglimit) {
1624 ast_log(LOG_ERROR, "Call from user '%s' rejected due to usage limit of %d\n", u->name, u->incominglimit);
1625 /* inc inUse as well */
1626 if ( event == INC_OUT_USE ) {
1629 ast_mutex_unlock(&userl.lock);
1634 ast_log(LOG_DEBUG, "Call from user '%s' is %d out of %d\n", u->name, u->inUse, u->incominglimit);
1636 /* we don't use these anymore
1638 if ( u->outUse > 0 ) {
1645 if ( u->outgoinglimit > 0 ) {
1646 if ( u->outUse >= u->outgoinglimit ) {
1647 ast_log(LOG_ERROR, "Outgoing call from user '%s' rejected due to usage limit of %d\n", u->name, u->outgoinglimit);
1648 ast_mutex_unlock(&userl.lock);
1656 ast_log(LOG_ERROR, "update_user_counter(%s,%d) called with no event!\n",u->name,event);
1658 ast_mutex_unlock(&userl.lock);
1662 /*--- sip_destroy: Destroy SIP call structure ---*/
1663 static void sip_destroy(struct sip_pvt *p)
1665 ast_mutex_lock(&iflock);
1666 __sip_destroy(p, 1);
1667 ast_mutex_unlock(&iflock);
1671 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal);
1673 static int hangup_sip2cause(int cause)
1675 /* Possible values from causes.h
1676 AST_CAUSE_NOTDEFINED AST_CAUSE_NORMAL AST_CAUSE_BUSY
1677 AST_CAUSE_FAILURE AST_CAUSE_CONGESTION AST_CAUSE_UNALLOCATED
1681 case 404: /* Not found */
1682 return AST_CAUSE_UNALLOCATED;
1683 case 483: /* Too many hops */
1684 return AST_CAUSE_FAILURE;
1686 return AST_CAUSE_BUSY;
1688 return AST_CAUSE_NORMAL;
1694 static char *hangup_cause2sip(int cause)
1698 case AST_CAUSE_FAILURE:
1699 return "500 Server internal failure";
1700 case AST_CAUSE_CONGESTION:
1701 return "503 Service Unavailable";
1702 case AST_CAUSE_BUSY:
1711 /*--- sip_hangup: Hangup SIP call */
1712 static int sip_hangup(struct ast_channel *ast)
1714 struct sip_pvt *p = ast->pvt->pvt;
1716 int needdestroy = 0;
1718 ast_log(LOG_DEBUG, "sip_hangup(%s)\n", ast->name);
1719 if (!ast->pvt->pvt) {
1720 ast_log(LOG_DEBUG, "Asked to hangup channel not connected\n");
1723 ast_mutex_lock(&p->lock);
1725 if ((p->osphandle > -1) && (ast->_state == AST_STATE_UP)) {
1726 ast_osp_terminate(p->osphandle, AST_CAUSE_NORMAL, p->ospstart, time(NULL) - p->ospstart);
1729 if ( p->outgoing ) {
1730 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement outUse counter\n", p->username);
1731 update_user_counter(p, DEC_OUT_USE);
1733 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement inUse counter\n", p->username);
1734 update_user_counter(p, DEC_IN_USE);
1736 /* Determine how to disconnect */
1737 if (p->owner != ast) {
1738 ast_log(LOG_WARNING, "Huh? We aren't the owner?\n");
1739 ast_mutex_unlock(&p->lock);
1742 if (!ast || (ast->_state != AST_STATE_UP))
1747 ast_dsp_free(p->vad);
1750 ast->pvt->pvt = NULL;
1752 ast_mutex_lock(&usecnt_lock);
1754 ast_mutex_unlock(&usecnt_lock);
1755 ast_update_use_count();
1758 /* Start the process if it's not already started */
1759 if (!p->alreadygone && !ast_strlen_zero(p->initreq.data)) {
1762 transmit_request_with_auth(p, "CANCEL", p->ocseq, 1, 0);
1763 /* Actually don't destroy us yet, wait for the 487 on our original
1764 INVITE, but do set an autodestruct just in case we never get it. */
1766 sip_scheddestroy(p, 15000);
1767 if ( p->initid != -1 ) {
1768 /* channel still up - reverse dec of inUse counter
1769 only if the channel is not auto-congested */
1770 if ( p->outgoing ) {
1771 update_user_counter(p, INC_OUT_USE);
1774 update_user_counter(p, INC_IN_USE);
1779 if (ast->hangupcause && ((res = hangup_cause2sip(ast->hangupcause)))) {
1780 transmit_response_reliable(p, res, &p->initreq, 1);
1782 transmit_response_reliable(p, "403 Forbidden", &p->initreq, 1);
1785 if (!p->pendinginvite) {
1787 transmit_request_with_auth(p, "BYE", 0, 1, 1);
1789 /* Note we will need a BYE when this all settles out
1790 but we can't send one while we have "INVITE" outstanding. */
1792 p->needreinvite = 0;
1796 p->needdestroy = needdestroy;
1797 ast_mutex_unlock(&p->lock);
1801 /*--- sip_answer: Answer SIP call , send 200 OK on Invite */
1802 static int sip_answer(struct ast_channel *ast)
1806 struct sip_pvt *p = ast->pvt->pvt;
1808 ast_mutex_lock(&p->lock);
1809 if (ast->_state != AST_STATE_UP) {
1814 codec=pbx_builtin_getvar_helper(p->owner,"SIP_CODEC");
1816 fmt=ast_getformatbyname(codec);
1818 ast_log(LOG_NOTICE, "Changing codec to '%s' for this call because of ${SIP_CODEC) variable\n",codec);
1819 p->jointcapability=fmt;
1820 } else ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because of unrecognized/not configured codec (check allow/disallow in sip.conf): %s\n",codec);
1823 ast_setstate(ast, AST_STATE_UP);
1825 ast_log(LOG_DEBUG, "sip_answer(%s)\n", ast->name);
1826 res = transmit_response_with_sdp(p, "200 OK", &p->initreq, 1);
1828 ast_mutex_unlock(&p->lock);
1832 /*--- sip_write: Send response, support audio media ---*/
1833 static int sip_write(struct ast_channel *ast, struct ast_frame *frame)
1835 struct sip_pvt *p = ast->pvt->pvt;
1837 if (frame->frametype == AST_FRAME_VOICE) {
1838 if (!(frame->subclass & ast->nativeformats)) {
1839 ast_log(LOG_WARNING, "Asked to transmit frame type %d, while native formats is %d (read/write = %d/%d)\n",
1840 frame->subclass, ast->nativeformats, ast->readformat, ast->writeformat);
1844 ast_mutex_lock(&p->lock);
1846 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1847 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1850 res = ast_rtp_write(p->rtp, frame);
1852 ast_mutex_unlock(&p->lock);
1854 } else if (frame->frametype == AST_FRAME_VIDEO) {
1856 ast_mutex_lock(&p->lock);
1858 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1859 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1862 res = ast_rtp_write(p->vrtp, frame);
1864 ast_mutex_unlock(&p->lock);
1866 } else if (frame->frametype == AST_FRAME_IMAGE) {
1869 ast_log(LOG_WARNING, "Can't send %d type frames with SIP write\n", frame->frametype);
1876 /*--- sip_fixup: Fix up a channel: If a channel is consumed, this is called.
1877 Basically update any ->owner links ----*/
1878 static int sip_fixup(struct ast_channel *oldchan, struct ast_channel *newchan)
1880 struct sip_pvt *p = newchan->pvt->pvt;
1881 ast_mutex_lock(&p->lock);
1882 if (p->owner != oldchan) {
1883 ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, p->owner);
1884 ast_mutex_unlock(&p->lock);
1888 ast_mutex_unlock(&p->lock);
1892 /*--- sip_senddigit: Send DTMF character on SIP channel */
1893 /* within one call, we're able to transmit in many methods simultaneously */
1894 static int sip_senddigit(struct ast_channel *ast, char digit)
1896 struct sip_pvt *p = ast->pvt->pvt;
1897 if (p && (p->dtmfmode & SIP_DTMF_INFO)) {
1898 transmit_info_with_digit(p, digit);
1900 if (p && p->rtp && (p->dtmfmode & SIP_DTMF_RFC2833)) {
1901 ast_rtp_senddigit(p->rtp, digit);
1903 /* If in-band DTMF is desired, send that */
1904 if (p->dtmfmode & SIP_DTMF_INBAND)
1910 /*--- sip_transfer: Transfer SIP call */
1911 static int sip_transfer(struct ast_channel *ast, char *dest)
1913 struct sip_pvt *p = ast->pvt->pvt;
1915 res = transmit_refer(p, dest);
1919 /*--- sip_indicate: Play indication to user */
1920 /* With SIP a lot of indications is sent as messages, letting the device play
1921 the indication - busy signal, congestion etc */
1922 static int sip_indicate(struct ast_channel *ast, int condition)
1924 struct sip_pvt *p = ast->pvt->pvt;
1926 case AST_CONTROL_RINGING:
1927 if (ast->_state == AST_STATE_RING) {
1929 transmit_response(p, "180 Ringing", &p->initreq);
1931 if (!p->progressinband)
1934 /* Oops, we've sent progress tones. Let Asterisk do it instead */
1938 case AST_CONTROL_BUSY:
1939 if (ast->_state != AST_STATE_UP) {
1940 transmit_response(p, "486 Busy Here", &p->initreq);
1942 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1946 case AST_CONTROL_CONGESTION:
1947 if (ast->_state != AST_STATE_UP) {
1948 transmit_response(p, "503 Service Unavailable", &p->initreq);
1950 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1954 case AST_CONTROL_PROGRESS:
1955 case AST_CONTROL_PROCEEDING:
1956 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1957 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1965 ast_log(LOG_WARNING, "Don't know how to indicate condition %d\n", condition);
1973 /*--- sip_new: Initiate a call in the SIP channel */
1974 /* called from sip_request_call (calls from the pbx ) */
1975 static struct ast_channel *sip_new(struct sip_pvt *i, int state, char *title)
1977 struct ast_channel *tmp;
1979 ast_mutex_unlock(&i->lock);
1980 /* Don't hold a sip pvt lock while we allocate a channel */
1981 tmp = ast_channel_alloc(1);
1982 ast_mutex_lock(&i->lock);
1984 /* Select our native format based on codec preference until we receive
1985 something from another device to the contrary. */
1986 if (i->jointcapability)
1987 tmp->nativeformats = sip_codec_choose(i->jointcapability);
1988 else if (i->capability)
1989 tmp->nativeformats = sip_codec_choose(i->capability);
1991 tmp->nativeformats = sip_codec_choose(global_capability);
1992 fmt = ast_best_codec(tmp->nativeformats);
1994 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%04x", title, rand() & 0xffff);
1996 if (strchr(i->fromdomain,':'))
1998 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", strchr(i->fromdomain,':')+1, (int)(long)(i));
2002 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", i->fromdomain, (int)(long)(i));
2005 if (i->dtmfmode & SIP_DTMF_INBAND) {
2006 i->vad = ast_dsp_new();
2007 ast_dsp_set_features(i->vad, DSP_FEATURE_DTMF_DETECT);
2009 ast_dsp_digitmode(i->vad, DSP_DIGITMODE_DTMF | DSP_DIGITMODE_RELAXDTMF);
2011 tmp->fds[0] = ast_rtp_fd(i->rtp);
2012 tmp->fds[1] = ast_rtcp_fd(i->rtp);
2014 tmp->fds[2] = ast_rtp_fd(i->vrtp);
2015 tmp->fds[3] = ast_rtcp_fd(i->vrtp);
2017 if (state == AST_STATE_RING)
2019 tmp->adsicpe = AST_ADSI_UNAVAILABLE;
2020 tmp->writeformat = fmt;
2021 tmp->pvt->rawwriteformat = fmt;
2022 tmp->readformat = fmt;
2023 tmp->pvt->rawreadformat = fmt;
2025 tmp->pvt->send_text = sip_sendtext;
2026 tmp->pvt->call = sip_call;
2027 tmp->pvt->hangup = sip_hangup;
2028 tmp->pvt->answer = sip_answer;
2029 tmp->pvt->read = sip_read;
2030 tmp->pvt->write = sip_write;
2031 tmp->pvt->write_video = sip_write;
2032 tmp->pvt->indicate = sip_indicate;
2033 tmp->pvt->transfer = sip_transfer;
2034 tmp->pvt->fixup = sip_fixup;
2035 tmp->pvt->send_digit = sip_senddigit;
2037 tmp->pvt->bridge = ast_rtp_bridge;
2039 tmp->callgroup = i->callgroup;
2040 tmp->pickupgroup = i->pickupgroup;
2041 tmp->restrictcid = i->restrictcid;
2042 if (!ast_strlen_zero(i->accountcode))
2043 strncpy(tmp->accountcode, i->accountcode, sizeof(tmp->accountcode)-1);
2045 tmp->amaflags = i->amaflags;
2046 if (!ast_strlen_zero(i->language))
2047 strncpy(tmp->language, i->language, sizeof(tmp->language)-1);
2048 if (!ast_strlen_zero(i->musicclass))
2049 strncpy(tmp->musicclass, i->musicclass, sizeof(tmp->musicclass)-1);
2051 ast_mutex_lock(&usecnt_lock);
2053 ast_mutex_unlock(&usecnt_lock);
2054 strncpy(tmp->context, i->context, sizeof(tmp->context)-1);
2055 strncpy(tmp->exten, i->exten, sizeof(tmp->exten)-1);
2056 if (!ast_strlen_zero(i->callerid))
2057 tmp->callerid = strdup(i->callerid);
2058 if (!ast_strlen_zero(i->rdnis))
2059 tmp->rdnis = strdup(i->rdnis);
2060 if (!ast_strlen_zero(i->exten) && strcmp(i->exten, "s"))
2061 tmp->dnid = strdup(i->exten);
2063 if (!ast_strlen_zero(i->domain)) {
2064 pbx_builtin_setvar_helper(tmp, "SIPDOMAIN", i->domain);
2066 if (!ast_strlen_zero(i->useragent)) {
2067 pbx_builtin_setvar_helper(tmp, "SIPUSERAGENT", i->useragent);
2069 if (!ast_strlen_zero(i->callid)) {
2070 pbx_builtin_setvar_helper(tmp, "SIPCALLID", i->callid);
2072 ast_setstate(tmp, state);
2073 if (state != AST_STATE_DOWN) {
2074 if (ast_pbx_start(tmp)) {
2075 ast_log(LOG_WARNING, "Unable to start PBX on %s\n", tmp->name);
2081 ast_log(LOG_WARNING, "Unable to allocate channel structure\n");
2085 static struct cfalias {
2089 { "Content-Type", "c" },
2090 { "Content-Encoding", "e" },
2094 { "Content-Length", "l" },
2097 { "Supported", "k" },
2098 { "Refer-To", "r" },
2099 { "Allow-Events", "u" },
2104 /*--- get_sdp_by_line: Reads one line of SIP message body */
2105 static char* get_sdp_by_line(char* line, char *name, int nameLen) {
2106 if (strncasecmp(line, name, nameLen) == 0 && line[nameLen] == '=') {
2107 char* r = line + nameLen + 1;
2108 while (*r && (*r < 33)) ++r;
2115 /*--- get_sdp: Gets all kind of SIP message bodies, including SDP,
2116 but the name wrongly applies _only_ sdp */
2117 static char *get_sdp(struct sip_request *req, char *name) {
2119 int len = strlen(name);
2122 for (x=0; x<req->lines; x++) {
2123 r = get_sdp_by_line(req->line[x], name, len);
2124 if (r[0] != '\0') return r;
2130 static void sdpLineNum_iterator_init(int* iterator) {
2134 static char* get_sdp_iterate(int* iterator,
2135 struct sip_request *req, char *name) {
2136 int len = strlen(name);
2138 while (*iterator < req->lines) {
2139 r = get_sdp_by_line(req->line[(*iterator)++], name, len);
2140 if (r[0] != '\0') return r;
2145 static char *__get_header(struct sip_request *req, char *name, int *start)
2148 int len = strlen(name);
2150 for (x=*start;x<req->headers;x++) {
2151 if (!strncasecmp(req->header[x], name, len) &&
2152 (req->header[x][len] == ':')) {
2153 r = req->header[x] + len + 1;
2154 while(*r && (*r < 33))
2161 for (x=0;x<sizeof(aliases) / sizeof(aliases[0]); x++)
2162 if (!strcasecmp(aliases[x].fullname, name))
2163 return __get_header(req, aliases[x].shortname, start);
2165 /* Don't return NULL, so get_header is always a valid pointer */
2169 /*--- get_header: Get header from SIP request ---*/
2170 static char *get_header(struct sip_request *req, char *name)
2173 return __get_header(req, name, &start);
2176 /*--- sip_rtp_read: Read RTP from network ---*/
2177 static struct ast_frame *sip_rtp_read(struct ast_channel *ast, struct sip_pvt *p)
2179 /* Retrieve audio/etc from channel. Assumes p->lock is already held. */
2180 struct ast_frame *f;
2181 static struct ast_frame null_frame = { AST_FRAME_NULL, };
2184 f = ast_rtp_read(p->rtp); /* RTP Audio */
2187 f = ast_rtcp_read(p->rtp); /* RTCP Control Channel */
2190 f = ast_rtp_read(p->vrtp); /* RTP Video */
2193 f = ast_rtcp_read(p->vrtp); /* RTCP Control Channel for video */
2198 /* Don't send RFC2833 if we're not supposed to */
2199 if (f && (f->frametype == AST_FRAME_DTMF) && !(p->dtmfmode & SIP_DTMF_RFC2833))
2202 /* We already hold the channel lock */
2203 if (f->frametype == AST_FRAME_VOICE) {
2204 if (f->subclass != p->owner->nativeformats) {
2205 ast_log(LOG_DEBUG, "Oooh, format changed to %d\n", f->subclass);
2206 p->owner->nativeformats = f->subclass;
2207 ast_set_read_format(p->owner, p->owner->readformat);
2208 ast_set_write_format(p->owner, p->owner->writeformat);
2210 if ((p->dtmfmode & SIP_DTMF_INBAND) && p->vad) {
2211 f = ast_dsp_process(p->owner,p->vad,f);
2212 if (f && (f->frametype == AST_FRAME_DTMF))
2213 ast_log(LOG_DEBUG, "Detected DTMF '%c'\n", f->subclass);
2220 /*--- sip_read: Read SIP RTP from channel */
2221 static struct ast_frame *sip_read(struct ast_channel *ast)
2223 struct ast_frame *fr;
2224 struct sip_pvt *p = ast->pvt->pvt;
2225 ast_mutex_lock(&p->lock);
2226 fr = sip_rtp_read(ast, p);
2227 time(&p->lastrtprx);
2228 ast_mutex_unlock(&p->lock);
2232 /*--- build_callid: Build SIP CALLID header ---*/
2233 static void build_callid(char *callid, int len, struct in_addr ourip)
2238 char iabuf[INET_ADDRSTRLEN];
2241 res = snprintf(callid, len, "%08x", val);
2245 /* It's not important that we really use our right IP here... */
2246 snprintf(callid, len, "@%s", ast_inet_ntoa(iabuf, sizeof(iabuf), ourip));
2249 /*--- sip_alloc: Allocate SIP_PVT structure and set defaults ---*/
2250 static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useglobal_nat)
2253 char iabuf[INET_ADDRSTRLEN];
2255 p = malloc(sizeof(struct sip_pvt));
2258 /* Keep track of stuff */
2259 memset(p, 0, sizeof(struct sip_pvt));
2260 ast_mutex_init(&p->lock);
2268 memcpy(&p->sa, sin, sizeof(p->sa));
2269 if (ast_sip_ouraddrfor(&p->sa.sin_addr,&p->ourip))
2270 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2272 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2274 p->rtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2276 p->vrtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2280 /* Start with 101 instead of 1 */
2283 ast_log(LOG_WARNING, "Unable to create RTP session: %s\n", strerror(errno));
2284 ast_mutex_destroy(&p->lock);
2288 ast_rtp_settos(p->rtp, tos);
2290 ast_rtp_settos(p->vrtp, tos);
2291 if (useglobal_nat && sin) {
2292 /* Setup NAT structure according to global settings if we have an address */
2293 p->nat = global_nat;
2294 memcpy(&p->recv, sin, sizeof(p->recv));
2295 ast_rtp_setnat(p->rtp, (p->nat == SIP_NAT_ALWAYS));
2297 ast_rtp_setnat(p->vrtp, (p->nat == SIP_NAT_ALWAYS));
2300 /* z9hG4bK is a magic cookie. See RFC 3261 section 8.1.1.7 */
2301 if (p->nat != SIP_NAT_NEVER)
2302 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);
2304 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);
2306 build_callid(p->callid, sizeof(p->callid), p->ourip);
2308 strncpy(p->callid, callid, sizeof(p->callid) - 1);
2309 /* Assume reinvite OK and via INVITE */
2310 p->canreinvite = global_canreinvite;
2311 /* Assign default music on hold class */
2312 strncpy(p->musicclass, global_musicclass, sizeof(p->musicclass) - 1);
2313 p->dtmfmode = global_dtmfmode;
2314 p->promiscredir = global_promiscredir;
2315 p->trustrpid = global_trustrpid;
2316 p->progressinband = global_progressinband;
2318 p->ospauth = global_ospauth;
2320 p->rtptimeout = global_rtptimeout;
2321 p->rtpholdtimeout = global_rtpholdtimeout;
2322 p->capability = global_capability;
2323 if (p->dtmfmode & SIP_DTMF_RFC2833)
2324 p->noncodeccapability |= AST_RTP_DTMF;
2325 strncpy(p->context, default_context, sizeof(p->context) - 1);
2326 strncpy(p->fromdomain, default_fromdomain, sizeof(p->fromdomain) - 1);
2328 ast_mutex_lock(&iflock);
2331 ast_mutex_unlock(&iflock);
2333 ast_log(LOG_DEBUG, "Allocating new SIP call for %s\n", callid);
2337 /*--- find_call: Connect incoming SIP message to current call or create new call structure */
2338 /* Called by handle_request ,sipsock_read */
2339 static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *sin)
2344 char iabuf[INET_ADDRSTRLEN];
2348 callid = get_header(req, "Call-ID");
2350 if (pedanticsipchecking) {
2351 /* In principle Call-ID's uniquely identify a call, however some vendors
2352 (i.e. Pingtel) send multiple calls with the same Call-ID and different
2353 tags in order to simplify billing. The RFC does state that we have to
2354 compare tags in addition to the call-id, but this generate substantially
2355 more overhead which is totally unnecessary for the vast majority of sane
2356 SIP implementations, and thus Asterisk does not enable this behavior
2357 by default. Short version: You'll need this option to support conferencing
2359 strncpy(tmp, req->header[0], sizeof(tmp) - 1);
2361 c = strchr(tmp, ' ');
2364 if (!strcasecmp(cmd, "SIP/2.0")) {
2370 strncpy(tmp, get_header(req, "From"), sizeof(tmp) - 1);
2372 strncpy(tmp, get_header(req, "To"), sizeof(tmp) - 1);
2373 tag = strstr(tmp, "tag=");
2376 c = strchr(tag, ';');
2383 if (ast_strlen_zero(callid)) {
2384 ast_log(LOG_WARNING, "Call missing call ID from '%s'\n", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr));
2387 ast_mutex_lock(&iflock);
2390 if (!strcmp(p->callid, callid) &&
2391 (!pedanticsipchecking || !tag || ast_strlen_zero(p->theirtag) || !strcmp(p->theirtag, tag))) {
2392 /* Found the call */
2393 ast_mutex_lock(&p->lock);
2394 ast_mutex_unlock(&iflock);
2399 ast_mutex_unlock(&iflock);
2400 p = sip_alloc(callid, sin, 1);
2402 ast_mutex_lock(&p->lock);
2406 /*--- sip_register: Parse register=> line in sip.conf and add to registry */
2407 static int sip_register(char *value, int lineno)
2409 struct sip_registry *reg;
2410 char copy[256] = "";
2411 char *username=NULL, *hostname=NULL, *secret=NULL, *authuser=NULL;
2418 strncpy(copy, value, sizeof(copy)-1);
2421 hostname = strrchr(stringp, '@');
2426 if (!username || ast_strlen_zero(username) || !hostname || ast_strlen_zero(hostname)) {
2427 ast_log(LOG_WARNING, "Format for registration is user[:secret[:authuser]]@host[:port][/contact] at line %d", lineno);
2431 username = strsep(&stringp, ":");
2433 secret = strsep(&stringp, ":");
2435 authuser = strsep(&stringp, ":");
2438 hostname = strsep(&stringp, "/");
2440 contact = strsep(&stringp, "/");
2441 if (!contact || ast_strlen_zero(contact))
2444 hostname = strsep(&stringp, ":");
2445 porta = strsep(&stringp, ":");
2447 if (porta && !atoi(porta)) {
2448 ast_log(LOG_WARNING, "%s is not a valid port number at line %d\n", porta, lineno);
2451 reg = malloc(sizeof(struct sip_registry));
2453 memset(reg, 0, sizeof(struct sip_registry));
2454 strncpy(reg->contact, contact, sizeof(reg->contact) - 1);
2456 strncpy(reg->username, username, sizeof(reg->username)-1);
2458 strncpy(reg->hostname, hostname, sizeof(reg->hostname)-1);
2460 strncpy(reg->authuser, authuser, sizeof(reg->authuser)-1);
2462 strncpy(reg->secret, secret, sizeof(reg->secret)-1);
2465 reg->refresh = default_expiry;
2466 reg->portno = porta ? atoi(porta) : 0;
2467 reg->callid_valid = 0;
2469 ast_mutex_lock(®l.lock);
2470 reg->next = regl.registrations;
2471 regl.registrations = reg;
2472 ast_mutex_unlock(®l.lock);
2474 ast_log(LOG_ERROR, "Out of memory\n");
2480 /*--- lws2sws: Parse multiline SIP headers into one header */
2481 /* This is enabled if pedanticsipchecking is enabled */
2482 static int lws2sws(char *msgbuf, int len)
2488 /* Eliminate all CRs */
2489 if (msgbuf[h] == '\r') {
2493 /* Check for end-of-line */
2494 if (msgbuf[h] == '\n') {
2495 /* Check for end-of-message */
2498 /* Check for a continuation line */
2499 if (msgbuf[h + 1] == ' ') {
2500 /* Merge continuation line */
2504 /* Propagate LF and start new line */
2505 msgbuf[t++] = msgbuf[h++];
2510 if (msgbuf[h] == ' ' || msgbuf[h] == '\t') {
2515 msgbuf[t++] = msgbuf[h++];
2519 msgbuf[t++] = msgbuf[h++];
2527 /*--- parse: Parse a SIP message ----*/
2528 static void parse(struct sip_request *req)
2530 /* Divide fields by NULL's */
2535 /* First header starts immediately */
2539 /* We've got a new header */
2543 printf("Header: %s (%d)\n", req->header[f], strlen(req->header[f]));
2545 if (ast_strlen_zero(req->header[f])) {
2546 /* Line by itself means we're now in content */
2550 if (f >= SIP_MAX_HEADERS - 1) {
2551 ast_log(LOG_WARNING, "Too many SIP headers...\n");
2554 req->header[f] = c + 1;
2555 } else if (*c == '\r') {
2556 /* Ignore but eliminate \r's */
2561 /* Check for last header */
2562 if (!ast_strlen_zero(req->header[f]))
2565 /* Now we process any mime content */
2570 /* We've got a new line */
2573 printf("Line: %s (%d)\n", req->line[f], strlen(req->line[f]));
2575 if (f >= SIP_MAX_LINES - 1) {
2576 ast_log(LOG_WARNING, "Too many SDP lines...\n");
2579 req->line[f] = c + 1;
2580 } else if (*c == '\r') {
2581 /* Ignore and eliminate \r's */
2586 /* Check for last line */
2587 if (!ast_strlen_zero(req->line[f]))
2591 ast_log(LOG_WARNING, "Odd content, extra stuff left over ('%s')\n", c);
2594 /*--- process_sdp: Process SIP SDP ---*/
2595 static int process_sdp(struct sip_pvt *p, struct sip_request *req)
2601 char iabuf[INET_ADDRSTRLEN];
2605 int peercapability, peernoncodeccapability;
2606 int vpeercapability=0, vpeernoncodeccapability=0;
2607 struct sockaddr_in sin;
2610 struct ast_hostent ahp;
2615 int debug=sip_debug_test_pvt(p);
2617 /* Update our last rtprx when we receive an SDP, too */
2618 time(&p->lastrtprx);
2620 /* Get codec and RTP info from SDP */
2621 if (strcasecmp(get_header(req, "Content-Type"), "application/sdp")) {
2622 ast_log(LOG_NOTICE, "Content is '%s', not 'application/sdp'\n", get_header(req, "Content-Type"));
2625 m = get_sdp(req, "m");
2626 c = get_sdp(req, "c");
2627 if (ast_strlen_zero(m) || ast_strlen_zero(c)) {
2628 ast_log(LOG_WARNING, "Insufficient information for SDP (m = '%s', c = '%s')\n", m, c);
2631 if (sscanf(c, "IN IP4 %256s", host) != 1) {
2632 ast_log(LOG_WARNING, "Invalid host in c= line, '%s'\n", c);
2635 /* XXX This could block for a long time, and block the main thread! XXX */
2636 hp = ast_gethostbyname(host, &ahp);
2638 ast_log(LOG_WARNING, "Unable to lookup host in c= line, '%s'\n", c);
2641 sdpLineNum_iterator_init(&iterator);
2642 while ((m = get_sdp_iterate(&iterator, req, "m"))[0] != '\0') {
2643 if ((sscanf(m, "audio %d RTP/AVP %n", &x, &len) == 1)) {
2645 /* Scan through the RTP payload types specified in a "m=" line: */
2646 ast_rtp_pt_clear(p->rtp);
2648 while(!ast_strlen_zero(codecs)) {
2649 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2650 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2654 ast_verbose("Found RTP audio format %d\n", codec);
2655 ast_rtp_set_m_type(p->rtp, codec);
2657 /* Skip over any whitespace */
2658 while(*codecs && (*codecs < 33)) codecs++;
2662 ast_rtp_pt_clear(p->vrtp); /* Must be cleared in case no m=video line exists */
2664 if (p->vrtp && (sscanf(m, "video %d RTP/AVP %n", &x, &len) == 1)) {
2666 /* Scan through the RTP payload types specified in a "m=" line: */
2668 while(!ast_strlen_zero(codecs)) {
2669 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2670 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2674 ast_verbose("Found video format %s\n", ast_getformatname(codec));
2675 ast_rtp_set_m_type(p->vrtp, codec);
2677 /* Skip over any whitespace */
2678 while(*codecs && (*codecs < 33)) codecs++;
2683 /* RTP addresses and ports for audio and video */
2684 sin.sin_family = AF_INET;
2685 memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
2687 /* Setup audio port number */
2688 sin.sin_port = htons(portno);
2689 if (p->rtp && sin.sin_port) {
2690 ast_rtp_set_peer(p->rtp, &sin);
2692 ast_verbose("Peer audio RTP is at port %s:%d\n", ast_inet_ntoa(iabuf,sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2693 ast_log(LOG_DEBUG,"Peer audio RTP is at port %s:%d\n",ast_inet_ntoa(iabuf, sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2696 /* Setup video port number */
2697 sin.sin_port = htons(vportno);
2698 if (p->vrtp && sin.sin_port) {
2699 ast_rtp_set_peer(p->vrtp, &sin);
2701 ast_verbose("Peer video RTP is at port %s:%d\n", ast_inet_ntoa(iabuf,sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2702 ast_log(LOG_DEBUG,"Peer video RTP is at port %s:%d\n",ast_inet_ntoa(iabuf, sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2706 /* Next, scan through each "a=rtpmap:" line, noting each
2707 * specified RTP payload type (with corresponding MIME subtype):
2709 sdpLineNum_iterator_init(&iterator);
2710 while ((a = get_sdp_iterate(&iterator, req, "a"))[0] != '\0') {
2711 char* mimeSubtype = ast_strdupa(a); /* ensures we have enough space */
2712 if (!strcasecmp(a, "sendonly")) {
2716 if (!strcasecmp(a, "sendrecv")) {
2719 if (sscanf(a, "rtpmap: %u %[^/]/", &codec, mimeSubtype) != 2) continue;
2721 ast_verbose("Found description format %s\n", mimeSubtype);
2722 /* Note: should really look at the 'freq' and '#chans' params too */
2723 ast_rtp_set_rtpmap_type(p->rtp, codec, "audio", mimeSubtype);
2725 ast_rtp_set_rtpmap_type(p->vrtp, codec, "video", mimeSubtype);
2728 /* Now gather all of the codecs that were asked for: */
2729 ast_rtp_get_current_formats(p->rtp,
2730 &peercapability, &peernoncodeccapability);
2732 ast_rtp_get_current_formats(p->vrtp,
2733 &vpeercapability, &vpeernoncodeccapability);
2734 p->jointcapability = p->capability & (peercapability | vpeercapability);
2735 p->noncodeccapability = noncodeccapability & (peernoncodeccapability | vpeernoncodeccapability);
2738 const unsigned slen=80;
2739 char s1[slen], s2[slen], s3[slen], s4[slen];
2741 ast_verbose("Capabilities: us - %s, peer - audio=%s/video=%s, combined - %s\n",
2742 ast_getformatname_multiple(s1, slen, p->capability),
2743 ast_getformatname_multiple(s2, slen, peercapability),
2744 ast_getformatname_multiple(s3, slen, vpeercapability),
2745 ast_getformatname_multiple(s4, slen, p->jointcapability));
2747 ast_verbose("Non-codec capabilities: us - %s, peer - %s, combined - %s\n",
2748 ast_getformatname_multiple(s1, slen, noncodeccapability),
2749 ast_getformatname_multiple(s2, slen, peernoncodeccapability),
2750 ast_getformatname_multiple(s3, slen, p->noncodeccapability));
2752 if (!p->jointcapability) {
2753 ast_log(LOG_WARNING, "No compatible codecs!\n");
2757 if (!(p->owner->nativeformats & p->jointcapability)) {
2758 const unsigned slen=80;
2759 char s1[slen], s2[slen];
2760 ast_log(LOG_DEBUG, "Oooh, we need to change our formats since our peer supports only %s and not %s\n",
2761 ast_getformatname_multiple(s1, slen, p->jointcapability),
2762 ast_getformatname_multiple(s2, slen, p->owner->nativeformats));
2763 p->owner->nativeformats = sip_codec_choose(p->jointcapability);
2764 ast_set_read_format(p->owner, p->owner->readformat);
2765 ast_set_write_format(p->owner, p->owner->writeformat);
2767 if (p->owner->bridge) {
2768 /* Turn on/off music on hold if we are holding/unholding */
2769 if (sin.sin_addr.s_addr && !sendonly) {
2770 ast_moh_stop(p->owner->bridge);
2772 ast_moh_start(p->owner->bridge, NULL);
2780 /*--- add_header: Add header to SIP message */
2781 static int add_header(struct sip_request *req, char *var, char *value)
2783 if (req->len >= sizeof(req->data) - 4) {
2784 ast_log(LOG_WARNING, "Out of space, can't add anymore (%s:%s)\n", var, value);
2788 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2791 req->header[req->headers] = req->data + req->len;
2792 snprintf(req->header[req->headers], sizeof(req->data) - req->len - 4, "%s: %s\r\n", var, value);
2793 req->len += strlen(req->header[req->headers]);
2794 if (req->headers < SIP_MAX_HEADERS)
2797 ast_log(LOG_WARNING, "Out of header space\n");
2803 /*--- add_blank_header: Add blank header to SIP message */
2804 static int add_blank_header(struct sip_request *req)
2806 if (req->len >= sizeof(req->data) - 4) {
2807 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2811 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2814 req->header[req->headers] = req->data + req->len;
2815 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "\r\n");
2816 req->len += strlen(req->header[req->headers]);
2817 if (req->headers < SIP_MAX_HEADERS)
2820 ast_log(LOG_WARNING, "Out of header space\n");
2826 /*--- add_line: Add content (not header) to SIP message */
2827 static int add_line(struct sip_request *req, char *line)
2829 if (req->len >= sizeof(req->data) - 4) {
2830 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2834 /* Add extra empty return */
2835 snprintf(req->data + req->len, sizeof(req->data) - req->len, "\r\n");
2836 req->len += strlen(req->data + req->len);
2838 req->line[req->lines] = req->data + req->len;
2839 snprintf(req->line[req->lines], sizeof(req->data) - req->len, "%s", line);
2840 req->len += strlen(req->line[req->lines]);
2841 if (req->lines < SIP_MAX_LINES)
2844 ast_log(LOG_WARNING, "Out of line space\n");
2850 /*--- copy_header: Copy one header field from one request to another */
2851 static int copy_header(struct sip_request *req, struct sip_request *orig, char *field)
2854 tmp = get_header(orig, field);
2855 if (!ast_strlen_zero(tmp)) {
2856 /* Add what we're responding to */
2857 return add_header(req, field, tmp);
2859 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2863 /*--- copy_all_header: Copy all headers from one request to another ---*/
2864 static int copy_all_header(struct sip_request *req, struct sip_request *orig, char *field)
2870 tmp = __get_header(orig, field, &start);
2871 if (!ast_strlen_zero(tmp)) {
2872 /* Add what we're responding to */
2873 add_header(req, field, tmp);
2878 return copied ? 0 : -1;
2881 /*--- copy_via_headers: Copy SIP VIA Headers from one request to another ---*/
2882 static int copy_via_headers(struct sip_pvt *p, struct sip_request *req, struct sip_request *orig, char *field)
2884 char tmp[256]="", *oh, *end;
2888 char iabuf[INET_ADDRSTRLEN];
2890 oh = __get_header(orig, field, &start);
2891 if (!ast_strlen_zero(oh)) {
2893 strncpy(tmp, oh, sizeof(tmp) - 1);
2894 oh = strstr(tmp, ";rport");
2896 end = strchr(oh + 1, ';');
2898 memmove(oh, end, strlen(end) + 1);
2902 if (!copied && (p->nat == SIP_NAT_ALWAYS)) {
2903 /* Whoo hoo! Now we can indicate port address translation too! Just
2904 another RFC (RFC3581). I'll leave the original comments in for
2906 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));
2907 add_header(req, field, new);
2909 /* Add what we're responding to */
2910 add_header(req, field, tmp);
2917 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2923 /*--- add_route: Add route header into request per learned route ---*/
2924 static void add_route(struct sip_request *req, struct sip_route *route)
2927 int n, rem = 255; /* sizeof(r)-1: Room for terminating 0 */
2933 n = strlen(route->hop);
2934 if ((n+3)>rem) break;
2940 strncpy(p, route->hop, rem); p += n;
2943 route = route->next;
2946 add_header(req, "Route", r);
2949 /*--- set_destination: Set destination from SIP URI ---*/
2950 static void set_destination(struct sip_pvt *p, char *uri)
2952 char *h, *maddr, hostname[256] = "";
2953 char iabuf[INET_ADDRSTRLEN];
2956 struct ast_hostent ahp;
2957 int debug=sip_debug_test_pvt(p);
2959 /* Parse uri to h (host) and port - uri is already just the part inside the <> */
2960 /* general form we are expecting is sip[s]:username[:password]@host[:port][;...] */
2963 ast_verbose("set_destination: Parsing <%s> for address/port to send to\n", uri);
2965 /* Find and parse hostname */
2966 h = strchr(uri, '@');
2971 if (strncmp(h, "sip:", 4) == 0)
2973 else if (strncmp(h, "sips:", 5) == 0)
2976 hn = strcspn(h, ":;>");
2977 if (hn > (sizeof(hostname) - 1)) hn = sizeof(hostname) - 1;
2978 strncpy(hostname, h, hn); hostname[hn] = '\0'; /* safe */
2981 /* Is "port" present? if not default to 5060 */
2985 port = strtol(h, &h, 10);
2990 /* Got the hostname:port - but maybe there's a "maddr=" to override address? */
2991 maddr = strstr(h, "maddr=");
2994 hn = strspn(maddr, "0123456789.");
2995 if (hn > (sizeof(hostname) - 1)) hn = sizeof(hostname) - 1;
2996 strncpy(hostname, maddr, hn); hostname[hn] = '\0'; /* safe */
2999 hp = ast_gethostbyname(hostname, &ahp);
3001 ast_log(LOG_WARNING, "Can't find address for host '%s'\n", hostname);
3004 p->sa.sin_family = AF_INET;
3005 memcpy(&p->sa.sin_addr, hp->h_addr, sizeof(p->sa.sin_addr));
3006 p->sa.sin_port = htons(port);
3008 ast_verbose("set_destination: set destination to %s, port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr), port);
3011 /*--- init_resp: Initialize SIP response, based on SIP request ---*/
3012 static int init_resp(struct sip_request *req, char *resp, struct sip_request *orig)
3014 /* Initialize a response */
3015 if (req->headers || req->len) {
3016 ast_log(LOG_WARNING, "Request already initialized?!?\n");
3019 req->header[req->headers] = req->data + req->len;
3020 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "SIP/2.0 %s\r\n", resp);
3021 req->len += strlen(req->header[req->headers]);
3022 if (req->headers < SIP_MAX_HEADERS)
3025 ast_log(LOG_WARNING, "Out of header space\n");
3029 /*--- init_req: Initialize SIP request ---*/
3030 static int init_req(struct sip_request *req, char *resp, char *recip)
3032 /* Initialize a response */
3033 if (req->headers || req->len) {
3034 ast_log(LOG_WARNING, "Request already initialized?!?\n");
3037 req->header[req->headers] = req->data + req->len;
3038 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "%s %s SIP/2.0\r\n", resp, recip);
3039 req->len += strlen(req->header[req->headers]);
3040 if (req->headers < SIP_MAX_HEADERS)
3043 ast_log(LOG_WARNING, "Out of header space\n");
3048 static int respprep(struct sip_request *resp, struct sip_pvt *p, char *msg, struct sip_request *req)
3050 char newto[256] = "", *ot;
3052 memset(resp, 0, sizeof(*resp));
3053 init_resp(resp, msg, req);
3054 copy_via_headers(p, resp, req, "Via");
3055 if (msg[0] == '2') copy_all_header(resp, req, "Record-Route");
3056 copy_header(resp, req, "From");
3057 ot = get_header(req, "To");
3058 if (!strstr(ot, "tag=")) {
3059 /* Add the proper tag if we don't have it already. If they have specified
3060 their tag, use it. Otherwise, use our own tag */
3061 if (!ast_strlen_zero(p->theirtag) && p->outgoing)
3062 snprintf(newto, sizeof(newto), "%s;tag=%s", ot, p->theirtag);
3063 else if (p->tag && !p->outgoing)
3064 snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag);
3066 strncpy(newto, ot, sizeof(newto) - 1);
3067 newto[sizeof(newto) - 1] = '\0';
3071 add_header(resp, "To", ot);
3072 copy_header(resp, req, "Call-ID");
3073 copy_header(resp, req, "CSeq");
3074 add_header(resp, "User-Agent", default_useragent);
3075 add_header(resp, "Allow", ALLOWED_METHODS);
3077 /* For registration responses, we also need expiry and
3081 snprintf(contact, sizeof(contact), "%s;expires=%d", p->our_contact, p->expiry);
3082 snprintf(tmp, sizeof(tmp), "%d", p->expiry);
3083 add_header(resp, "Expires", tmp);
3084 add_header(resp, "Contact", contact);
3086 add_header(resp, "Contact", p->our_contact);
3091 static int reqprep(struct sip_request *req, struct sip_pvt *p, char *msg, int seqno, int newbranch)
3093 struct sip_request *orig = &p->initreq;
3094 char stripped[80] ="";
3097 char iabuf[INET_ADDRSTRLEN];
3101 memset(req, 0, sizeof(struct sip_request));
3103 snprintf(p->lastmsg, sizeof(p->lastmsg), "Tx: %s", msg);
3111 p->branch ^= rand();
3112 if (p->nat != SIP_NAT_NEVER)
3113 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);
3114 else /* Some implementations (e.g. Uniden UIP200) can't handle rport being in the message!! */
3115 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);
3117 if (!strcasecmp(msg, "CANCEL") || !strcasecmp(msg, "ACK")) {
3118 /* MUST use original URI */
3119 c = p->initreq.rlPart2;
3120 } else if (!ast_strlen_zero(p->uri)) {
3124 strncpy(stripped, get_header(orig, "To"), sizeof(stripped) - 1);
3126 strncpy(stripped, get_header(orig, "From"), sizeof(stripped) - 1);
3128 c = strchr(stripped, '<');
3140 init_req(req, msg, c);
3142 snprintf(tmp, sizeof(tmp), "%d %s", seqno, msg);
3144 add_header(req, "Via", p->via);
3146 set_destination(p, p->route->hop);
3147 add_route(req, p->route->next);
3150 ot = get_header(orig, "To");
3151 of = get_header(orig, "From");
3153 /* Add tag *unless* this is a CANCEL, in which case we need to send it exactly
3154 as our original request, including tag (or presumably lack thereof) */
3155 if (!strstr(ot, "tag=") && strcasecmp(msg, "CANCEL")) {
3156 /* Add the proper tag if we don't have it already. If they have specified
3157 their tag, use it. Otherwise, use our own tag */
3158 if (p->outgoing && !ast_strlen_zero(p->theirtag))
3159 snprintf(newto, sizeof(newto), "%s;tag=%s", ot, p->theirtag);
3160 else if (!p->outgoing)
3161 snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag);
3163 snprintf(newto, sizeof(newto), "%s", ot);
3168 add_header(req, "From", of);
3169 add_header(req, "To", ot);
3171 add_header(req, "From", ot);
3172 add_header(req, "To", of);
3174 add_header(req, "Contact", p->our_contact);
3175 copy_header(req, orig, "Call-ID");
3176 add_header(req, "CSeq", tmp);
3178 add_header(req, "User-Agent", default_useragent);
3182 static int __transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req, int reliable)
3184 struct sip_request resp;
3186 if (reliable && (sscanf(get_header(req, "CSeq"), "%i ", &seqno) != 1)) {
3187 ast_log(LOG_WARNING, "Unable to determine sequence number from '%s'\n", get_header(req, "CSeq"));
3190 respprep(&resp, p, msg, req);
3191 add_header(&resp, "Content-Length", "0");
3192 add_blank_header(&resp);
3193 return send_response(p, &resp, reliable, seqno);
3196 /*--- transmit_response: Transmit response, no retransmits */
3197 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req)
3199 return __transmit_response(p, msg, req, 0);
3202 /*--- transmit_response: Transmit response, Make sure you get a reply */
3203 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal)
3205 return __transmit_response(p, msg, req, fatal ? 2 : 1);
3208 /*--- append_date: Append date to SIP message ---*/
3209 static void append_date(struct sip_request *req)
3216 strftime(tmpdat, sizeof(tmpdat), "%a, %d %b %Y %T GMT", &tm);
3217 add_header(req, "Date", tmpdat);
3220 /*--- transmit_response_with_date: Append date and content length before transmitting response ---*/
3221 static int transmit_response_with_date(struct sip_pvt *p, char *msg, struct sip_request *req)
3223 struct sip_request resp;
3224 respprep(&resp, p, msg, req);
3226 add_header(&resp, "Content-Length", "0");
3227 add_blank_header(&resp);
3228 return send_response(p, &resp, 0, 0);
3231 /*--- transmit_response_with_allow: Append Accept header, content length before transmitting response ---*/
3232 static int transmit_response_with_allow(struct sip_pvt *p, char *msg, struct sip_request *req, int reliable)
3234 struct sip_request resp;
3235 respprep(&resp, p, msg, req);
3236 add_header(&resp, "Accept", "application/sdp");
3237 add_header(&resp, "Content-Length", "0");
3238 add_blank_header(&resp);
3239 return send_response(p, &resp, reliable, 0);
3242 /* transmit_response_with_auth: Respond with authorization request */
3243 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *randdata, int reliable, char *header)
3245 struct sip_request resp;
3248 if (reliable && (sscanf(get_header(req, "CSeq"), "%i ", &seqno) != 1)) {
3249 ast_log(LOG_WARNING, "Unable to determine sequence number from '%s'\n", get_header(req, "CSeq"));
3252 snprintf(tmp, sizeof(tmp), "Digest realm=\"%s\", nonce=\"%s\"", global_realm, randdata);
3253 respprep(&resp, p, msg, req);
3254 add_header(&resp, header, tmp);
3255 add_header(&resp, "Content-Length", "0");
3256 add_blank_header(&resp);
3257 return send_response(p, &resp, reliable, seqno);
3260 /*--- add_text: Add text body to SIP message ---*/
3261 static int add_text(struct sip_request *req, char *text)
3263 /* XXX Convert \n's to \r\n's XXX */
3264 int len = strlen(text);
3266 snprintf(clen, sizeof(clen), "%d", len);
3267 add_header(req, "Content-Type", "text/plain");
3268 add_header(req, "Content-Length", clen);
3269 add_line(req, text);
3273 /*--- add_digit: add DTMF INFO tone to sip message ---*/
3274 /* Always adds default duration 250 ms, regardless of what came in over the line */
3275 static int add_digit(struct sip_request *req, char digit)
3280 snprintf(tmp, sizeof(tmp), "Signal=%c\r\nDuration=250\r\n", digit);
3282 snprintf(clen, sizeof(clen), "%d", len);
3283 add_header(req, "Content-Type", "application/dtmf-relay");
3284 add_header(req, "Content-Length", clen);
3289 /*--- add_sdp: Add Session Description Protocol message ---*/
3290 static int add_sdp(struct sip_request *resp, struct sip_pvt *p)
3294 int alreadysent = 0;
3296 struct sockaddr_in sin;
3297 struct sockaddr_in vsin;
3298 struct sip_codec_pref *cur;
3308 char iabuf[INET_ADDRSTRLEN];
3311 struct sockaddr_in dest;
3312 struct sockaddr_in vdest = { 0, };
3313 int debug=sip_debug_test_pvt(p);
3315 /* XXX We break with the "recommendation" and send our IP, in order that our
3316 peer doesn't have to ast_gethostbyname() us XXX */
3319 ast_log(LOG_WARNING, "No way to add SDP without an RTP structure\n");
3322 capability = p->jointcapability;
3324 if (!p->sessionid) {
3325 p->sessionid = getpid();
3326 p->sessionversion = p->sessionid;
3328 p->sessionversion++;
3329 ast_rtp_get_us(p->rtp, &sin);
3331 ast_rtp_get_us(p->vrtp, &vsin);
3333 if (p->redirip.sin_addr.s_addr) {
3334 dest.sin_port = p->redirip.sin_port;
3335 dest.sin_addr = p->redirip.sin_addr;
3337 capability = p->redircodecs;
3339 dest.sin_addr = p->ourip;
3340 dest.sin_port = sin.sin_port;
3343 /* Determine video destination */
3345 if (p->vredirip.sin_addr.s_addr) {
3346 vdest.sin_port = p->vredirip.sin_port;
3347 vdest.sin_addr = p->vredirip.sin_addr;
3349 vdest.sin_addr = p->ourip;
3350 vdest.sin_port = vsin.sin_port;
3354 ast_verbose("We're at %s port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ntohs(sin.sin_port));
3356 ast_verbose("Video is at %s port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ntohs(vsin.sin_port));
3358 snprintf(v, sizeof(v), "v=0\r\n");
3359 snprintf(o, sizeof(o), "o=root %d %d IN IP4 %s\r\n", p->sessionid, p->sessionversion, ast_inet_ntoa(iabuf, sizeof(iabuf), dest.sin_addr));
3360 snprintf(s, sizeof(s), "s=session\r\n");
3361 snprintf(c, sizeof(c), "c=IN IP4 %s\r\n", ast_inet_ntoa(iabuf, sizeof(iabuf), dest.sin_addr));
3362 snprintf(t, sizeof(t), "t=0 0\r\n");
3363 snprintf(m, sizeof(m), "m=audio %d RTP/AVP", ntohs(dest.sin_port));
3364 snprintf(m2, sizeof(m2), "m=video %d RTP/AVP", ntohs(vdest.sin_port));
3365 if (capability & p->prefcodec) {
3367 ast_verbose("Answering/Requesting with root capability %d\n", p->prefcodec);
3368 codec = ast_rtp_lookup_code(p->rtp, 1, p->prefcodec);
3370 snprintf(costr, sizeof(costr), " %d", codec);
3371 if (p->prefcodec <= AST_FORMAT_MAX_AUDIO) {
3372 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3373 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, p->prefcodec));
3374 strncpy(a, costr, sizeof(a) - 1);
3376 strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
3377 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, p->prefcodec));
3378 strncpy(a2, costr, sizeof(a2) - 1);
3381 alreadysent |= p->prefcodec;
3383 /* Start by sending our preferred codecs */
3386 if ((capability & cur->codec) && !(alreadysent & cur->codec)) {
3388 ast_verbose("Answering with preferred capability 0x%x(%s)\n", cur->codec, ast_getformatname(cur->codec));
3389 codec = ast_rtp_lookup_code(p->rtp, 1, cur->codec);
3391 snprintf(costr, sizeof(costr), " %d", codec);
3392 if (cur->codec <= AST_FORMAT_MAX_AUDIO) {
3393 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3394 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, cur->codec));
3395 strncat(a, costr, sizeof(a) - strlen(a) - 1);
3397 strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
3398 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, cur->codec));
3399 strncat(a2, costr, sizeof(a2) - strlen(a) - 1);
3403 alreadysent |= cur->codec;
3406 /* Now send any other common codecs, and non-codec formats: */
3407 for (x = 1; x <= ((videosupport && p->vrtp) ? AST_FORMAT_MAX_VIDEO : AST_FORMAT_MAX_AUDIO); x <<= 1) {
3408 if ((capability & x) && !(alreadysent & x)) {
3410 ast_verbose("Answering with capability 0x%x(%s)\n", x, ast_getformatname(x));
3411 codec = ast_rtp_lookup_code(p->rtp, 1, x);
3413 snprintf(costr, sizeof(costr), " %d", codec);
3414 if (x <= AST_FORMAT_MAX_AUDIO) {
3415 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3416 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, x));
3417 strncat(a, costr, sizeof(a) - strlen(a) - 1);
3419 strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
3420 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, x));
3421 strncat(a2, costr, sizeof(a2) - strlen(a2) - 1);
3426 for (x = 1; x <= AST_RTP_MAX; x <<= 1) {
3427 if (p->noncodeccapability & x) {
3429 ast_verbose("Answering with non-codec capability 0x%x(%s)\n", x, ast_getformatname(x));
3430 codec = ast_rtp_lookup_code(p->rtp, 0, x);
3432 snprintf(costr, sizeof(costr), " %d", codec);
3433 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3434 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(0, x));
3435 strncat(a, costr, sizeof(a) - strlen(a) - 1);
3436 if (x == AST_RTP_DTMF) {
3437 /* Indicate we support DTMF... Not sure about 16, but MSN supports it so dang it, we will too... */
3438 snprintf(costr, sizeof costr, "a=fmtp:%d 0-16\r\n",
3440 strncat(a, costr, sizeof(a) - strlen(a) - 1);
3445 strncat(a, "a=silenceSupp:off - - - -\r\n", sizeof(a) - strlen(a) - 1);
3446 if (strlen(m) < sizeof(m) - 2)
3447 strncat(m, "\r\n", sizeof(m) - strlen(m) - 1);
3448 if (strlen(m2) < sizeof(m2) - 2)
3449 strncat(m2, "\r\n", sizeof(m2) - strlen(m2) - 1);
3450 if ((sizeof(m) <= strlen(m) - 2) || (sizeof(m2) <= strlen(m2) - 2) || (sizeof(a) == strlen(a)) || (sizeof(a2) == strlen(a2)))
3451 ast_log(LOG_WARNING, "SIP SDP may be truncated due to undersized buffer!!\n");
3452 len = strlen(v) + strlen(s) + strlen(o) + strlen(c) + strlen(t) + strlen(m) + strlen(a);
3453 if ((p->vrtp) && (capability & VIDEO_CODEC_MASK)) /* only if video response is appropriate */
3454 len += strlen(m2) + strlen(a2);
3455 snprintf(costr, sizeof(costr), "%d", len);
3456 add_header(resp, "Content-Type", "application/sdp");
3457 add_header(resp, "Content-Length", costr);
3465 if ((p->vrtp) && (capability & VIDEO_CODEC_MASK)) { /* only if video response is appropriate */
3469 /* Update lastrtprx when we send our SDP */
3470 time(&p->lastrtprx);
3474 /*--- copy_request: copy SIP request (mostly used to save request for responses) ---*/
3475 static void copy_request(struct sip_request *dst,struct sip_request *src)
3479 offset = ((void *)dst) - ((void *)src);