2 * Asterisk -- A telephony toolkit for Linux.
4 * Implementation of Session Initiation Protocol
6 * Copyright (C) 2004, Digium, Inc.
8 * Mark Spencer <markster@digium.com>
10 * This program is free software, distributed under the terms of
11 * the GNU General Public License
18 #include <asterisk/lock.h>
19 #include <asterisk/channel.h>
20 #include <asterisk/channel_pvt.h>
21 #include <asterisk/config.h>
22 #include <asterisk/logger.h>
23 #include <asterisk/module.h>
24 #include <asterisk/pbx.h>
25 #include <asterisk/options.h>
26 #include <asterisk/lock.h>
27 #include <asterisk/sched.h>
28 #include <asterisk/io.h>
29 #include <asterisk/rtp.h>
30 #include <asterisk/acl.h>
31 #include <asterisk/manager.h>
32 #include <asterisk/callerid.h>
33 #include <asterisk/cli.h>
34 #include <asterisk/md5.h>
35 #include <asterisk/app.h>
36 #include <asterisk/musiconhold.h>
37 #include <asterisk/dsp.h>
38 #include <asterisk/features.h>
39 #include <asterisk/acl.h>
40 #include <asterisk/srv.h>
41 #include <asterisk/astdb.h>
42 #include <asterisk/causes.h>
43 #include <asterisk/utils.h>
45 #include <asterisk/astosp.h>
47 #include <sys/socket.h>
48 #include <sys/ioctl.h>
55 #include <arpa/inet.h>
57 #include <sys/signal.h>
58 #include <netinet/in_systm.h>
59 #include <netinet/ip.h>
61 #ifndef DEFAULT_USERAGENT
62 #define DEFAULT_USERAGENT "Asterisk PBX"
65 #define VIDEO_CODEC_MASK 0x1fc0000 /* Video codecs from H.261 thru AST_FORMAT_MAX_VIDEO */
67 #define IPTOS_MINCOST 0x02
70 /* #define VOCAL_DATA_HACK */
73 #define DEFAULT_DEFAULT_EXPIRY 120
74 #define DEFAULT_MAX_EXPIRY 3600
76 /* guard limit must be larger than guard secs */
77 /* guard min must be < 1000, and should be >= 250 */
78 #define EXPIRY_GUARD_SECS 15 /* How long before expiry do we reregister */
79 #define EXPIRY_GUARD_LIMIT 30 /* Below here, we use EXPIRY_GUARD_PCT instead of EXPIRY_GUARD_SECS */
80 #define EXPIRY_GUARD_MIN 500 /* This is the minimum guard time applied. If GUARD_PCT turns out
81 to be lower than this, it will use this time instead. This is in
83 #define EXPIRY_GUARD_PCT 0.20 /* Percentage of expires timeout to use when below EXPIRY_GUARD_LIMIT */
86 #define MAX(a,b) ((a) > (b) ? (a) : (b))
89 #define CALLERID_UNKNOWN "Unknown"
91 /* --- Choices for DTMF support in SIP channel */
92 #define SIP_DTMF_RFC2833 (1 << 0)
93 #define SIP_DTMF_INBAND (1 << 1)
94 #define SIP_DTMF_INFO (1 << 2)
96 static int max_expiry = DEFAULT_MAX_EXPIRY;
97 static int default_expiry = DEFAULT_DEFAULT_EXPIRY;
99 #define DEFAULT_MAXMS 2000 /* Must be faster than 2 seconds by default */
100 #define DEFAULT_FREQ_OK 60 * 1000 /* How often to check for the host to be up */
101 #define DEFAULT_FREQ_NOTOK 10 * 1000 /* How often to check, if the host is down... */
103 #define DEFAULT_RETRANS 1000 /* How frequently to retransmit */
104 #define MAX_RETRANS 5 /* Try only 5 times for retransmissions */
107 #define DEBUG_READ 0 /* Recieved data */
108 #define DEBUG_SEND 1 /* Transmit data */
110 static char *desc = "Session Initiation Protocol (SIP)";
111 static char *type = "SIP";
112 static char *tdesc = "Session Initiation Protocol (SIP)";
113 static char *config = "sip.conf";
115 #define DEFAULT_SIP_PORT 5060 /* From RFC 2543 */
116 #define SIP_MAX_PACKET 4096 /* Also from RFC 2543, should sub headers tho */
118 #define ALLOWED_METHODS "INVITE, ACK, CANCEL, OPTIONS, BYE, REFER"
120 static char default_useragent[AST_MAX_EXTENSION] = DEFAULT_USERAGENT;
122 static char default_context[AST_MAX_EXTENSION] = "default";
124 static char default_language[MAX_LANGUAGE] = "";
126 static char default_callerid[AST_MAX_EXTENSION] = "asterisk";
128 static char default_fromdomain[AST_MAX_EXTENSION] = "";
130 static char notifymime[AST_MAX_EXTENSION] = "application/simple-message-summary";
132 static int srvlookup = 0; /* SRV Lookup on or off. Default is off, RFC behavior is on */
134 static int pedanticsipchecking = 0; /* Extra checking ? Default off */
136 static int autocreatepeer = 0; /* Auto creation of peers at registration? Default off. */
138 static int relaxdtmf = 0;
140 static int global_rtptimeout = 0;
142 static int global_rtpholdtimeout = 0;
144 static int global_trustrpid = 0; /* Trust RPID headers? Default off. */
146 static int global_progressinband = 0;
149 static int global_ospauth = 0;
152 #define DEFAULT_MWITIME 10
153 static int global_mwitime = DEFAULT_MWITIME; /* Time between MWI checks for peers */
155 static int usecnt =0;
156 AST_MUTEX_DEFINE_STATIC(usecnt_lock);
158 /* Protect the interface list (of sip_pvt's) */
159 AST_MUTEX_DEFINE_STATIC(iflock);
161 /* Protect the monitoring thread, so only one process can kill or start it, and not
162 when it's doing something critical. */
163 AST_MUTEX_DEFINE_STATIC(netlock);
165 AST_MUTEX_DEFINE_STATIC(monlock);
167 /* This is the thread for the monitor which checks for input on the channels
168 which are not currently in use. */
169 static pthread_t monitor_thread = AST_PTHREADT_NULL;
171 static int restart_monitor(void);
173 /* Codecs that we support by default: */
174 static int global_capability = AST_FORMAT_ULAW | AST_FORMAT_ALAW | AST_FORMAT_GSM | AST_FORMAT_H263;
175 static int noncodeccapability = AST_RTP_DTMF;
177 static char ourhost[256];
178 static struct in_addr __ourip;
181 static int sipdebug = 0;
182 static struct sockaddr_in debugaddr;
186 static int videosupport = 0;
188 static int global_dtmfmode = SIP_DTMF_RFC2833; /* DTMF mode default */
189 static int recordhistory = 0;
190 static int global_promiscredir;
192 static char global_musicclass[MAX_LANGUAGE] = ""; /* Global music on hold class */
193 static char global_realm[AST_MAX_EXTENSION] = "asterisk"; /* Default realm */
194 static char regcontext[AST_MAX_EXTENSION] = "";
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 novideo; /* Didn't get video in invite, don't offer */
255 int jointcapability; /* Supported capability at both ends (codecs ) */
256 int peercapability; /* Supported peer capability */
257 int prefcodec; /* Preferred codec (outbound only) */
258 int noncodeccapability;
259 int callingpres; /* Calling presentation */
260 int outgoing; /* Outgoing or incoming call? */
261 int authtries; /* Times we've tried to authenticate */
262 int insecure; /* Don't check source port/ip */
263 int expiry; /* How long we take to expire */
264 int branch; /* One random number */
265 int canreinvite; /* Do we support reinvite */
266 int ringing; /* Have sent 180 ringing */
267 int progress; /* Have sent 183 message progress */
268 int useclientcode; /* Trust X-ClientCode info message */
269 int tag; /* Another random number */
270 int nat; /* Whether to try to support NAT */
271 int sessionid; /* SDP Session ID */
272 int sessionversion; /* SDP Session Version */
273 struct sockaddr_in sa; /* Our peer */
274 struct sockaddr_in redirip; /* Where our RTP should be going if not to us */
275 struct sockaddr_in vredirip; /* Where our Video RTP should be going if not to us */
276 int redircodecs; /* Redirect codecs */
277 struct sockaddr_in recv; /* Received as */
278 struct in_addr ourip; /* Our IP */
279 struct ast_channel *owner; /* Who owns us */
280 char exten[AST_MAX_EXTENSION]; /* Extension where to start */
281 char refer_to[AST_MAX_EXTENSION]; /* Place to store REFER-TO extension */
282 char referred_by[AST_MAX_EXTENSION]; /* Place to store REFERRED-BY extension */
283 char refer_contact[AST_MAX_EXTENSION]; /* Place to store Contact info from a REFER extension */
284 struct sip_pvt *refer_call; /* Call we are referring */
285 struct sip_route *route; /* Head of linked list of routing steps (fm Record-Route) */
286 int route_persistant; /* Is this the "real" route? */
287 char from[256]; /* The From: header */
288 char useragent[256]; /* User agent in SIP request */
289 char context[AST_MAX_EXTENSION]; /* Context for this call */
290 char fromdomain[AST_MAX_EXTENSION]; /* Domain to show in the from field */
291 char fromuser[AST_MAX_EXTENSION]; /* Domain to show in the user field */
292 char tohost[AST_MAX_EXTENSION]; /* Host we should put in the "to" field */
293 char language[MAX_LANGUAGE]; /* Default language for this call */
294 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
295 char rdnis[256]; /* Referring DNIS */
296 char theirtag[256]; /* Their tag */
299 char authname[256]; /* Who we use for authentication */
300 char uri[256]; /* Original requested URI */
301 char peersecret[256];
302 char peermd5secret[256];
303 char cid_num[256]; /* Caller*ID */
304 char cid_name[256]; /* Caller*ID */
306 char fullcontact[128]; /* Extra parameters to go in the "To" header */
307 char accountcode[20]; /* Account code */
308 char our_contact[256]; /* Our contact header */
309 char realm[256]; /* Authorization realm */
310 char nonce[256]; /* Authorization nonce */
311 char opaque[256]; /* Opaque nonsense */
312 char qop[80]; /* Quality of Protection, since SIP wasn't complicated enough yet. */
313 char domain[256]; /* Authorization nonce */
314 char lastmsg[256]; /* Last Message sent/received */
315 int amaflags; /* AMA Flags */
316 int pendinginvite; /* Any pending invite */
317 int needreinvite; /* Do we need to send another reinvite? */
318 int pendingbye; /* Need to send bye after we ack? */
319 int gotrefer; /* Got a refer? */
321 int ospauth; /* Allow OSP Authentication */
322 int osphandle; /* OSP Handle for call */
323 time_t ospstart; /* OSP Start time */
325 struct sip_request initreq; /* Initial request */
327 int maxtime; /* Max time for first response */
328 int initid; /* Auto-congest ID if appropriate */
329 int autokillid; /* Auto-kill ID */
330 time_t lastrtprx; /* Last RTP received */
331 int rtptimeout; /* RTP timeout time */
332 int rtpholdtimeout; /* RTP timeout when on hold */
337 int promiscredir; /* Promiscuous redirection */
345 struct sip_peer *peerpoke; /* If this calls is to poke a peer, which one */
346 struct sip_registry *registry; /* If this is a REGISTER call, to which registry */
347 struct ast_rtp *rtp; /* RTP Session */
348 struct ast_rtp *vrtp; /* Video RTP session */
349 struct sip_pkt *packets; /* Packets scheduled for re-transmission */
350 struct sip_history *history; /* History of this SIP dialog */
351 struct sip_pvt *next; /* Next call in chain */
354 #define FLAG_RESPONSE (1 << 0)
355 #define FLAG_FATAL (1 << 1)
357 /* sip packet - read in sipsock_read, transmitted in send_request */
359 struct sip_pkt *next; /* Next packet */
360 int retrans; /* Retransmission number */
361 int seqno; /* Sequence number */
362 int flags; /* non-zero if this is a response packet (e.g. 200 OK) */
363 struct sip_pvt *owner; /* Owner call */
364 int retransid; /* Retransmission ID */
365 int packetlen; /* Length of packet */
369 /* Structure for SIP user data. User's place calls to us */
371 /* Users who can access various contexts */
378 char accountcode[20];
379 char language[MAX_LANGUAGE];
380 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
381 char useragent[256]; /* User agent in SIP request */
382 unsigned int callgroup;
383 unsigned int pickupgroup;
391 int ospauth; /* Allow OSP Authentication */
404 struct sip_user *next;
407 /* Structure for SIP peer data, we place calls to peers if registred or fixed IP address (host) */
412 char context[80]; /* JK02: peers need context too to allow parking etc */
415 char regexten[AST_MAX_EXTENSION]; /* Extension to register (if regcontext is used) */
418 char fullcontact[128];
421 char mailbox[AST_MAX_EXTENSION];
422 char language[MAX_LANGUAGE];
423 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
424 char useragent[256]; /* User agent in SIP request */
435 int ospauth; /* Allow OSP Authentication */
439 unsigned int callgroup;
440 unsigned int pickupgroup;
446 struct sockaddr_in addr;
450 struct sip_pvt *call; /* Call pointer */
451 int pokeexpire; /* When to expire poke */
452 int lastms; /* How long last response took (in ms), or -1 for no response */
453 int maxms; /* Max ms we will accept for the host to be up, 0 to not monitor */
454 struct timeval ps; /* Ping send time */
456 struct sockaddr_in defaddr;
462 struct sip_peer *next;
465 AST_MUTEX_DEFINE_STATIC(sip_reload_lock);
466 static int sip_reloading = 0;
468 #define REG_STATE_UNREGISTERED 0
469 #define REG_STATE_REGSENT 1
470 #define REG_STATE_AUTHSENT 2
471 #define REG_STATE_REGISTERED 3
472 #define REG_STATE_REJECTED 4
473 #define REG_STATE_TIMEOUT 5
474 #define REG_STATE_NOAUTH 6
476 #define SIP_NAT_NEVER 0
477 #define SIP_NAT_RFC3581 (1 << 0)
478 #define SIP_NAT_ROUTE (1 << 2)
479 #define SIP_NAT_ALWAYS (SIP_NAT_ROUTE | SIP_NAT_RFC3581)
481 /* sip_registry: Registrations with other SIP proxies */
482 struct sip_registry {
483 int portno; /* Optional port override */
484 char username[80]; /* Who we are registering as */
485 char authuser[80]; /* Who we *authenticate* as */
487 char secret[80]; /* Password or key name in []'s */
489 char contact[80]; /* Contact extension */
491 int expire; /* Sched ID of expiration */
492 int timeout; /* sched id of sip_reg_timeout */
493 int refresh; /* How often to refresh */
494 struct sip_pvt *call; /* create a sip_pvt structure for each outbound "registration call" in progress */
496 int callid_valid; /* 0 means we haven't chosen callid for this registry yet. */
497 char callid[80]; /* Global CallID for this registry */
498 unsigned int ocseq; /* Sequence number we got to for REGISTERs for this registry */
499 struct sockaddr_in us; /* Who the server thinks we are */
500 struct sip_registry *next;
503 /*--- The user list: Users and friends ---*/
504 static struct ast_user_list {
505 struct sip_user *users;
509 /*--- The peer list: Peers and Friends ---*/
510 static struct ast_peer_list {
511 struct sip_peer *peers;
515 /*--- The register list: Other SIP proxys we register with and call ---*/
516 static struct ast_register_list {
517 struct sip_registry *registrations;
523 #define REINVITE_INVITE 1
524 #define REINVITE_UPDATE 2
526 static int __sip_do_register(struct sip_registry *r);
528 static int sipsock = -1;
529 static int global_nat = SIP_NAT_RFC3581;
530 static int global_canreinvite = REINVITE_INVITE;
533 static struct sockaddr_in bindaddr;
534 static struct sockaddr_in externip;
535 static struct ast_ha *localaddr;
537 static struct ast_frame *sip_read(struct ast_channel *ast);
538 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req);
539 static int transmit_response_with_sdp(struct sip_pvt *p, char *msg, struct sip_request *req, int retrans);
540 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *rand, int reliable, char *header);
541 static int transmit_request(struct sip_pvt *p, char *msg, int inc, int reliable, int newbranch);
542 static int transmit_request_with_auth(struct sip_pvt *p, char *msg, int inc, int reliable, int newbranch);
543 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);
544 static int transmit_reinvite_with_sdp(struct sip_pvt *p);
545 static int transmit_info_with_digit(struct sip_pvt *p, char digit);
546 static int transmit_message_with_text(struct sip_pvt *p, char *text);
547 static int transmit_refer(struct sip_pvt *p, char *dest);
548 static struct sip_peer *temp_peer(char *name);
549 static int do_proxy_auth(struct sip_pvt *p, struct sip_request *req, char *header, char *respheader, char *msg, int init);
550 static void free_old_route(struct sip_route *route);
551 static int build_reply_digest(struct sip_pvt *p, char *orig_header, char *digest, int digest_len);
552 static int update_user_counter(struct sip_pvt *fup, int event);
553 static void prune_peers(void);
554 static int sip_do_reload(void);
557 /*--- sip_debug_test_addr: See if we pass debug IP filter */
558 static inline int sip_debug_test_addr(struct sockaddr_in *addr)
562 if (debugaddr.sin_addr.s_addr) {
563 if (((ntohs(debugaddr.sin_port) != 0)
564 && (debugaddr.sin_port != addr->sin_port))
565 || (debugaddr.sin_addr.s_addr != addr->sin_addr.s_addr))
571 static inline int sip_debug_test_pvt(struct sip_pvt *p)
575 return sip_debug_test_addr(((p->nat & SIP_NAT_ROUTE) ? &p->recv : &p->sa));
579 /*--- __sip_xmit: Transmit SIP message ---*/
580 static int __sip_xmit(struct sip_pvt *p, char *data, int len)
583 char iabuf[INET_ADDRSTRLEN];
584 if (p->nat & SIP_NAT_ROUTE)
585 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->recv, sizeof(struct sockaddr_in));
587 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->sa, sizeof(struct sockaddr_in));
589 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));
594 static void sip_destroy(struct sip_pvt *p);
596 /*--- ast_sip_ouraddrfor: NAT fix - decide which IP address to use for ASterisk server? ---*/
597 /* Only used for outbound registrations */
598 static int ast_sip_ouraddrfor(struct in_addr *them, struct in_addr *us)
601 * Using the localaddr structure built up with localnet statements
602 * apply it to their address to see if we need to substitute our
603 * externip or can get away with our internal bindaddr
605 struct sockaddr_in theirs;
606 theirs.sin_addr = *them;
607 if (localaddr && externip.sin_addr.s_addr &&
608 ast_apply_ha(localaddr, &theirs)) {
609 char iabuf[INET_ADDRSTRLEN];
610 memcpy(us, &externip.sin_addr, sizeof(struct in_addr));
611 ast_inet_ntoa(iabuf, sizeof(iabuf), *(struct in_addr *)&them->s_addr);
612 ast_log(LOG_DEBUG, "Target address %s is not local, substituting externip\n", iabuf);
614 else if (bindaddr.sin_addr.s_addr)
615 memcpy(us, &bindaddr.sin_addr, sizeof(struct in_addr));
617 return ast_ouraddrfor(them, us);
621 static int append_history(struct sip_pvt *p, char *event, char *data)
623 struct sip_history *hist, *prev;
627 hist = malloc(sizeof(struct sip_history));
629 memset(hist, 0, sizeof(struct sip_history));
630 snprintf(hist->event, sizeof(hist->event), "%-15s %s", event, data);
634 if ((*c == '\r') || (*c == '\n')) {
640 /* Enqueue into history */
653 /*--- retrans_pkt: Retransmit SIP message if no answer ---*/
654 static int retrans_pkt(void *data)
656 struct sip_pkt *pkt=data, *prev, *cur;
658 char iabuf[INET_ADDRSTRLEN];
659 ast_mutex_lock(&pkt->owner->lock);
660 if (pkt->retrans < MAX_RETRANS) {
662 if (sip_debug_test_pvt(pkt->owner)) {
663 if (pkt->owner->nat & SIP_NAT_ROUTE)
664 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));
666 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));
668 append_history(pkt->owner, "ReTx", pkt->data);
669 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
672 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");
673 append_history(pkt->owner, "MaxRetries", pkt->flags & FLAG_FATAL ? "(Critical)" : "(Non-critical)");
675 if (pkt->flags & FLAG_FATAL) {
676 while(pkt->owner->owner && ast_mutex_trylock(&pkt->owner->owner->lock)) {
677 ast_mutex_unlock(&pkt->owner->lock);
679 ast_mutex_lock(&pkt->owner->lock);
681 if (pkt->owner->owner) {
682 ast_queue_hangup(pkt->owner->owner);
683 ast_mutex_unlock(&pkt->owner->owner->lock);
685 /* If no owner, destroy now */
686 pkt->owner->needdestroy = 1;
689 /* In any case, go ahead and remove the packet */
691 cur = pkt->owner->packets;
700 prev->next = cur->next;
702 pkt->owner->packets = cur->next;
703 ast_mutex_unlock(&pkt->owner->lock);
707 ast_log(LOG_WARNING, "Weird, couldn't find packet owner!\n");
710 ast_mutex_unlock(&pkt->owner->lock);
714 /*--- __sip_reliable_xmit: transmit packet with retransmits ---*/
715 static int __sip_reliable_xmit(struct sip_pvt *p, int seqno, int resp, char *data, int len, int fatal)
718 pkt = malloc(sizeof(struct sip_pkt) + len + 1);
721 memset(pkt, 0, sizeof(struct sip_pkt));
722 memcpy(pkt->data, data, len);
723 pkt->packetlen = len;
724 pkt->next = p->packets;
728 pkt->data[len] = '\0';
730 pkt->flags |= FLAG_FATAL;
731 /* Schedule retransmission */
732 pkt->retransid = ast_sched_add(sched, DEFAULT_RETRANS, retrans_pkt, pkt);
733 pkt->next = p->packets;
735 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
736 if (!strncasecmp(pkt->data, "INVITE", 6)) {
737 /* Note this is a pending invite */
738 p->pendinginvite = seqno;
743 /*--- __sip_autodestruct: Kill a call (called by scheduler) ---*/
744 static int __sip_autodestruct(void *data)
746 struct sip_pvt *p = data;
748 ast_log(LOG_DEBUG, "Auto destroying call '%s'\n", p->callid);
749 append_history(p, "AutoDestroy", "");
751 ast_log(LOG_WARNING, "Autodestruct on call '%s' with owner in place\n", p->callid);
752 ast_queue_hangup(p->owner);
759 /*--- sip_scheddestroy: Schedule destruction of SIP call ---*/
760 static int sip_scheddestroy(struct sip_pvt *p, int ms)
763 if (sip_debug_test_pvt(p))
764 ast_verbose("Scheduling destruction of call '%s' in %d ms\n", p->callid, ms);
766 snprintf(tmp, sizeof(tmp), "%d ms", ms);
767 append_history(p, "SchedDestroy", tmp);
769 if (p->autokillid > -1)
770 ast_sched_del(sched, p->autokillid);
771 p->autokillid = ast_sched_add(sched, ms, __sip_autodestruct, p);
775 /*--- sip_cancel_destroy: Cancel destruction of SIP call ---*/
776 static int sip_cancel_destroy(struct sip_pvt *p)
778 if (p->autokillid > -1)
779 ast_sched_del(sched, p->autokillid);
780 append_history(p, "CancelDestroy", "");
785 /*--- __sip_ack: Acknowledges receipt of a packet and stops retransmission ---*/
786 static int __sip_ack(struct sip_pvt *p, int seqno, int resp, const char *msg)
788 struct sip_pkt *cur, *prev = NULL;
791 /* Just in case... */
792 if (!msg) msg = "___NEVER___";
795 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp) &&
796 ((cur->flags & FLAG_RESPONSE) ||
797 (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
798 if (!resp && (seqno == p->pendinginvite)) {
799 ast_log(LOG_DEBUG, "Acked pending invite %d\n", p->pendinginvite);
800 p->pendinginvite = 0;
803 /* this is our baby */
805 prev->next = cur->next;
807 p->packets = cur->next;
808 if (cur->retransid > -1)
809 ast_sched_del(sched, cur->retransid);
817 ast_log(LOG_DEBUG, "Stopping retransmission on '%s' of %s %d: %s\n", p->callid, resp ? "Response" : "Request", seqno, res ? "Not Found" : "Found");
821 /* Pretend to ack all packets */
822 static int __sip_pretend_ack(struct sip_pvt *p)
825 __sip_ack(p, p->packets->seqno, (p->packets->flags & FLAG_RESPONSE), p->packets->data);
830 /*--- __sip_semi_ack: Acks receipt of packet, keep it around (used for provisional responses) ---*/
831 static int __sip_semi_ack(struct sip_pvt *p, int seqno, int resp, const char *msg)
837 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp) &&
838 ((cur->flags & FLAG_RESPONSE) ||
839 (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
840 /* this is our baby */
841 if (cur->retransid > -1)
842 ast_sched_del(sched, cur->retransid);
849 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");
853 static void parse(struct sip_request *req);
854 static char *get_header(struct sip_request *req, char *name);
855 static void copy_request(struct sip_request *dst,struct sip_request *src);
857 static void parse_copy(struct sip_request *dst, struct sip_request *src)
859 memset(dst, 0, sizeof(*dst));
860 memcpy(dst->data, src->data, sizeof(dst->data));
864 /*--- send_response: Transmit response on SIP request---*/
865 static int send_response(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
868 char iabuf[INET_ADDRSTRLEN];
869 struct sip_request tmp;
871 if (sip_debug_test_pvt(p)) {
872 if (p->nat & SIP_NAT_ROUTE)
873 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));
875 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));
879 parse_copy(&tmp, req);
880 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
881 append_history(p, "TxRespRel", tmpmsg);
883 res = __sip_reliable_xmit(p, seqno, 1, req->data, req->len, (reliable > 1));
886 parse_copy(&tmp, req);
887 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
888 append_history(p, "TxResp", tmpmsg);
890 res = __sip_xmit(p, req->data, req->len);
897 /*--- send_request: Send SIP Request to the other part of the dialogue ---*/
898 static int send_request(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
901 char iabuf[INET_ADDRSTRLEN];
902 struct sip_request tmp;
904 if (sip_debug_test_pvt(p)) {
905 if (p->nat & SIP_NAT_ROUTE)
906 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));
908 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));
912 parse_copy(&tmp, req);
913 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
914 append_history(p, "TxReqRel", tmpmsg);
916 res = __sip_reliable_xmit(p, seqno, 0, req->data, req->len, (reliable > 1));
919 parse_copy(&tmp, req);
920 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
921 append_history(p, "TxReq", tmpmsg);
923 res = __sip_xmit(p, req->data, req->len);
928 /*--- url_decode: Decode SIP URL ---*/
929 static void url_decode(char *s)
937 if (sscanf(s + 1, "%2x", &tmp) == 1) {
939 s += 2; /* Will be incremented once more when we break out */
943 /* Fall through if something wasn't right with the formatting */
953 /*--- ditch_braces: Pick out text in braces from character string ---*/
954 static char *ditch_braces(char *tmp)
959 if ((q = strchr(tmp, '"')) ) {
961 if ((q = strchr(c, '"')) )
964 ast_log(LOG_WARNING, "No closing quote in '%s'\n", tmp);
968 if ((n = strchr(c, '<')) ) {
970 while(*c && *c != '>') c++;
972 ast_log(LOG_WARNING, "No closing brace in '%s'\n", tmp);
981 /*--- sip_sendtext: Send SIP MESSAGE text within a call ---*/
982 /* Called from PBX core text message functions */
983 static int sip_sendtext(struct ast_channel *ast, char *text)
985 struct sip_pvt *p = ast->pvt->pvt;
986 int debug=sip_debug_test_pvt(p);
989 ast_verbose("Sending text %s on %s\n", text, ast->name);
992 if (!text || ast_strlen_zero(text))
995 ast_verbose("Really sending text %s on %s\n", text, ast->name);
996 transmit_message_with_text(p, text);
1000 static void realtime_update_peer(const char *peername, struct sockaddr_in *sin, const char *username, int expirey)
1004 char regseconds[20];
1009 snprintf(regseconds, sizeof(regseconds), "%ld", nowtime);
1010 ast_inet_ntoa(ipaddr, sizeof(ipaddr), sin->sin_addr);
1011 snprintf(port, sizeof(port), "%d", ntohs(sin->sin_port));
1012 ast_update_realtime("sipfriends", "name", peername, "ipaddr", ipaddr, "port", port, "regseconds", regseconds, "username", username, NULL);
1015 static void register_peer_exten(struct sip_peer *peer, int onoff)
1017 unsigned char multi[256]="";
1018 char *stringp, *ext;
1019 if (!ast_strlen_zero(regcontext)) {
1020 strncpy(multi, ast_strlen_zero(peer->regexten) ? peer->name : peer->regexten, sizeof(multi) - 1);
1022 while((ext = strsep(&stringp, "&"))) {
1024 ast_add_extension(regcontext, 1, ext, 1, NULL, NULL, "Noop", strdup(peer->name), free, type);
1026 ast_context_remove_extension(regcontext, ext, 1, NULL);
1031 static void destroy_peer(struct sip_peer *peer)
1033 /* Delete it, it needs to disappear */
1035 sip_destroy(peer->call);
1036 if (peer->expire > -1)
1037 ast_sched_del(sched, peer->expire);
1038 if (peer->pokeexpire > -1)
1039 ast_sched_del(sched, peer->pokeexpire);
1040 register_peer_exten(peer, 0);
1041 ast_free_ha(peer->ha);
1045 /*--- update_peer: Update peer data in database (if used) ---*/
1046 static void update_peer(struct sip_peer *p, int expiry)
1049 realtime_update_peer(p->name, &p->addr, p->username, expiry);
1052 static struct sip_peer *build_peer(const char *name, struct ast_variable *v, int temponly);
1054 static struct sip_peer *realtime_peer(const char *peername, struct sockaddr_in *sin)
1056 struct ast_variable *var, *tmp=NULL;
1058 struct sip_peer *peer=NULL;
1059 time_t nowtime, regseconds;
1063 ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr);
1065 var = ast_load_realtime("sipfriends", "name", peername, NULL);
1067 var = ast_load_realtime("sipfriends", "ipaddr", iabuf, NULL);
1069 /* Make sure it's not a user only... */
1070 peer = build_peer(peername, var, 1);
1072 /* Add some finishing touches, addresses, etc */
1076 if (!strcasecmp(tmp->name, "type")) {
1077 if (strcasecmp(tmp->value, "friend") &&
1078 strcasecmp(tmp->value, "peer")) {
1079 /* Whoops, we weren't supposed to exist! */
1084 } else if (!strcasecmp(tmp->name, "regseconds")) {
1085 if (sscanf(tmp->value, "%li", ®seconds) != 1)
1087 } else if (!strcasecmp(tmp->name, "ipaddr")) {
1088 inet_aton(tmp->value, &(peer->addr.sin_addr));
1089 } else if (!strcasecmp(tmp->name, "port")) {
1090 peer->addr.sin_port = htons(atoi(tmp->value));
1091 } else if (!strcasecmp(tmp->name, "host")) {
1092 if (!strcasecmp(tmp->value, "dynamic"))
1097 if (peer && dynamic) {
1099 if ((nowtime - regseconds) > 0) {
1100 memset(&peer->addr, 0, sizeof(peer->addr));
1102 ast_log(LOG_DEBUG, "Bah, we're expired (%ld/%ld/%ld)!\n", nowtime - regseconds, regseconds, nowtime);
1106 ast_destroy_realtime(var);
1111 /*--- find_peer: Locate peer by name or ip address */
1112 static struct sip_peer *find_peer(const char *peer, struct sockaddr_in *sin)
1114 struct sip_peer *p = NULL;
1118 /* Find by peer name */
1120 if (!strcasecmp(p->name, peer)) {
1129 if (!inaddrcmp(&p->addr, sin) ||
1131 (p->addr.sin_addr.s_addr == sin->sin_addr.s_addr))) {
1139 p = realtime_peer(peer, sin);
1145 static void destroy_user(struct sip_user *user)
1147 ast_free_ha(user->ha);
1151 static struct sip_user *build_user(const char *name, struct ast_variable *v);
1152 static struct sip_user *realtime_user(const char *username)
1154 struct ast_variable *var;
1155 struct ast_variable *tmp;
1156 struct sip_user *user=NULL;
1157 var = ast_load_realtime("sipfriends", "name", username, NULL);
1159 /* Make sure it's not a user only... */
1160 user = build_user(username, var);
1162 /* Add some finishing touches, addresses, etc */
1166 if (!strcasecmp(tmp->name, "type")) {
1167 if (strcasecmp(tmp->value, "friend") &&
1168 strcasecmp(tmp->value, "user")) {
1169 /* Whoops, we weren't supposed to exist! */
1178 ast_destroy_realtime(var);
1183 /*--- find_user: Locate user by name */
1184 static struct sip_user *find_user(char *name)
1186 struct sip_user *u = NULL;
1190 if (!strcasecmp(u->name, name)) {
1196 u = realtime_user(name);
1201 /*--- create_addr: create address structure from peer definition ---*/
1202 /* Or, if peer not found, find it in the global DNS */
1203 /* returns TRUE on failure, FALSE on success */
1204 static int create_addr(struct sip_pvt *r, char *opeer)
1207 struct ast_hostent ahp;
1213 char host[256], *hostn;
1216 strncpy(peer, opeer, sizeof(peer) - 1);
1217 port = strchr(peer, ':');
1222 r->sa.sin_family = AF_INET;
1223 ast_mutex_lock(&peerl.lock);
1224 p = find_peer(peer, NULL);
1228 r->capability = p->capability;
1231 ast_log(LOG_DEBUG, "Setting NAT on RTP to %d\n", (r->nat & SIP_NAT_ROUTE));
1232 ast_rtp_setnat(r->rtp, (r->nat & SIP_NAT_ROUTE));
1235 ast_log(LOG_DEBUG, "Setting NAT on VRTP to %d\n", (r->nat & SIP_NAT_ROUTE));
1236 ast_rtp_setnat(r->vrtp, (r->nat & SIP_NAT_ROUTE));
1238 strncpy(r->peername, p->username, sizeof(r->peername)-1);
1239 strncpy(r->authname, p->username, sizeof(r->authname)-1);
1240 strncpy(r->peersecret, p->secret, sizeof(r->peersecret)-1);
1241 strncpy(r->peermd5secret, p->md5secret, sizeof(r->peermd5secret)-1);
1242 strncpy(r->username, p->username, sizeof(r->username)-1);
1243 strncpy(r->tohost, p->tohost, sizeof(r->tohost)-1);
1244 strncpy(r->fullcontact, p->fullcontact, sizeof(r->fullcontact)-1);
1245 if (!r->initreq.headers && !ast_strlen_zero(p->fromdomain)) {
1246 if ((callhost = strchr(r->callid, '@'))) {
1247 strncpy(callhost + 1, p->fromdomain, sizeof(r->callid) - (callhost - r->callid) - 2);
1250 if (ast_strlen_zero(r->tohost)) {
1251 if (p->addr.sin_addr.s_addr)
1252 ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->addr.sin_addr);
1254 ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->defaddr.sin_addr);
1256 if (!ast_strlen_zero(p->fromdomain))
1257 strncpy(r->fromdomain, p->fromdomain, sizeof(r->fromdomain)-1);
1258 if (!ast_strlen_zero(p->fromuser))
1259 strncpy(r->fromuser, p->fromuser, sizeof(r->fromuser)-1);
1260 r->insecure = p->insecure;
1261 r->canreinvite = p->canreinvite;
1262 r->maxtime = p->maxms;
1263 r->callgroup = p->callgroup;
1264 r->pickupgroup = p->pickupgroup;
1266 r->dtmfmode = p->dtmfmode;
1267 if (r->dtmfmode & SIP_DTMF_RFC2833)
1268 r->noncodeccapability |= AST_RTP_DTMF;
1270 r->noncodeccapability &= ~AST_RTP_DTMF;
1272 r->promiscredir = p->promiscredir;
1273 strncpy(r->context, p->context,sizeof(r->context)-1);
1274 if ((p->addr.sin_addr.s_addr || p->defaddr.sin_addr.s_addr) &&
1275 (!p->maxms || ((p->lastms > 0) && (p->lastms <= p->maxms)))) {
1276 if (p->addr.sin_addr.s_addr) {
1277 r->sa.sin_addr = p->addr.sin_addr;
1278 r->sa.sin_port = p->addr.sin_port;
1280 r->sa.sin_addr = p->defaddr.sin_addr;
1281 r->sa.sin_port = p->defaddr.sin_port;
1283 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1291 ast_mutex_unlock(&peerl.lock);
1295 portno = atoi(port);
1297 portno = DEFAULT_SIP_PORT;
1302 snprintf(service, sizeof(service), "_sip._udp.%s", peer);
1303 ret = ast_get_srv(NULL, host, sizeof(host), &tportno, service);
1309 hp = ast_gethostbyname(hostn, &ahp);
1311 strncpy(r->tohost, peer, sizeof(r->tohost) - 1);
1312 memcpy(&r->sa.sin_addr, hp->h_addr, sizeof(r->sa.sin_addr));
1313 r->sa.sin_port = htons(portno);
1314 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1317 ast_log(LOG_WARNING, "No such host: %s\n", peer);
1330 /*--- auto_congest: Scheduled congestion on a call ---*/
1331 static int auto_congest(void *nothing)
1333 struct sip_pvt *p = nothing;
1334 ast_mutex_lock(&p->lock);
1337 if (!ast_mutex_trylock(&p->owner->lock)) {
1338 ast_log(LOG_NOTICE, "Auto-congesting %s\n", p->owner->name);
1339 ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
1340 ast_mutex_unlock(&p->owner->lock);
1343 ast_mutex_unlock(&p->lock);
1347 /*--- sip_prefs_free: Free codec list in preference structure ---*/
1348 static void sip_prefs_free(void)
1350 struct sip_codec_pref *cur, *next;
1360 /*--- sip_pref_remove: Remove codec from pref list ---*/
1361 static void sip_pref_remove(int format)
1363 struct sip_codec_pref *cur, *prev=NULL;
1366 if (cur->codec == format) {
1368 prev->next = cur->next;
1379 /*--- sip_pref_append: Append codec to list ---*/
1380 static int sip_pref_append(int format)
1382 struct sip_codec_pref *cur, *tmp;
1383 sip_pref_remove(format);
1384 tmp = (struct sip_codec_pref *)malloc(sizeof(struct sip_codec_pref));
1387 memset(tmp, 0, sizeof(struct sip_codec_pref));
1388 tmp->codec = format;
1399 /*--- sip_codec_choose: Pick a codec ---*/
1400 static int sip_codec_choose(int formats)
1402 struct sip_codec_pref *cur;
1403 formats &= ((AST_FORMAT_MAX_AUDIO << 1) - 1);
1406 if (formats & cur->codec)
1410 return ast_best_codec(formats);
1413 /*--- sip_call: Initiate SIP call from PBX ---*/
1414 /* used from the dial() application */
1415 static int sip_call(struct ast_channel *ast, char *dest, int timeout)
1419 char *vxml_url = NULL;
1420 char *distinctive_ring = NULL;
1421 char *osptoken = NULL;
1423 char *osphandle = NULL;
1425 struct varshead *headp;
1426 struct ast_var_t *current;
1429 if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) {
1430 ast_log(LOG_WARNING, "sip_call called on %s, neither down nor reserved\n", ast->name);
1433 /* Check whether there is vxml_url, distinctive ring variables */
1435 headp=&ast->varshead;
1436 AST_LIST_TRAVERSE(headp,current,entries) {
1437 /* Check whether there is a VXML_URL variable */
1438 if (!vxml_url && !strcasecmp(ast_var_name(current),"VXML_URL")) {
1439 vxml_url = ast_var_value(current);
1440 } else if (!distinctive_ring && !strcasecmp(ast_var_name(current),"ALERT_INFO")) {
1441 /* Check whether there is a ALERT_INFO variable */
1442 distinctive_ring = ast_var_value(current);
1445 else if (!osptoken && !strcasecmp(ast_var_name(current), "OSPTOKEN")) {
1446 osptoken = ast_var_value(current);
1447 } else if (!osphandle && !strcasecmp(ast_var_name(current), "OSPHANDLE")) {
1448 osphandle = ast_var_value(current);
1456 if (!osptoken || !osphandle || (sscanf(osphandle, "%i", &p->osphandle) != 1)) {
1457 /* Force Disable OSP support */
1463 ast_log(LOG_DEBUG, "Outgoing Call for %s\n", p->username);
1464 res = update_user_counter(p,INC_OUT_USE);
1466 p->callingpres = ast->cid.cid_pres;
1467 p->jointcapability = p->capability;
1468 transmit_invite(p, "INVITE", 1, NULL, NULL, vxml_url,distinctive_ring, osptoken, 1);
1470 /* Initialize auto-congest time */
1471 p->initid = ast_sched_add(sched, p->maxtime * 4, auto_congest, p);
1477 /*--- __sip_destroy: Execute destrucion of call structure, release memory---*/
1478 static void __sip_destroy(struct sip_pvt *p, int lockowner)
1480 struct sip_pvt *cur, *prev = NULL;
1482 struct sip_history *hist;
1484 if (sip_debug_test_pvt(p))
1485 ast_verbose("Destroying call '%s'\n", p->callid);
1486 if (p->stateid > -1)
1487 ast_extension_state_del(p->stateid, NULL);
1489 ast_sched_del(sched, p->initid);
1490 if (p->autokillid > -1)
1491 ast_sched_del(sched, p->autokillid);
1494 ast_rtp_destroy(p->rtp);
1497 ast_rtp_destroy(p->vrtp);
1500 free_old_route(p->route);
1504 /* Carefully unlink from registry */
1505 struct sip_registry *reg;
1506 ast_mutex_lock(®l.lock);
1507 reg = regl.registrations;
1509 if ((reg == p->registry) && (p->registry->call == p))
1510 p->registry->call=NULL;
1513 ast_mutex_unlock(®l.lock);
1515 /* Unlink us from the owner if we have one */
1518 ast_mutex_lock(&p->owner->lock);
1519 ast_log(LOG_DEBUG, "Detaching from %s\n", p->owner->name);
1520 p->owner->pvt->pvt = NULL;
1522 ast_mutex_unlock(&p->owner->lock);
1527 p->history = p->history->next;
1534 prev->next = cur->next;
1543 ast_log(LOG_WARNING, "%p is not in list?!?! \n", cur);
1546 ast_sched_del(sched, p->initid);
1547 while((cp = p->packets)) {
1548 p->packets = p->packets->next;
1549 if (cp->retransid > -1)
1550 ast_sched_del(sched, cp->retransid);
1553 ast_mutex_destroy(&p->lock);
1558 /*--- update_user_counter: Handle incominglimit and outgoinglimit for SIP users ---*/
1559 /* Note: This is going to be replaced by app_groupcount */
1560 static int update_user_counter(struct sip_pvt *fup, int event)
1562 char name[256] = "";
1564 strncpy(name, fup->username, sizeof(name) - 1);
1565 ast_mutex_lock(&userl.lock);
1566 u = find_user(name);
1568 ast_log(LOG_DEBUG, "%s is not a local user\n", name);
1569 ast_mutex_unlock(&userl.lock);
1573 /* incoming and outgoing affects the inUse counter */
1576 if ( u->inUse > 0 ) {
1584 if (u->incominglimit > 0 ) {
1585 if (u->inUse >= u->incominglimit) {
1586 ast_log(LOG_ERROR, "Call from user '%s' rejected due to usage limit of %d\n", u->name, u->incominglimit);
1587 /* inc inUse as well */
1588 if ( event == INC_OUT_USE ) {
1591 ast_mutex_unlock(&userl.lock);
1599 ast_log(LOG_DEBUG, "Call from user '%s' is %d out of %d\n", u->name, u->inUse, u->incominglimit);
1601 /* we don't use these anymore
1603 if ( u->outUse > 0 ) {
1610 if ( u->outgoinglimit > 0 ) {
1611 if ( u->outUse >= u->outgoinglimit ) {
1612 ast_log(LOG_ERROR, "Outgoing call from user '%s' rejected due to usage limit of %d\n", u->name, u->outgoinglimit);
1613 ast_mutex_unlock(&userl.lock);
1624 ast_log(LOG_ERROR, "update_user_counter(%s,%d) called with no event!\n",u->name,event);
1626 ast_mutex_unlock(&userl.lock);
1633 /*--- sip_destroy: Destroy SIP call structure ---*/
1634 static void sip_destroy(struct sip_pvt *p)
1636 ast_mutex_lock(&iflock);
1637 __sip_destroy(p, 1);
1638 ast_mutex_unlock(&iflock);
1642 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal);
1644 static int hangup_sip2cause(int cause)
1646 /* Possible values from causes.h
1647 AST_CAUSE_NOTDEFINED AST_CAUSE_NORMAL AST_CAUSE_BUSY
1648 AST_CAUSE_FAILURE AST_CAUSE_CONGESTION AST_CAUSE_UNALLOCATED
1652 case 404: /* Not found */
1653 return AST_CAUSE_UNALLOCATED;
1654 case 483: /* Too many hops */
1655 return AST_CAUSE_FAILURE;
1657 return AST_CAUSE_BUSY;
1659 return AST_CAUSE_NORMAL;
1665 static char *hangup_cause2sip(int cause)
1669 case AST_CAUSE_FAILURE:
1670 return "500 Server internal failure";
1671 case AST_CAUSE_CONGESTION:
1672 return "503 Service Unavailable";
1673 case AST_CAUSE_BUSY:
1682 /*--- sip_hangup: Hangup SIP call */
1683 static int sip_hangup(struct ast_channel *ast)
1685 struct sip_pvt *p = ast->pvt->pvt;
1687 int needdestroy = 0;
1689 ast_log(LOG_DEBUG, "sip_hangup(%s)\n", ast->name);
1690 if (!ast->pvt->pvt) {
1691 ast_log(LOG_DEBUG, "Asked to hangup channel not connected\n");
1694 ast_mutex_lock(&p->lock);
1696 if ((p->osphandle > -1) && (ast->_state == AST_STATE_UP)) {
1697 ast_osp_terminate(p->osphandle, AST_CAUSE_NORMAL, p->ospstart, time(NULL) - p->ospstart);
1700 if ( p->outgoing ) {
1701 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement outUse counter\n", p->username);
1702 update_user_counter(p, DEC_OUT_USE);
1704 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement inUse counter\n", p->username);
1705 update_user_counter(p, DEC_IN_USE);
1707 /* Determine how to disconnect */
1708 if (p->owner != ast) {
1709 ast_log(LOG_WARNING, "Huh? We aren't the owner?\n");
1710 ast_mutex_unlock(&p->lock);
1713 if (!ast || (ast->_state != AST_STATE_UP))
1718 ast_dsp_free(p->vad);
1721 ast->pvt->pvt = NULL;
1723 ast_mutex_lock(&usecnt_lock);
1725 ast_mutex_unlock(&usecnt_lock);
1726 ast_update_use_count();
1729 /* Start the process if it's not already started */
1730 if (!p->alreadygone && !ast_strlen_zero(p->initreq.data)) {
1733 transmit_request_with_auth(p, "CANCEL", p->ocseq, 1, 0);
1734 /* Actually don't destroy us yet, wait for the 487 on our original
1735 INVITE, but do set an autodestruct just in case we never get it. */
1737 sip_scheddestroy(p, 15000);
1738 if ( p->initid != -1 ) {
1739 /* channel still up - reverse dec of inUse counter
1740 only if the channel is not auto-congested */
1741 if ( p->outgoing ) {
1742 update_user_counter(p, INC_OUT_USE);
1745 update_user_counter(p, INC_IN_USE);
1750 if (ast->hangupcause && ((res = hangup_cause2sip(ast->hangupcause)))) {
1751 transmit_response_reliable(p, res, &p->initreq, 1);
1753 transmit_response_reliable(p, "403 Forbidden", &p->initreq, 1);
1756 if (!p->pendinginvite) {
1758 transmit_request_with_auth(p, "BYE", 0, 1, 1);
1760 /* Note we will need a BYE when this all settles out
1761 but we can't send one while we have "INVITE" outstanding. */
1763 p->needreinvite = 0;
1767 p->needdestroy = needdestroy;
1768 ast_mutex_unlock(&p->lock);
1772 /*--- sip_answer: Answer SIP call , send 200 OK on Invite */
1773 static int sip_answer(struct ast_channel *ast)
1777 struct sip_pvt *p = ast->pvt->pvt;
1779 ast_mutex_lock(&p->lock);
1780 if (ast->_state != AST_STATE_UP) {
1785 codec=pbx_builtin_getvar_helper(p->owner,"SIP_CODEC");
1787 fmt=ast_getformatbyname(codec);
1789 ast_log(LOG_NOTICE, "Changing codec to '%s' for this call because of ${SIP_CODEC) variable\n",codec);
1790 if (p->jointcapability & fmt) {
1791 p->jointcapability &= fmt;
1792 p->capability &= fmt;
1794 ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because it is not shared by both ends.\n");
1795 } else ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because of unrecognized/not configured codec (check allow/disallow in sip.conf): %s\n",codec);
1798 ast_setstate(ast, AST_STATE_UP);
1800 ast_log(LOG_DEBUG, "sip_answer(%s)\n", ast->name);
1801 res = transmit_response_with_sdp(p, "200 OK", &p->initreq, 1);
1803 ast_mutex_unlock(&p->lock);
1807 /*--- sip_write: Send response, support audio media ---*/
1808 static int sip_write(struct ast_channel *ast, struct ast_frame *frame)
1810 struct sip_pvt *p = ast->pvt->pvt;
1812 if (frame->frametype == AST_FRAME_VOICE) {
1813 if (!(frame->subclass & ast->nativeformats)) {
1814 ast_log(LOG_WARNING, "Asked to transmit frame type %d, while native formats is %d (read/write = %d/%d)\n",
1815 frame->subclass, ast->nativeformats, ast->readformat, ast->writeformat);
1819 ast_mutex_lock(&p->lock);
1821 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1822 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1825 res = ast_rtp_write(p->rtp, frame);
1827 ast_mutex_unlock(&p->lock);
1829 } else if (frame->frametype == AST_FRAME_VIDEO) {
1831 ast_mutex_lock(&p->lock);
1833 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1834 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1837 res = ast_rtp_write(p->vrtp, frame);
1839 ast_mutex_unlock(&p->lock);
1841 } else if (frame->frametype == AST_FRAME_IMAGE) {
1844 ast_log(LOG_WARNING, "Can't send %d type frames with SIP write\n", frame->frametype);
1851 /*--- sip_fixup: Fix up a channel: If a channel is consumed, this is called.
1852 Basically update any ->owner links ----*/
1853 static int sip_fixup(struct ast_channel *oldchan, struct ast_channel *newchan)
1855 struct sip_pvt *p = newchan->pvt->pvt;
1856 ast_mutex_lock(&p->lock);
1857 if (p->owner != oldchan) {
1858 ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, p->owner);
1859 ast_mutex_unlock(&p->lock);
1863 ast_mutex_unlock(&p->lock);
1867 /*--- sip_senddigit: Send DTMF character on SIP channel */
1868 /* within one call, we're able to transmit in many methods simultaneously */
1869 static int sip_senddigit(struct ast_channel *ast, char digit)
1871 struct sip_pvt *p = ast->pvt->pvt;
1872 if (p && (p->dtmfmode & SIP_DTMF_INFO)) {
1873 transmit_info_with_digit(p, digit);
1875 if (p && p->rtp && (p->dtmfmode & SIP_DTMF_RFC2833)) {
1876 ast_rtp_senddigit(p->rtp, digit);
1878 /* If in-band DTMF is desired, send that */
1879 if (p->dtmfmode & SIP_DTMF_INBAND)
1885 /*--- sip_transfer: Transfer SIP call */
1886 static int sip_transfer(struct ast_channel *ast, char *dest)
1888 struct sip_pvt *p = ast->pvt->pvt;
1890 res = transmit_refer(p, dest);
1894 /*--- sip_indicate: Play indication to user */
1895 /* With SIP a lot of indications is sent as messages, letting the device play
1896 the indication - busy signal, congestion etc */
1897 static int sip_indicate(struct ast_channel *ast, int condition)
1899 struct sip_pvt *p = ast->pvt->pvt;
1901 case AST_CONTROL_RINGING:
1902 if (ast->_state == AST_STATE_RING) {
1904 transmit_response(p, "180 Ringing", &p->initreq);
1906 if (!p->progressinband)
1909 /* Oops, we've sent progress tones. Let Asterisk do it instead */
1913 case AST_CONTROL_BUSY:
1914 if (ast->_state != AST_STATE_UP) {
1915 transmit_response(p, "486 Busy Here", &p->initreq);
1917 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1921 case AST_CONTROL_CONGESTION:
1922 if (ast->_state != AST_STATE_UP) {
1923 transmit_response(p, "503 Service Unavailable", &p->initreq);
1925 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1929 case AST_CONTROL_PROGRESS:
1930 case AST_CONTROL_PROCEEDING:
1931 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1932 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1940 ast_log(LOG_WARNING, "Don't know how to indicate condition %d\n", condition);
1948 /*--- sip_new: Initiate a call in the SIP channel */
1949 /* called from sip_request_call (calls from the pbx ) */
1950 static struct ast_channel *sip_new(struct sip_pvt *i, int state, char *title)
1952 struct ast_channel *tmp;
1955 ast_mutex_unlock(&i->lock);
1956 /* Don't hold a sip pvt lock while we allocate a channel */
1957 tmp = ast_channel_alloc(1);
1958 ast_mutex_lock(&i->lock);
1960 /* Select our native format based on codec preference until we receive
1961 something from another device to the contrary. */
1962 if (i->jointcapability)
1963 tmp->nativeformats = sip_codec_choose(i->jointcapability);
1964 else if (i->capability)
1965 tmp->nativeformats = sip_codec_choose(i->capability);
1967 tmp->nativeformats = sip_codec_choose(global_capability);
1968 fmt = ast_best_codec(tmp->nativeformats);
1970 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%04x", title, rand() & 0xffff);
1972 if (strchr(i->fromdomain,':'))
1974 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", strchr(i->fromdomain,':')+1, (int)(long)(i));
1978 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", i->fromdomain, (int)(long)(i));
1981 if (i->dtmfmode & SIP_DTMF_INBAND) {
1982 i->vad = ast_dsp_new();
1983 ast_dsp_set_features(i->vad, DSP_FEATURE_DTMF_DETECT);
1985 ast_dsp_digitmode(i->vad, DSP_DIGITMODE_DTMF | DSP_DIGITMODE_RELAXDTMF);
1987 tmp->fds[0] = ast_rtp_fd(i->rtp);
1988 tmp->fds[1] = ast_rtcp_fd(i->rtp);
1990 tmp->fds[2] = ast_rtp_fd(i->vrtp);
1991 tmp->fds[3] = ast_rtcp_fd(i->vrtp);
1993 if (state == AST_STATE_RING)
1995 tmp->adsicpe = AST_ADSI_UNAVAILABLE;
1996 tmp->writeformat = fmt;
1997 tmp->pvt->rawwriteformat = fmt;
1998 tmp->readformat = fmt;
1999 tmp->pvt->rawreadformat = fmt;
2001 tmp->pvt->send_text = sip_sendtext;
2002 tmp->pvt->call = sip_call;
2003 tmp->pvt->hangup = sip_hangup;
2004 tmp->pvt->answer = sip_answer;
2005 tmp->pvt->read = sip_read;
2006 tmp->pvt->write = sip_write;
2007 tmp->pvt->write_video = sip_write;
2008 tmp->pvt->indicate = sip_indicate;
2009 tmp->pvt->transfer = sip_transfer;
2010 tmp->pvt->fixup = sip_fixup;
2011 tmp->pvt->send_digit = sip_senddigit;
2013 tmp->pvt->bridge = ast_rtp_bridge;
2015 tmp->callgroup = i->callgroup;
2016 tmp->pickupgroup = i->pickupgroup;
2017 tmp->cid.cid_pres = i->callingpres;
2018 if (!ast_strlen_zero(i->accountcode))
2019 strncpy(tmp->accountcode, i->accountcode, sizeof(tmp->accountcode)-1);
2021 tmp->amaflags = i->amaflags;
2022 if (!ast_strlen_zero(i->language))
2023 strncpy(tmp->language, i->language, sizeof(tmp->language)-1);
2024 if (!ast_strlen_zero(i->musicclass))
2025 strncpy(tmp->musicclass, i->musicclass, sizeof(tmp->musicclass)-1);
2027 ast_mutex_lock(&usecnt_lock);
2029 ast_mutex_unlock(&usecnt_lock);
2030 strncpy(tmp->context, i->context, sizeof(tmp->context)-1);
2031 strncpy(tmp->exten, i->exten, sizeof(tmp->exten)-1);
2032 if (!ast_strlen_zero(i->cid_num))
2033 tmp->cid.cid_num = strdup(i->cid_num);
2034 if (!ast_strlen_zero(i->cid_name))
2035 tmp->cid.cid_name = strdup(i->cid_name);
2036 if (!ast_strlen_zero(i->rdnis))
2037 tmp->cid.cid_rdnis = strdup(i->rdnis);
2038 if (!ast_strlen_zero(i->exten) && strcmp(i->exten, "s"))
2039 tmp->cid.cid_dnid = strdup(i->exten);
2041 if (!ast_strlen_zero(i->domain)) {
2042 pbx_builtin_setvar_helper(tmp, "SIPDOMAIN", i->domain);
2044 if (!ast_strlen_zero(i->useragent)) {
2045 pbx_builtin_setvar_helper(tmp, "SIPUSERAGENT", i->useragent);
2047 if (!ast_strlen_zero(i->callid)) {
2048 pbx_builtin_setvar_helper(tmp, "SIPCALLID", i->callid);
2050 ast_setstate(tmp, state);
2051 if (state != AST_STATE_DOWN) {
2052 if (ast_pbx_start(tmp)) {
2053 ast_log(LOG_WARNING, "Unable to start PBX on %s\n", tmp->name);
2059 ast_log(LOG_WARNING, "Unable to allocate channel structure\n");
2063 static struct cfalias {
2067 { "Content-Type", "c" },
2068 { "Content-Encoding", "e" },
2072 { "Content-Length", "l" },
2075 { "Supported", "k" },
2076 { "Refer-To", "r" },
2077 { "Allow-Events", "u" },
2082 /*--- get_sdp_by_line: Reads one line of SIP message body */
2083 static char* get_sdp_by_line(char* line, char *name, int nameLen) {
2084 if (strncasecmp(line, name, nameLen) == 0 && line[nameLen] == '=') {
2085 char* r = line + nameLen + 1;
2086 while (*r && (*r < 33)) ++r;
2093 /*--- get_sdp: Gets all kind of SIP message bodies, including SDP,
2094 but the name wrongly applies _only_ sdp */
2095 static char *get_sdp(struct sip_request *req, char *name) {
2097 int len = strlen(name);
2100 for (x=0; x<req->lines; x++) {
2101 r = get_sdp_by_line(req->line[x], name, len);
2102 if (r[0] != '\0') return r;
2108 static void sdpLineNum_iterator_init(int* iterator) {
2112 static char* get_sdp_iterate(int* iterator,
2113 struct sip_request *req, char *name) {
2114 int len = strlen(name);
2116 while (*iterator < req->lines) {
2117 r = get_sdp_by_line(req->line[(*iterator)++], name, len);
2118 if (r[0] != '\0') return r;
2123 static char *__get_header(struct sip_request *req, char *name, int *start)
2126 int len = strlen(name);
2128 if (pedanticsipchecking) {
2129 /* Technically you can place arbitrary whitespace both before and after the ':' in
2130 a header, although RFC3261 clearly says you shouldn't before, and place just
2131 one afterwards. If you shouldn't do it, what absolute idiot decided it was
2132 a good idea to say you can do it, and if you can do it, why in the hell would
2133 you say you shouldn't. */
2134 for (x=*start;x<req->headers;x++) {
2135 if (!strncasecmp(req->header[x], name, len)) {
2136 r = req->header[x] + len;
2137 while(*r && (*r < 33))
2141 while(*r && (*r < 33))
2149 /* We probably shouldn't even bother counting whitespace afterwards but
2150 I guess for backwards compatibility we will */
2151 for (x=*start;x<req->headers;x++) {
2152 if (!strncasecmp(req->header[x], name, len) &&
2153 (req->header[x][len] == ':')) {
2154 r = req->header[x] + len + 1;
2155 while(*r && (*r < 33))
2163 for (x=0;x<sizeof(aliases) / sizeof(aliases[0]); x++)
2164 if (!strcasecmp(aliases[x].fullname, name))
2165 return __get_header(req, aliases[x].shortname, start);
2167 /* Don't return NULL, so get_header is always a valid pointer */
2171 /*--- get_header: Get header from SIP request ---*/
2172 static char *get_header(struct sip_request *req, char *name)
2175 return __get_header(req, name, &start);
2178 /*--- sip_rtp_read: Read RTP from network ---*/
2179 static struct ast_frame *sip_rtp_read(struct ast_channel *ast, struct sip_pvt *p)
2181 /* Retrieve audio/etc from channel. Assumes p->lock is already held. */
2182 struct ast_frame *f;
2183 static struct ast_frame null_frame = { AST_FRAME_NULL, };
2186 f = ast_rtp_read(p->rtp); /* RTP Audio */
2189 f = ast_rtcp_read(p->rtp); /* RTCP Control Channel */
2192 f = ast_rtp_read(p->vrtp); /* RTP Video */
2195 f = ast_rtcp_read(p->vrtp); /* RTCP Control Channel for video */
2200 /* Don't send RFC2833 if we're not supposed to */
2201 if (f && (f->frametype == AST_FRAME_DTMF) && !(p->dtmfmode & SIP_DTMF_RFC2833))
2204 /* We already hold the channel lock */
2205 if (f->frametype == AST_FRAME_VOICE) {
2206 if (f->subclass != p->owner->nativeformats) {
2207 ast_log(LOG_DEBUG, "Oooh, format changed to %d\n", f->subclass);
2208 p->owner->nativeformats = f->subclass;
2209 ast_set_read_format(p->owner, p->owner->readformat);
2210 ast_set_write_format(p->owner, p->owner->writeformat);
2212 if ((p->dtmfmode & SIP_DTMF_INBAND) && p->vad) {
2213 f = ast_dsp_process(p->owner,p->vad,f);
2214 if (f && (f->frametype == AST_FRAME_DTMF))
2215 ast_log(LOG_DEBUG, "Detected DTMF '%c'\n", f->subclass);
2222 /*--- sip_read: Read SIP RTP from channel */
2223 static struct ast_frame *sip_read(struct ast_channel *ast)
2225 struct ast_frame *fr;
2226 struct sip_pvt *p = ast->pvt->pvt;
2227 ast_mutex_lock(&p->lock);
2228 fr = sip_rtp_read(ast, p);
2229 time(&p->lastrtprx);
2230 ast_mutex_unlock(&p->lock);
2234 /*--- build_callid: Build SIP CALLID header ---*/
2235 static void build_callid(char *callid, int len, struct in_addr ourip, char *fromdomain)
2240 char iabuf[INET_ADDRSTRLEN];
2243 res = snprintf(callid, len, "%08x", val);
2247 if (!ast_strlen_zero(fromdomain))
2248 snprintf(callid, len, "@%s", fromdomain);
2250 /* It's not important that we really use our right IP here... */
2251 snprintf(callid, len, "@%s", ast_inet_ntoa(iabuf, sizeof(iabuf), ourip));
2254 /*--- sip_alloc: Allocate SIP_PVT structure and set defaults ---*/
2255 static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useglobal_nat)
2258 char iabuf[INET_ADDRSTRLEN];
2260 p = malloc(sizeof(struct sip_pvt));
2263 /* Keep track of stuff */
2264 memset(p, 0, sizeof(struct sip_pvt));
2265 ast_mutex_init(&p->lock);
2273 memcpy(&p->sa, sin, sizeof(p->sa));
2274 if (ast_sip_ouraddrfor(&p->sa.sin_addr,&p->ourip))
2275 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2277 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2279 p->rtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2281 p->vrtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2285 /* Start with 101 instead of 1 */
2288 ast_log(LOG_WARNING, "Unable to create RTP session: %s\n", strerror(errno));
2289 ast_mutex_destroy(&p->lock);
2293 ast_rtp_settos(p->rtp, tos);
2295 ast_rtp_settos(p->vrtp, tos);
2296 if (useglobal_nat && sin) {
2297 /* Setup NAT structure according to global settings if we have an address */
2298 p->nat = global_nat;
2299 memcpy(&p->recv, sin, sizeof(p->recv));
2300 ast_rtp_setnat(p->rtp, (p->nat & SIP_NAT_ROUTE));
2302 ast_rtp_setnat(p->vrtp, (p->nat & SIP_NAT_ROUTE));
2305 strncpy(p->fromdomain, default_fromdomain, sizeof(p->fromdomain) - 1);
2306 /* z9hG4bK is a magic cookie. See RFC 3261 section 8.1.1.7 */
2307 if (p->nat != SIP_NAT_NEVER)
2308 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);
2310 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);
2312 build_callid(p->callid, sizeof(p->callid), p->ourip, p->fromdomain);
2314 strncpy(p->callid, callid, sizeof(p->callid) - 1);
2315 /* Assume reinvite OK and via INVITE */
2316 p->canreinvite = global_canreinvite;
2317 /* Assign default music on hold class */
2318 strncpy(p->musicclass, global_musicclass, sizeof(p->musicclass) - 1);
2319 p->dtmfmode = global_dtmfmode;
2320 p->promiscredir = global_promiscredir;
2321 p->trustrpid = global_trustrpid;
2322 p->progressinband = global_progressinband;
2324 p->ospauth = global_ospauth;
2326 p->rtptimeout = global_rtptimeout;
2327 p->rtpholdtimeout = global_rtpholdtimeout;
2328 p->capability = global_capability;
2329 if (p->dtmfmode & SIP_DTMF_RFC2833)
2330 p->noncodeccapability |= AST_RTP_DTMF;
2331 strncpy(p->context, default_context, sizeof(p->context) - 1);
2333 ast_mutex_lock(&iflock);
2336 ast_mutex_unlock(&iflock);
2338 ast_log(LOG_DEBUG, "Allocating new SIP call for %s\n", callid);
2342 /*--- find_call: Connect incoming SIP message to current call or create new call structure */
2343 /* Called by handle_request ,sipsock_read */
2344 static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *sin)
2349 char iabuf[INET_ADDRSTRLEN];
2353 callid = get_header(req, "Call-ID");
2355 if (pedanticsipchecking) {
2356 /* In principle Call-ID's uniquely identify a call, however some vendors
2357 (i.e. Pingtel) send multiple calls with the same Call-ID and different
2358 tags in order to simplify billing. The RFC does state that we have to
2359 compare tags in addition to the call-id, but this generate substantially
2360 more overhead which is totally unnecessary for the vast majority of sane
2361 SIP implementations, and thus Asterisk does not enable this behavior
2362 by default. Short version: You'll need this option to support conferencing
2364 strncpy(tmp, req->header[0], sizeof(tmp) - 1);
2366 c = strchr(tmp, ' ');
2369 if (!strcasecmp(cmd, "SIP/2.0"))
2370 strncpy(tmp, get_header(req, "To"), sizeof(tmp) - 1);
2372 strncpy(tmp, get_header(req, "From"), 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);
2643 while ((m = get_sdp_iterate(&iterator, req, "m"))[0] != '\0') {
2644 if ((sscanf(m, "audio %d RTP/AVP %n", &x, &len) == 1) ||
2645 (sscanf(m, "audio %d/%d RTP/AVP %n", &x, &y, &len) == 2)) {
2647 /* Scan through the RTP payload types specified in a "m=" line: */
2648 ast_rtp_pt_clear(p->rtp);
2650 while(!ast_strlen_zero(codecs)) {
2651 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2652 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2656 ast_verbose("Found RTP audio format %d\n", codec);
2657 ast_rtp_set_m_type(p->rtp, codec);
2659 /* Skip over any whitespace */
2660 while(*codecs && (*codecs < 33)) codecs++;
2664 ast_rtp_pt_clear(p->vrtp); /* Must be cleared in case no m=video line exists */
2666 if (p->vrtp && (sscanf(m, "video %d RTP/AVP %n", &x, &len) == 1)) {
2669 /* Scan through the RTP payload types specified in a "m=" line: */
2671 while(!ast_strlen_zero(codecs)) {
2672 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2673 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2677 ast_verbose("Found video format %s\n", ast_getformatname(codec));
2678 ast_rtp_set_m_type(p->vrtp, codec);
2680 /* Skip over any whitespace */
2681 while(*codecs && (*codecs < 33)) codecs++;
2686 /* RTP addresses and ports for audio and video */
2687 sin.sin_family = AF_INET;
2688 memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
2690 /* Setup audio port number */
2691 sin.sin_port = htons(portno);
2692 if (p->rtp && sin.sin_port) {
2693 ast_rtp_set_peer(p->rtp, &sin);
2695 ast_verbose("Peer audio RTP is at port %s:%d\n", ast_inet_ntoa(iabuf,sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2696 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));
2699 /* Setup video port number */
2700 sin.sin_port = htons(vportno);
2701 if (p->vrtp && sin.sin_port) {
2702 ast_rtp_set_peer(p->vrtp, &sin);
2704 ast_verbose("Peer video RTP is at port %s:%d\n", ast_inet_ntoa(iabuf,sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2705 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));
2709 /* Next, scan through each "a=rtpmap:" line, noting each
2710 * specified RTP payload type (with corresponding MIME subtype):
2712 sdpLineNum_iterator_init(&iterator);
2713 while ((a = get_sdp_iterate(&iterator, req, "a"))[0] != '\0') {
2714 char* mimeSubtype = ast_strdupa(a); /* ensures we have enough space */
2715 if (!strcasecmp(a, "sendonly")) {
2719 if (!strcasecmp(a, "sendrecv")) {
2722 if (sscanf(a, "rtpmap: %u %[^/]/", &codec, mimeSubtype) != 2) continue;
2724 ast_verbose("Found description format %s\n", mimeSubtype);
2725 /* Note: should really look at the 'freq' and '#chans' params too */
2726 ast_rtp_set_rtpmap_type(p->rtp, codec, "audio", mimeSubtype);
2728 ast_rtp_set_rtpmap_type(p->vrtp, codec, "video", mimeSubtype);
2731 /* Now gather all of the codecs that were asked for: */
2732 ast_rtp_get_current_formats(p->rtp,
2733 &peercapability, &peernoncodeccapability);
2735 ast_rtp_get_current_formats(p->vrtp,
2736 &vpeercapability, &vpeernoncodeccapability);
2737 p->jointcapability = p->capability & (peercapability | vpeercapability);
2738 p->peercapability = (peercapability | vpeercapability);
2739 p->noncodeccapability = noncodeccapability & peernoncodeccapability;
2742 const unsigned slen=80;
2743 char s1[slen], s2[slen], s3[slen], s4[slen];
2745 ast_verbose("Capabilities: us - %s, peer - audio=%s/video=%s, combined - %s\n",
2746 ast_getformatname_multiple(s1, slen, p->capability),
2747 ast_getformatname_multiple(s2, slen, peercapability),
2748 ast_getformatname_multiple(s3, slen, vpeercapability),
2749 ast_getformatname_multiple(s4, slen, p->jointcapability));
2751 ast_verbose("Non-codec capabilities: us - %s, peer - %s, combined - %s\n",
2752 ast_getformatname_multiple(s1, slen, noncodeccapability),
2753 ast_getformatname_multiple(s2, slen, peernoncodeccapability),
2754 ast_getformatname_multiple(s3, slen, p->noncodeccapability));
2756 if (!p->jointcapability) {
2757 ast_log(LOG_WARNING, "No compatible codecs!\n");
2761 if (!(p->owner->nativeformats & p->jointcapability)) {
2762 const unsigned slen=80;
2763 char s1[slen], s2[slen];
2764 ast_log(LOG_DEBUG, "Oooh, we need to change our formats since our peer supports only %s and not %s\n",
2765 ast_getformatname_multiple(s1, slen, p->jointcapability),
2766 ast_getformatname_multiple(s2, slen, p->owner->nativeformats));
2767 p->owner->nativeformats = sip_codec_choose(p->jointcapability);
2768 ast_set_read_format(p->owner, p->owner->readformat);
2769 ast_set_write_format(p->owner, p->owner->writeformat);
2771 if (ast_bridged_channel(p->owner)) {
2772 /* Turn on/off music on hold if we are holding/unholding */
2773 if (sin.sin_addr.s_addr && !sendonly) {
2774 ast_moh_stop(ast_bridged_channel(p->owner));
2776 ast_moh_start(ast_bridged_channel(p->owner), NULL);
2784 /*--- add_header: Add header to SIP message */
2785 static int add_header(struct sip_request *req, char *var, char *value)
2787 if (req->len >= sizeof(req->data) - 4) {
2788 ast_log(LOG_WARNING, "Out of space, can't add anymore (%s:%s)\n", var, value);
2792 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2795 req->header[req->headers] = req->data + req->len;
2796 snprintf(req->header[req->headers], sizeof(req->data) - req->len - 4, "%s: %s\r\n", var, value);
2797 req->len += strlen(req->header[req->headers]);
2798 if (req->headers < SIP_MAX_HEADERS)
2801 ast_log(LOG_WARNING, "Out of header space\n");
2807 /*--- add_blank_header: Add blank header to SIP message */
2808 static int add_blank_header(struct sip_request *req)
2810 if (req->len >= sizeof(req->data) - 4) {
2811 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2815 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2818 req->header[req->headers] = req->data + req->len;
2819 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "\r\n");
2820 req->len += strlen(req->header[req->headers]);
2821 if (req->headers < SIP_MAX_HEADERS)
2824 ast_log(LOG_WARNING, "Out of header space\n");
2830 /*--- add_line: Add content (not header) to SIP message */
2831 static int add_line(struct sip_request *req, char *line)
2833 if (req->len >= sizeof(req->data) - 4) {
2834 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2838 /* Add extra empty return */
2839 snprintf(req->data + req->len, sizeof(req->data) - req->len, "\r\n");
2840 req->len += strlen(req->data + req->len);
2842 req->line[req->lines] = req->data + req->len;
2843 snprintf(req->line[req->lines], sizeof(req->data) - req->len, "%s", line);
2844 req->len += strlen(req->line[req->lines]);
2845 if (req->lines < SIP_MAX_LINES)
2848 ast_log(LOG_WARNING, "Out of line space\n");
2854 /*--- copy_header: Copy one header field from one request to another */
2855 static int copy_header(struct sip_request *req, struct sip_request *orig, char *field)
2858 tmp = get_header(orig, field);
2859 if (!ast_strlen_zero(tmp)) {
2860 /* Add what we're responding to */
2861 return add_header(req, field, tmp);
2863 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2867 /*--- copy_all_header: Copy all headers from one request to another ---*/
2868 static int copy_all_header(struct sip_request *req, struct sip_request *orig, char *field)
2874 tmp = __get_header(orig, field, &start);
2875 if (!ast_strlen_zero(tmp)) {
2876 /* Add what we're responding to */
2877 add_header(req, field, tmp);
2882 return copied ? 0 : -1;
2885 /*--- copy_via_headers: Copy SIP VIA Headers from one request to another ---*/
2886 static int copy_via_headers(struct sip_pvt *p, struct sip_request *req, struct sip_request *orig, char *field)
2888 char tmp[256]="", *oh, *end;
2892 char iabuf[INET_ADDRSTRLEN];
2894 oh = __get_header(orig, field, &start);
2895 if (!ast_strlen_zero(oh)) {
2897 strncpy(tmp, oh, sizeof(tmp) - 1);
2898 oh = strstr(tmp, ";rport");
2900 end = strchr(oh + 1, ';');
2902 memmove(oh, end, strlen(end) + 1);
2906 if (!copied && (p->nat == SIP_NAT_ALWAYS)) {
2907 /* Whoo hoo! Now we can indicate port address translation too! Just
2908 another RFC (RFC3581). I'll leave the original comments in for
2910 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));
2911 add_header(req, field, new);
2913 /* Add what we're responding to */
2914 add_header(req, field, tmp);
2921 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2927 /*--- add_route: Add route header into request per learned route ---*/
2928 static void add_route(struct sip_request *req, struct sip_route *route)
2931 int n, rem = 255; /* sizeof(r)-1: Room for terminating 0 */
2937 n = strlen(route->hop);
2938 if ((n+3)>rem) break;
2944 strncpy(p, route->hop, rem); p += n;
2947 route = route->next;
2950 add_header(req, "Route", r);
2953 /*--- set_destination: Set destination from SIP URI ---*/
2954 static void set_destination(struct sip_pvt *p, char *uri)
2956 char *h, *maddr, hostname[256] = "";
2957 char iabuf[INET_ADDRSTRLEN];
2960 struct ast_hostent ahp;
2961 int debug=sip_debug_test_pvt(p);
2963 /* Parse uri to h (host) and port - uri is already just the part inside the <> */
2964 /* general form we are expecting is sip[s]:username[:password]@host[:port][;...] */
2967 ast_verbose("set_destination: Parsing <%s> for address/port to send to\n", uri);
2969 /* Find and parse hostname */
2970 h = strchr(uri, '@');
2975 if (strncmp(h, "sip:", 4) == 0)
2977 else if (strncmp(h, "sips:", 5) == 0)
2980 hn = strcspn(h, ":;>");
2981 if (hn > (sizeof(hostname) - 1)) hn = sizeof(hostname) - 1;
2982 strncpy(hostname, h, hn); hostname[hn] = '\0'; /* safe */
2985 /* Is "port" present? if not default to 5060 */
2989 port = strtol(h, &h, 10);
2994 /* Got the hostname:port - but maybe there's a "maddr=" to override address? */
2995 maddr = strstr(h, "maddr=");
2998 hn = strspn(maddr, "0123456789.");
2999 if (hn > (sizeof(hostname) - 1)) hn = sizeof(hostname) - 1;
3000 strncpy(hostname, maddr, hn); hostname[hn] = '\0'; /* safe */
3003 hp = ast_gethostbyname(hostname, &ahp);
3005 ast_log(LOG_WARNING, "Can't find address for host '%s'\n", hostname);
3008 p->sa.sin_family = AF_INET;
3009 memcpy(&p->sa.sin_addr, hp->h_addr, sizeof(p->sa.sin_addr));
3010 p->sa.sin_port = htons(port);
3012 ast_verbose("set_destination: set destination to %s, port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr), port);
3015 /*--- init_resp: Initialize SIP response, based on SIP request ---*/
3016 static int init_resp(struct sip_request *req, char *resp, struct sip_request *orig)
3018 /* Initialize a response */
3019 if (req->headers || req->len) {
3020 ast_log(LOG_WARNING, "Request already initialized?!?\n");
3023 req->header[req->headers] = req->data + req->len;
3024 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "SIP/2.0 %s\r\n", resp);
3025 req->len += strlen(req->header[req->headers]);
3026 if (req->headers < SIP_MAX_HEADERS)
3029 ast_log(LOG_WARNING, "Out of header space\n");
3033 /*--- init_req: Initialize SIP request ---*/
3034 static int init_req(struct sip_request *req, char *resp, char *recip)
3036 /* Initialize a response */
3037 if (req->headers || req->len) {
3038 ast_log(LOG_WARNING, "Request already initialized?!?\n");
3041 req->header[req->headers] = req->data + req->len;
3042 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "%s %s SIP/2.0\r\n", resp, recip);
3043 req->len += strlen(req->header[req->headers]);
3044 if (req->headers < SIP_MAX_HEADERS)
3047 ast_log(LOG_WARNING, "Out of header space\n");
3052 static int respprep(struct sip_request *resp, struct sip_pvt *p, char *msg, struct sip_request *req)
3054 char newto[256] = "", *ot;
3056 memset(resp, 0, sizeof(*resp));
3057 init_resp(resp, msg, req);
3058 copy_via_headers(p, resp, req, "Via");
3059 if (msg[0] == '2') copy_all_header(resp, req, "Record-Route");
3060 copy_header(resp, req, "From");
3061 ot = get_header(req, "To");
3062 if (!strstr(ot, "tag=")) {
3063 /* Add the proper tag if we don't have it already. If they have specified
3064 their tag, use it. Otherwise, use our own tag */
3065 if (!ast_strlen_zero(p->theirtag) && p->outgoing)
3066 snprintf(newto, sizeof(newto), "%s;tag=%s", ot, p->theirtag);
3067 else if (p->tag && !p->outgoing)
3068 snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag);
3070 strncpy(newto, ot, sizeof(newto) - 1);
3071 newto[sizeof(newto) - 1] = '\0';
3075 add_header(resp, "To", ot);
3076 copy_header(resp, req, "Call-ID");
3077 copy_header(resp, req, "CSeq");
3078 add_header(resp, "User-Agent", default_useragent);
3079 add_header(resp, "Allow", ALLOWED_METHODS);
3081 /* For registration responses, we also need expiry and
3085 snprintf(contact, sizeof(contact), "%s;expires=%d", p->our_contact, p->expiry);
3086 snprintf(tmp, sizeof(tmp), "%d", p->expiry);
3087 add_header(resp, "Expires", tmp);
3088 add_header(resp, "Contact", contact);
3090 add_header(resp, "Contact", p->our_contact);
3095 static int reqprep(struct sip_request *req, struct sip_pvt *p, char *msg, int seqno, int newbranch)
3097 struct sip_request *orig = &p->initreq;
3098 char stripped[80] ="";
3101 char iabuf[INET_ADDRSTRLEN];
3105 memset(req, 0, sizeof(struct sip_request));
3107 snprintf(p->lastmsg, sizeof(p->lastmsg), "Tx: %s", msg);
3115 p->branch ^= rand();
3116 if (p->nat & SIP_NAT_RFC3581)
3117 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);
3118 else /* Some implementations (e.g. Uniden UIP200) can't handle rport being in the message!! */
3119 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);
3121 if (!strcasecmp(msg, "CANCEL") || !strcasecmp(msg, "ACK")) {
3122 /* MUST use original URI */
3123 c = p->initreq.rlPart2;
3124 } else if (!ast_strlen_zero(p->uri)) {
3128 strncpy(stripped, get_header(orig, "To"), sizeof(stripped) - 1);
3130 strncpy(stripped, get_header(orig, "From"), sizeof(stripped) - 1);
3132 c = strchr(stripped, '<');
3144 init_req(req, msg, c);
3146 snprintf(tmp, sizeof(tmp), "%d %s", seqno, msg);
3148 add_header(req, "Via", p->via);
3150 set_destination(p, p->route->hop);
3151 add_route(req, p->route->next);
3154 ot = get_header(orig, "To");
3155 of = get_header(orig, "From");
3157 /* Add tag *unless* this is a CANCEL, in which case we need to send it exactly
3158 as our original request, including tag (or presumably lack thereof) */
3159 if (!strstr(ot, "tag=") && strcasecmp(msg, "CANCEL")) {
3160 /* Add the proper tag if we don't have it already. If they have specified
3161 their tag, use it. Otherwise, use our own tag */
3162 if (p->outgoing && !ast_strlen_zero(p->theirtag))
3163 snprintf(newto, sizeof(newto), "%s;tag=%s", ot, p->theirtag);
3164 else if (!p->outgoing)
3165 snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag);
3167 snprintf(newto, sizeof(newto), "%s", ot);
3172 add_header(req, "From", of);
3173 add_header(req, "To", ot);
3175 add_header(req, "From", ot);
3176 add_header(req, "To", of);
3178 add_header(req, "Contact", p->our_contact);
3179 copy_header(req, orig, "Call-ID");
3180 add_header(req, "CSeq", tmp);
3182 add_header(req, "User-Agent", default_useragent);
3186 static int __transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req, int reliable)
3188 struct sip_request resp;
3190 if (reliable && (sscanf(get_header(req, "CSeq"), "%i ", &seqno) != 1)) {
3191 ast_log(LOG_WARNING, "Unable to determine sequence number from '%s'\n", get_header(req, "CSeq"));
3194 respprep(&resp, p, msg, req);
3195 add_header(&resp, "Content-Length", "0");
3196 add_blank_header(&resp);
3197 return send_response(p, &resp, reliable, seqno);
3200 /*--- transmit_response: Transmit response, no retransmits */
3201 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req)
3203 return __transmit_response(p, msg, req, 0);
3206 /*--- transmit_response: Transmit response, Make sure you get a reply */
3207 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal)
3209 return __transmit_response(p, msg, req, fatal ? 2 : 1);
3212 /*--- append_date: Append date to SIP message ---*/
3213 static void append_date(struct sip_request *req)
3220 strftime(tmpdat, sizeof(tmpdat), "%a, %d %b %Y %T GMT", &tm);
3221 add_header(req, "Date", tmpdat);
3224 /*--- transmit_response_with_date: Append date and content length before transmitting response ---*/
3225 static int transmit_response_with_date(struct sip_pvt *p, char *msg, struct sip_request *req)
3227 struct sip_request resp;
3228 respprep(&resp, p, msg, req);
3230 add_header(&resp, "Content-Length", "0");
3231 add_blank_header(&resp);
3232 return send_response(p, &resp, 0, 0);
3235 /*--- transmit_response_with_allow: Append Accept header, content length before transmitting response ---*/
3236 static int transmit_response_with_allow(struct sip_pvt *p, char *msg, struct sip_request *req, int reliable)
3238 struct sip_request resp;
3239 respprep(&resp, p, msg, req);
3240 add_header(&resp, "Accept", "application/sdp");
3241 add_header(&resp, "Content-Length", "0");
3242 add_blank_header(&resp);
3243 return send_response(p, &resp, reliable, 0);
3246 /* transmit_response_with_auth: Respond with authorization request */
3247 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *randdata, int reliable, char *header)
3249 struct sip_request resp;
3252 if (reliable && (sscanf(get_header(req, "CSeq"), "%i ", &seqno) != 1)) {
3253 ast_log(LOG_WARNING, "Unable to determine sequence number from '%s'\n", get_header(req, "CSeq"));
3256 snprintf(tmp, sizeof(tmp), "Digest realm=\"%s\", nonce=\"%s\"", global_realm, randdata);
3257 respprep(&resp, p, msg, req);
3258 add_header(&resp, header, tmp);
3259 add_header(&resp, "Content-Length", "0");
3260 add_blank_header(&resp);
3261 return send_response(p, &resp, reliable, seqno);
3264 /*--- add_text: Add text body to SIP message ---*/
3265 static int add_text(struct sip_request *req, char *text)
3267 /* XXX Convert \n's to \r\n's XXX */
3268 int len = strlen(text);
3270 snprintf(clen, sizeof(clen), "%d", len);
3271 add_header(req, "Content-Type", "text/plain");
3272 add_header(req, "Content-Length", clen);
3273 add_line(req, text);
3277 /*--- add_digit: add DTMF INFO tone to sip message ---*/
3278 /* Always adds default duration 250 ms, regardless of what came in over the line */
3279 static int add_digit(struct sip_request *req, char digit)
3284 snprintf(tmp, sizeof(tmp), "Signal=%c\r\nDuration=250\r\n", digit);
3286 snprintf(clen, sizeof(clen), "%d", len);
3287 add_header(req, "Content-Type", "application/dtmf-relay");
3288 add_header(req, "Content-Length", clen);
3293 /*--- add_sdp: Add Session Description Protocol message ---*/
3294 static int add_sdp(struct sip_request *resp, struct sip_pvt *p)
3298 int alreadysent = 0;
3300 struct sockaddr_in sin;
3301 struct sockaddr_in vsin;
3302 struct sip_codec_pref *cur;
3312 char iabuf[INET_ADDRSTRLEN];
3315 struct sockaddr_in dest;
3316 struct sockaddr_in vdest = { 0, };
3317 int debug=sip_debug_test_pvt(p);
3319 /* XXX We break with the "recommendation" and send our IP, in order that our
3320 peer doesn't have to ast_gethostbyname() us XXX */
3323 ast_log(LOG_WARNING, "No way to add SDP without an RTP structure\n");
3326 capability = p->capability;
3328 if (!p->sessionid) {
3329 p->sessionid = getpid();
3330 p->sessionversion = p->sessionid;
3332 p->sessionversion++;
3333 ast_rtp_get_us(p->rtp, &sin);
3335 ast_rtp_get_us(p->vrtp, &vsin);
3337 if (p->redirip.sin_addr.s_addr) {
3338 dest.sin_port = p->redirip.sin_port;
3339 dest.sin_addr = p->redirip.sin_addr;
3341 capability = p->redircodecs;
3343 dest.sin_addr = p->ourip;
3344 dest.sin_port = sin.sin_port;
3347 /* Determine video destination */
3349 if (p->vredirip.sin_addr.s_addr) {
3350 vdest.sin_port = p->vredirip.sin_port;
3351 vdest.sin_addr = p->vredirip.sin_addr;
3353 vdest.sin_addr = p->ourip;
3354 vdest.sin_port = vsin.sin_port;
3358 ast_verbose("We're at %s port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ntohs(sin.sin_port));
3360 ast_verbose("Video is at %s port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ntohs(vsin.sin_port));
3362 snprintf(v, sizeof(v), "v=0\r\n");
3363 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));
3364 snprintf(s, sizeof(s), "s=session\r\n");
3365 snprintf(c, sizeof(c), "c=IN IP4 %s\r\n", ast_inet_ntoa(iabuf, sizeof(iabuf), dest.sin_addr));
3366 snprintf(t, sizeof(t), "t=0 0\r\n");
3367 snprintf(m, sizeof(m), "m=audio %d RTP/AVP", ntohs(dest.sin_port));
3368 snprintf(m2, sizeof(m2), "m=video %d RTP/AVP", ntohs(vdest.sin_port));
3369 if (capability & p->prefcodec) {
3371 ast_verbose("Answering/Requesting with root capability %d\n", p->prefcodec);
3372 codec = ast_rtp_lookup_code(p->rtp, 1, p->prefcodec);
3374 snprintf(costr, sizeof(costr), " %d", codec);
3375 if (p->prefcodec <= AST_FORMAT_MAX_AUDIO) {
3376 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3377 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, p->prefcodec));
3378 strncpy(a, costr, sizeof(a) - 1);
3380 strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
3381 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, p->prefcodec));
3382 strncpy(a2, costr, sizeof(a2) - 1);
3385 alreadysent |= p->prefcodec;
3387 /* Start by sending our preferred codecs */
3390 if ((capability & cur->codec) && !(alreadysent & cur->codec)) {
3392 ast_verbose("Answering with preferred capability 0x%x(%s)\n", cur->codec, ast_getformatname(cur->codec));
3393 codec = ast_rtp_lookup_code(p->rtp, 1, cur->codec);
3395 snprintf(costr, sizeof(costr), " %d", codec);
3396 if (cur->codec <= AST_FORMAT_MAX_AUDIO) {
3397 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3398 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, cur->codec));
3399 strncat(a, costr, sizeof(a) - strlen(a) - 1);
3401 strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
3402 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, cur->codec));
3403 strncat(a2, costr, sizeof(a2) - strlen(a) - 1);
3407 alreadysent |= cur->codec;
3410 /* Now send any other common codecs, and non-codec formats: */
3411 for (x = 1; x <= ((videosupport && p->vrtp) ? AST_FORMAT_MAX_VIDEO : AST_FORMAT_MAX_AUDIO); x <<= 1) {
3412 if ((capability & x) && !(alreadysent & x)) {
3414 ast_verbose("Answering with capability 0x%x(%s)\n", x, ast_getformatname(x));
3415 codec = ast_rtp_lookup_code(p->rtp, 1, x);
3417 snprintf(costr, sizeof(costr), " %d", codec);
3418 if (x <= AST_FORMAT_MAX_AUDIO) {
3419 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3420 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, x));
3421 strncat(a, costr, sizeof(a) - strlen(a) - 1);
3423 strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
3424 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, x));
3425 strncat(a2, costr, sizeof(a2) - strlen(a2) - 1);
3430 for (x = 1; x <= AST_RTP_MAX; x <<= 1) {
3431 if (p->noncodeccapability & x) {
3433 ast_verbose("Answering with non-codec capability 0x%x(%s)\n", x, ast_getformatname(x));
3434 codec = ast_rtp_lookup_code(p->rtp, 0, x);
3436 snprintf(costr, sizeof(costr), " %d", codec);
3437 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3438 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(0, x));
3439 strncat(a, costr, sizeof(a) - strlen(a) - 1);
3440 if (x == AST_RTP_DTMF) {
3441 /* Indicate we support DTMF... Not sure about 16, but MSN supports it so dang it, we will too... */
3442 snprintf(costr, sizeof costr, "a=fmtp:%d 0-16\r\n",
3444 strncat(a, costr, sizeof(a) - strlen(a) - 1);
3449 strncat(a, "a=silenceSupp:off - - - -\r\n", sizeof(a) - strlen(a) - 1);
3450 if (strlen(m) < sizeof(m) - 2)
3451 strncat(m, "\r\n", sizeof(m) - strlen(m) - 1);
3452 if (strlen(m2) < sizeof(m2) - 2)
3453 strncat(m2, "\r\n", sizeof(m2) - strlen(m2) - 1);
3454 if ((sizeof(m) <= strlen(m) - 2) || (sizeof(m2) <= strlen(m2) - 2) || (sizeof(a) == strlen(a)) || (sizeof(a2) == strlen(a2)))
3455 ast_log(LOG_WARNING, "SIP SDP may be truncated due to undersized buffer!!\n");
3456 len = strlen(v) + strlen(s) + strlen(o) + strlen(c) + strlen(t) + strlen(m) + strlen(a);
3457 if ((p->vrtp) && (!p->novideo) && (capability & VIDEO_CODEC_MASK)) /* only if video response is appropriate */
3458 len += strlen(m2) + strlen(a2);
3459 snprintf(costr, sizeof(costr), "%d", len);
3460 add_header(resp, "Content-Type", "application/sdp");
3461 add_header(resp, "Content-Length", costr);