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;
134 static int pedanticsipchecking = 0;
136 static int autocreatepeer = 0;
138 static int relaxdtmf = 0;
140 static int global_rtptimeout = 0;
142 static int global_rtpholdtimeout = 0;
144 static int global_trustrpid = 0;
146 static int global_progressinband = 0;
149 static int global_ospauth = 0;
152 static int usecnt =0;
153 AST_MUTEX_DEFINE_STATIC(usecnt_lock);
155 /* Protect the interface list (of sip_pvt's) */
156 AST_MUTEX_DEFINE_STATIC(iflock);
158 /* Protect the monitoring thread, so only one process can kill or start it, and not
159 when it's doing something critical. */
160 AST_MUTEX_DEFINE_STATIC(netlock);
162 AST_MUTEX_DEFINE_STATIC(monlock);
164 /* This is the thread for the monitor which checks for input on the channels
165 which are not currently in use. */
166 static pthread_t monitor_thread = AST_PTHREADT_NULL;
168 static int restart_monitor(void);
170 /* Codecs that we support by default: */
171 static int global_capability = AST_FORMAT_ULAW | AST_FORMAT_ALAW | AST_FORMAT_GSM | AST_FORMAT_H263;
172 static int noncodeccapability = AST_RTP_DTMF;
174 static char ourhost[256];
175 static struct in_addr __ourip;
178 static int sipdebug = 0;
179 static struct sockaddr_in debugaddr;
183 static int videosupport = 0;
185 static int global_dtmfmode = SIP_DTMF_RFC2833; /* DTMF mode default */
186 static int recordhistory = 0;
187 static int global_promiscredir;
189 static char global_musicclass[MAX_LANGUAGE] = ""; /* Global music on hold class */
190 static char global_realm[AST_MAX_EXTENSION] = "asterisk"; /* Default realm */
191 static char regcontext[AST_MAX_EXTENSION] = "";
194 static int expiry = 900;
196 static struct sched_context *sched;
197 static struct io_context *io;
198 /* The private structures of the sip channels are linked for
199 selecting outgoing channels */
201 #define SIP_MAX_HEADERS 64
202 #define SIP_MAX_LINES 64
206 #define DEC_OUT_USE 2
207 #define INC_OUT_USE 3
209 static struct sip_codec_pref {
211 struct sip_codec_pref *next;
214 /* sip_request: The data grabbed from the UDP socket */
216 char *rlPart1; /* SIP Method Name or "SIP/2.0" protocol version */
217 char *rlPart2; /* The Request URI or Response Status */
219 int headers; /* SIP Headers */
220 char *header[SIP_MAX_HEADERS];
221 int lines; /* SDP Content */
222 char *line[SIP_MAX_LINES];
223 char data[SIP_MAX_PACKET];
229 struct sip_route *next;
235 struct sip_history *next;
238 /* sip_pvt: PVT structures are used for each SIP conversation, ie. a call */
239 static struct sip_pvt {
240 ast_mutex_t lock; /* Channel private lock */
241 char callid[80]; /* Global CallID */
242 char randdata[80]; /* Random data */
243 unsigned int ocseq; /* Current outgoing seqno */
244 unsigned int icseq; /* Current incoming seqno */
245 unsigned int callgroup; /* Call group */
246 unsigned int pickupgroup; /* Pickup group */
247 int lastinvite; /* Last Cseq of invite */
248 int alreadygone; /* Whether or not we've already been destroyed by or peer */
249 int needdestroy; /* if we need to be destroyed */
250 int capability; /* Special capability (codec) */
251 int novideo; /* Didn't get video in invite, don't offer */
252 int jointcapability; /* Supported capability at both ends (codecs ) */
253 int peercapability; /* Supported peer capability */
254 int prefcodec; /* Preferred codec (outbound only) */
255 int noncodeccapability;
256 int callingpres; /* Calling presentation */
257 int outgoing; /* Outgoing or incoming call? */
258 int authtries; /* Times we've tried to authenticate */
259 int insecure; /* Don't check source port/ip */
260 int expiry; /* How long we take to expire */
261 int branch; /* One random number */
262 int canreinvite; /* Do we support reinvite */
263 int ringing; /* Have sent 180 ringing */
264 int progress; /* Have sent 183 message progress */
265 int tag; /* Another random number */
266 int nat; /* Whether to try to support NAT */
267 int sessionid; /* SDP Session ID */
268 int sessionversion; /* SDP Session Version */
269 struct sockaddr_in sa; /* Our peer */
270 struct sockaddr_in redirip; /* Where our RTP should be going if not to us */
271 struct sockaddr_in vredirip; /* Where our Video RTP should be going if not to us */
272 int redircodecs; /* Redirect codecs */
273 struct sockaddr_in recv; /* Received as */
274 struct in_addr ourip; /* Our IP */
275 struct ast_channel *owner; /* Who owns us */
276 char exten[AST_MAX_EXTENSION]; /* Extension where to start */
277 char refer_to[AST_MAX_EXTENSION]; /* Place to store REFER-TO extension */
278 char referred_by[AST_MAX_EXTENSION]; /* Place to store REFERRED-BY extension */
279 char refer_contact[AST_MAX_EXTENSION]; /* Place to store Contact info from a REFER extension */
280 struct sip_pvt *refer_call; /* Call we are referring */
281 struct sip_route *route; /* Head of linked list of routing steps (fm Record-Route) */
282 int route_persistant; /* Is this the "real" route? */
283 char from[256]; /* The From: header */
284 char useragent[256]; /* User agent in SIP request */
285 char context[AST_MAX_EXTENSION]; /* Context for this call */
286 char fromdomain[AST_MAX_EXTENSION]; /* Domain to show in the from field */
287 char fromuser[AST_MAX_EXTENSION]; /* Domain to show in the user field */
288 char tohost[AST_MAX_EXTENSION]; /* Host we should put in the "to" field */
289 char language[MAX_LANGUAGE]; /* Default language for this call */
290 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
291 char rdnis[256]; /* Referring DNIS */
292 char theirtag[256]; /* Their tag */
295 char authname[256]; /* Who we use for authentication */
296 char uri[256]; /* Original requested URI */
297 char peersecret[256];
298 char peermd5secret[256];
299 char cid_num[256]; /* Caller*ID */
300 char cid_name[256]; /* Caller*ID */
302 char fullcontact[128]; /* Extra parameters to go in the "To" header */
303 char accountcode[20]; /* Account code */
304 char our_contact[256]; /* Our contact header */
305 char realm[256]; /* Authorization realm */
306 char nonce[256]; /* Authorization nonce */
307 char opaque[256]; /* Opaque nonsense */
308 char qop[80]; /* Quality of Protection, since SIP wasn't complicated enough yet. */
309 char domain[256]; /* Authorization nonce */
310 char lastmsg[256]; /* Last Message sent/received */
311 int amaflags; /* AMA Flags */
312 int pendinginvite; /* Any pending invite */
313 int needreinvite; /* Do we need to send another reinvite? */
314 int pendingbye; /* Need to send bye after we ack? */
315 int gotrefer; /* Got a refer? */
317 int ospauth; /* Allow OSP Authentication */
318 int osphandle; /* OSP Handle for call */
319 time_t ospstart; /* OSP Start time */
321 struct sip_request initreq; /* Initial request */
323 int maxtime; /* Max time for first response */
324 int initid; /* Auto-congest ID if appropriate */
325 int autokillid; /* Auto-kill ID */
326 time_t lastrtprx; /* Last RTP received */
327 int rtptimeout; /* RTP timeout time */
328 int rtpholdtimeout; /* RTP timeout when on hold */
333 int promiscredir; /* Promiscuous redirection */
341 struct sip_peer *peerpoke; /* If this calls is to poke a peer, which one */
342 struct sip_registry *registry; /* If this is a REGISTER call, to which registry */
343 struct ast_rtp *rtp; /* RTP Session */
344 struct ast_rtp *vrtp; /* Video RTP session */
345 struct sip_pkt *packets; /* Packets scheduled for re-transmission */
346 struct sip_history *history; /* History of this SIP dialog */
347 struct sip_pvt *next; /* Next call in chain */
350 #define FLAG_RESPONSE (1 << 0)
351 #define FLAG_FATAL (1 << 1)
353 /* sip packet - read in sipsock_read, transmitted in send_request */
355 struct sip_pkt *next; /* Next packet */
356 int retrans; /* Retransmission number */
357 int seqno; /* Sequence number */
358 int flags; /* non-zero if this is a response packet (e.g. 200 OK) */
359 struct sip_pvt *owner; /* Owner call */
360 int retransid; /* Retransmission ID */
361 int packetlen; /* Length of packet */
365 /* Structure for SIP user data. User's place calls to us */
367 /* Users who can access various contexts */
374 char accountcode[20];
375 char language[MAX_LANGUAGE];
376 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
377 char useragent[256]; /* User agent in SIP request */
378 unsigned int callgroup;
379 unsigned int pickupgroup;
387 int ospauth; /* Allow OSP Authentication */
399 struct sip_user *next;
402 /* Structure for SIP peer data, we place calls to peers if registred or fixed IP address (host) */
407 char context[80]; /* JK02: peers need context too to allow parking etc */
410 char regexten[AST_MAX_EXTENSION]; /* Extension to register (if regcontext is used) */
413 char fullcontact[128];
416 char mailbox[AST_MAX_EXTENSION];
417 char language[MAX_LANGUAGE];
418 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
419 char useragent[256]; /* User agent in SIP request */
430 int ospauth; /* Allow OSP Authentication */
434 unsigned int callgroup;
435 unsigned int pickupgroup;
440 struct sockaddr_in addr;
444 struct sip_pvt *call; /* Call pointer */
445 int pokeexpire; /* When to expire poke */
446 int lastms; /* How long last response took (in ms), or -1 for no response */
447 int maxms; /* Max ms we will accept for the host to be up, 0 to not monitor */
448 struct timeval ps; /* Ping send time */
450 struct sockaddr_in defaddr;
456 struct sip_peer *next;
459 AST_MUTEX_DEFINE_STATIC(sip_reload_lock);
460 static int sip_reloading = 0;
462 #define REG_STATE_UNREGISTERED 0
463 #define REG_STATE_REGSENT 1
464 #define REG_STATE_AUTHSENT 2
465 #define REG_STATE_REGISTERED 3
466 #define REG_STATE_REJECTED 4
467 #define REG_STATE_TIMEOUT 5
468 #define REG_STATE_NOAUTH 6
470 #define SIP_NAT_NEVER 0
471 #define SIP_NAT_RFC3581 (1 << 0)
472 #define SIP_NAT_ROUTE (1 << 2)
473 #define SIP_NAT_ALWAYS (SIP_NAT_ROUTE | SIP_NAT_RFC3581)
475 /* sip_registry: Registrations with other SIP proxies */
476 struct sip_registry {
477 int portno; /* Optional port override */
478 char username[80]; /* Who we are registering as */
479 char authuser[80]; /* Who we *authenticate* as */
481 char secret[80]; /* Password or key name in []'s */
483 char contact[80]; /* Contact extension */
485 int expire; /* Sched ID of expiration */
486 int timeout; /* sched id of sip_reg_timeout */
487 int refresh; /* How often to refresh */
488 struct sip_pvt *call; /* create a sip_pvt structure for each outbound "registration call" in progress */
490 int callid_valid; /* 0 means we haven't chosen callid for this registry yet. */
491 char callid[80]; /* Global CallID for this registry */
492 unsigned int ocseq; /* Sequence number we got to for REGISTERs for this registry */
493 struct sockaddr_in us; /* Who the server thinks we are */
494 struct sip_registry *next;
497 /*--- The user list: Users and friends ---*/
498 static struct ast_user_list {
499 struct sip_user *users;
503 /*--- The peer list: Peers and Friends ---*/
504 static struct ast_peer_list {
505 struct sip_peer *peers;
509 /*--- The register list: Other SIP proxys we register with and call ---*/
510 static struct ast_register_list {
511 struct sip_registry *registrations;
517 #define REINVITE_INVITE 1
518 #define REINVITE_UPDATE 2
520 static int __sip_do_register(struct sip_registry *r);
522 static int sipsock = -1;
523 static int global_nat = SIP_NAT_RFC3581;
524 static int global_canreinvite = REINVITE_INVITE;
527 static struct sockaddr_in bindaddr;
528 static struct sockaddr_in externip;
529 static struct ast_ha *localaddr;
531 static struct ast_frame *sip_read(struct ast_channel *ast);
532 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req);
533 static int transmit_response_with_sdp(struct sip_pvt *p, char *msg, struct sip_request *req, int retrans);
534 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *rand, int reliable, char *header);
535 static int transmit_request(struct sip_pvt *p, char *msg, int inc, int reliable, int newbranch);
536 static int transmit_request_with_auth(struct sip_pvt *p, char *msg, int inc, int reliable, int newbranch);
537 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);
538 static int transmit_reinvite_with_sdp(struct sip_pvt *p);
539 static int transmit_info_with_digit(struct sip_pvt *p, char digit);
540 static int transmit_message_with_text(struct sip_pvt *p, char *text);
541 static int transmit_refer(struct sip_pvt *p, char *dest);
542 static struct sip_peer *temp_peer(char *name);
543 static int do_proxy_auth(struct sip_pvt *p, struct sip_request *req, char *header, char *respheader, char *msg, int init);
544 static void free_old_route(struct sip_route *route);
545 static int build_reply_digest(struct sip_pvt *p, char *orig_header, char *digest, int digest_len);
546 static int update_user_counter(struct sip_pvt *fup, int event);
547 static void prune_peers(void);
548 static int sip_do_reload(void);
551 /*--- sip_debug_test_addr: See if we pass debug IP filter */
552 static inline int sip_debug_test_addr(struct sockaddr_in *addr)
556 if (debugaddr.sin_addr.s_addr) {
557 if (((ntohs(debugaddr.sin_port) != 0)
558 && (debugaddr.sin_port != addr->sin_port))
559 || (debugaddr.sin_addr.s_addr != addr->sin_addr.s_addr))
565 static inline int sip_debug_test_pvt(struct sip_pvt *p)
569 return sip_debug_test_addr(((p->nat & SIP_NAT_ROUTE) ? &p->recv : &p->sa));
573 /*--- __sip_xmit: Transmit SIP message ---*/
574 static int __sip_xmit(struct sip_pvt *p, char *data, int len)
577 char iabuf[INET_ADDRSTRLEN];
578 if (p->nat & SIP_NAT_ROUTE)
579 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->recv, sizeof(struct sockaddr_in));
581 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->sa, sizeof(struct sockaddr_in));
583 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));
588 static void sip_destroy(struct sip_pvt *p);
590 /*--- ast_sip_ouraddrfor: NAT fix - decide which IP address to use for ASterisk server? ---*/
591 /* Only used for outbound registrations */
592 static int ast_sip_ouraddrfor(struct in_addr *them, struct in_addr *us)
595 * Using the localaddr structure built up with localnet statements
596 * apply it to their address to see if we need to substitute our
597 * externip or can get away with our internal bindaddr
599 struct sockaddr_in theirs;
600 theirs.sin_addr = *them;
601 if (localaddr && externip.sin_addr.s_addr &&
602 ast_apply_ha(localaddr, &theirs)) {
603 char iabuf[INET_ADDRSTRLEN];
604 memcpy(us, &externip.sin_addr, sizeof(struct in_addr));
605 ast_inet_ntoa(iabuf, sizeof(iabuf), *(struct in_addr *)&them->s_addr);
606 ast_log(LOG_DEBUG, "Target address %s is not local, substituting externip\n", iabuf);
608 else if (bindaddr.sin_addr.s_addr)
609 memcpy(us, &bindaddr.sin_addr, sizeof(struct in_addr));
611 return ast_ouraddrfor(them, us);
615 static int append_history(struct sip_pvt *p, char *event, char *data)
617 struct sip_history *hist, *prev;
621 hist = malloc(sizeof(struct sip_history));
623 memset(hist, 0, sizeof(struct sip_history));
624 snprintf(hist->event, sizeof(hist->event), "%-15s %s", event, data);
628 if ((*c == '\r') || (*c == '\n')) {
634 /* Enqueue into history */
647 /*--- retrans_pkt: Retransmit SIP message if no answer ---*/
648 static int retrans_pkt(void *data)
650 struct sip_pkt *pkt=data, *prev, *cur;
652 char iabuf[INET_ADDRSTRLEN];
653 ast_mutex_lock(&pkt->owner->lock);
654 if (pkt->retrans < MAX_RETRANS) {
656 if (sip_debug_test_pvt(pkt->owner)) {
657 if (pkt->owner->nat & SIP_NAT_ROUTE)
658 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));
660 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));
662 append_history(pkt->owner, "ReTx", pkt->data);
663 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
666 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");
667 append_history(pkt->owner, "MaxRetries", pkt->flags & FLAG_FATAL ? "(Critical)" : "(Non-critical)");
669 if (pkt->flags & FLAG_FATAL) {
670 while(pkt->owner->owner && ast_mutex_trylock(&pkt->owner->owner->lock)) {
671 ast_mutex_unlock(&pkt->owner->lock);
673 ast_mutex_lock(&pkt->owner->lock);
675 if (pkt->owner->owner) {
676 ast_queue_hangup(pkt->owner->owner);
677 ast_mutex_unlock(&pkt->owner->owner->lock);
679 /* If no owner, destroy now */
680 pkt->owner->needdestroy = 1;
683 /* In any case, go ahead and remove the packet */
685 cur = pkt->owner->packets;
694 prev->next = cur->next;
696 pkt->owner->packets = cur->next;
697 ast_mutex_unlock(&pkt->owner->lock);
701 ast_log(LOG_WARNING, "Weird, couldn't find packet owner!\n");
704 ast_mutex_unlock(&pkt->owner->lock);
708 /*--- __sip_reliable_xmit: transmit packet with retransmits ---*/
709 static int __sip_reliable_xmit(struct sip_pvt *p, int seqno, int resp, char *data, int len, int fatal)
712 pkt = malloc(sizeof(struct sip_pkt) + len + 1);
715 memset(pkt, 0, sizeof(struct sip_pkt));
716 memcpy(pkt->data, data, len);
717 pkt->packetlen = len;
718 pkt->next = p->packets;
722 pkt->data[len] = '\0';
724 pkt->flags |= FLAG_FATAL;
725 /* Schedule retransmission */
726 pkt->retransid = ast_sched_add(sched, DEFAULT_RETRANS, retrans_pkt, pkt);
727 pkt->next = p->packets;
729 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
730 if (!strncasecmp(pkt->data, "INVITE", 6)) {
731 /* Note this is a pending invite */
732 p->pendinginvite = seqno;
737 /*--- __sip_autodestruct: Kill a call (called by scheduler) ---*/
738 static int __sip_autodestruct(void *data)
740 struct sip_pvt *p = data;
742 ast_log(LOG_DEBUG, "Auto destroying call '%s'\n", p->callid);
743 append_history(p, "AutoDestroy", "");
745 ast_log(LOG_WARNING, "Autodestruct on call '%s' with owner in place\n", p->callid);
746 ast_queue_hangup(p->owner);
753 /*--- sip_scheddestroy: Schedule destruction of SIP call ---*/
754 static int sip_scheddestroy(struct sip_pvt *p, int ms)
757 if (sip_debug_test_pvt(p))
758 ast_verbose("Scheduling destruction of call '%s' in %d ms\n", p->callid, ms);
760 snprintf(tmp, sizeof(tmp), "%d ms", ms);
761 append_history(p, "SchedDestroy", tmp);
763 if (p->autokillid > -1)
764 ast_sched_del(sched, p->autokillid);
765 p->autokillid = ast_sched_add(sched, ms, __sip_autodestruct, p);
769 /*--- sip_cancel_destroy: Cancel destruction of SIP call ---*/
770 static int sip_cancel_destroy(struct sip_pvt *p)
772 if (p->autokillid > -1)
773 ast_sched_del(sched, p->autokillid);
774 append_history(p, "CancelDestroy", "");
779 /*--- __sip_ack: Acknowledges receipt of a packet and stops retransmission ---*/
780 static int __sip_ack(struct sip_pvt *p, int seqno, int resp, const char *msg)
782 struct sip_pkt *cur, *prev = NULL;
785 /* Just in case... */
786 if (!msg) msg = "___NEVER___";
789 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp) &&
790 ((cur->flags & FLAG_RESPONSE) ||
791 (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
792 if (!resp && (seqno == p->pendinginvite)) {
793 ast_log(LOG_DEBUG, "Acked pending invite %d\n", p->pendinginvite);
794 p->pendinginvite = 0;
797 /* this is our baby */
799 prev->next = cur->next;
801 p->packets = cur->next;
802 if (cur->retransid > -1)
803 ast_sched_del(sched, cur->retransid);
811 ast_log(LOG_DEBUG, "Stopping retransmission on '%s' of %s %d: %s\n", p->callid, resp ? "Response" : "Request", seqno, res ? "Not Found" : "Found");
815 /* Pretend to ack all packets */
816 static int __sip_pretend_ack(struct sip_pvt *p)
819 __sip_ack(p, p->packets->seqno, (p->packets->flags & FLAG_RESPONSE), p->packets->data);
824 /*--- __sip_semi_ack: Acks receipt of packet, keep it around (used for provisional responses) ---*/
825 static int __sip_semi_ack(struct sip_pvt *p, int seqno, int resp, const char *msg)
831 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp) &&
832 ((cur->flags & FLAG_RESPONSE) ||
833 (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
834 /* this is our baby */
835 if (cur->retransid > -1)
836 ast_sched_del(sched, cur->retransid);
843 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");
847 static void parse(struct sip_request *req);
848 static char *get_header(struct sip_request *req, char *name);
849 static void copy_request(struct sip_request *dst,struct sip_request *src);
851 static void parse_copy(struct sip_request *dst, struct sip_request *src)
853 memset(dst, 0, sizeof(*dst));
854 memcpy(dst->data, src->data, sizeof(dst->data));
858 /*--- send_response: Transmit response on SIP request---*/
859 static int send_response(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
862 char iabuf[INET_ADDRSTRLEN];
863 struct sip_request tmp;
865 if (sip_debug_test_pvt(p)) {
866 if (p->nat & SIP_NAT_ROUTE)
867 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));
869 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));
873 parse_copy(&tmp, req);
874 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
875 append_history(p, "TxRespRel", tmpmsg);
877 res = __sip_reliable_xmit(p, seqno, 1, req->data, req->len, (reliable > 1));
880 parse_copy(&tmp, req);
881 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
882 append_history(p, "TxResp", tmpmsg);
884 res = __sip_xmit(p, req->data, req->len);
891 /*--- send_request: Send SIP Request to the other part of the dialogue ---*/
892 static int send_request(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
895 char iabuf[INET_ADDRSTRLEN];
896 struct sip_request tmp;
898 if (sip_debug_test_pvt(p)) {
899 if (p->nat & SIP_NAT_ROUTE)
900 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));
902 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));
906 parse_copy(&tmp, req);
907 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
908 append_history(p, "TxReqRel", tmpmsg);
910 res = __sip_reliable_xmit(p, seqno, 0, req->data, req->len, (reliable > 1));
913 parse_copy(&tmp, req);
914 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
915 append_history(p, "TxReq", tmpmsg);
917 res = __sip_xmit(p, req->data, req->len);
922 /*--- url_decode: Decode SIP URL ---*/
923 static void url_decode(char *s)
931 if (sscanf(s + 1, "%2x", &tmp) == 1) {
933 s += 2; /* Will be incremented once more when we break out */
937 /* Fall through if something wasn't right with the formatting */
947 /*--- ditch_braces: Pick out text in braces from character string ---*/
948 static char *ditch_braces(char *tmp)
953 if ((q = strchr(tmp, '"')) ) {
955 if ((q = strchr(c, '"')) )
958 ast_log(LOG_WARNING, "No closing quote in '%s'\n", tmp);
962 if ((n = strchr(c, '<')) ) {
964 while(*c && *c != '>') c++;
966 ast_log(LOG_WARNING, "No closing brace in '%s'\n", tmp);
975 /*--- sip_sendtext: Send SIP MESSAGE text within a call ---*/
976 /* Called from PBX core text message functions */
977 static int sip_sendtext(struct ast_channel *ast, char *text)
979 struct sip_pvt *p = ast->pvt->pvt;
980 int debug=sip_debug_test_pvt(p);
983 ast_verbose("Sending text %s on %s\n", text, ast->name);
986 if (!text || ast_strlen_zero(text))
989 ast_verbose("Really sending text %s on %s\n", text, ast->name);
990 transmit_message_with_text(p, text);
994 static void realtime_update_peer(const char *peername, struct sockaddr_in *sin, const char *username, int expirey)
1003 snprintf(regseconds, sizeof(regseconds), "%ld", nowtime);
1004 ast_inet_ntoa(ipaddr, sizeof(ipaddr), sin->sin_addr);
1005 snprintf(port, sizeof(port), "%d", ntohs(sin->sin_port));
1006 ast_update_realtime("sipfriends", "name", peername, "ipaddr", ipaddr, "port", port, "regseconds", regseconds, "username", username, NULL);
1009 static void register_peer_exten(struct sip_peer *peer, int onoff)
1011 unsigned char multi[256]="";
1012 char *stringp, *ext;
1013 if (!ast_strlen_zero(regcontext)) {
1014 strncpy(multi, ast_strlen_zero(peer->regexten) ? peer->name : peer->regexten, sizeof(multi) - 1);
1016 while((ext = strsep(&stringp, "&"))) {
1018 ast_add_extension(regcontext, 1, ext, 1, NULL, NULL, "Noop", strdup(peer->name), free, type);
1020 ast_context_remove_extension(regcontext, ext, 1, NULL);
1025 static void destroy_peer(struct sip_peer *peer)
1027 /* Delete it, it needs to disappear */
1029 sip_destroy(peer->call);
1030 if (peer->expire > -1)
1031 ast_sched_del(sched, peer->expire);
1032 if (peer->pokeexpire > -1)
1033 ast_sched_del(sched, peer->pokeexpire);
1034 register_peer_exten(peer, 0);
1035 ast_free_ha(peer->ha);
1039 /*--- update_peer: Update peer data in database (if used) ---*/
1040 static void update_peer(struct sip_peer *p, int expiry)
1043 realtime_update_peer(p->name, &p->addr, p->username, expiry);
1046 static struct sip_peer *build_peer(const char *name, struct ast_variable *v, int temponly);
1048 static struct sip_peer *realtime_peer(const char *peername, struct sockaddr_in *sin)
1050 struct ast_variable *var, *tmp=NULL;
1052 struct sip_peer *peer=NULL;
1053 time_t nowtime, regseconds;
1057 ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr);
1059 var = ast_load_realtime("sipfriends", "name", peername, NULL);
1061 var = ast_load_realtime("sipfriends", "ipaddr", iabuf, NULL);
1063 /* Make sure it's not a user only... */
1064 peer = build_peer(peername, var, 1);
1066 /* Add some finishing touches, addresses, etc */
1070 if (!strcasecmp(tmp->name, "type")) {
1071 if (strcasecmp(tmp->value, "friend") &&
1072 strcasecmp(tmp->value, "peer")) {
1073 /* Whoops, we weren't supposed to exist! */
1078 } else if (!strcasecmp(tmp->name, "regseconds")) {
1079 if (sscanf(tmp->value, "%li", ®seconds) != 1)
1081 } else if (!strcasecmp(tmp->name, "ipaddr")) {
1082 inet_aton(tmp->value, &(peer->addr.sin_addr));
1083 } else if (!strcasecmp(tmp->name, "port")) {
1084 peer->addr.sin_port = htons(atoi(tmp->value));
1085 } else if (!strcasecmp(tmp->name, "host")) {
1086 if (!strcasecmp(tmp->value, "dynamic"))
1091 if (peer && dynamic) {
1093 if ((nowtime - regseconds) > 0) {
1094 memset(&peer->addr, 0, sizeof(peer->addr));
1096 ast_log(LOG_DEBUG, "Bah, we're expired (%ld/%ld/%ld)!\n", nowtime - regseconds, regseconds, nowtime);
1100 ast_destroy_realtime(var);
1105 /*--- find_peer: Locate peer by name or ip address */
1106 static struct sip_peer *find_peer(const char *peer, struct sockaddr_in *sin)
1108 struct sip_peer *p = NULL;
1112 /* Find by peer name */
1114 if (!strcasecmp(p->name, peer)) {
1123 if (!inaddrcmp(&p->addr, sin) ||
1125 (p->addr.sin_addr.s_addr == sin->sin_addr.s_addr))) {
1133 p = realtime_peer(peer, sin);
1139 static void destroy_user(struct sip_user *user)
1141 ast_free_ha(user->ha);
1145 static struct sip_user *build_user(const char *name, struct ast_variable *v);
1146 static struct sip_user *realtime_user(const char *username)
1148 struct ast_variable *var;
1149 struct ast_variable *tmp;
1150 struct sip_user *user=NULL;
1151 var = ast_load_realtime("sipfriends", "name", username, NULL);
1153 /* Make sure it's not a user only... */
1154 user = build_user(username, var);
1156 /* Add some finishing touches, addresses, etc */
1160 if (!strcasecmp(tmp->name, "type")) {
1161 if (strcasecmp(tmp->value, "friend") &&
1162 strcasecmp(tmp->value, "user")) {
1163 /* Whoops, we weren't supposed to exist! */
1172 ast_destroy_realtime(var);
1177 /*--- find_user: Locate user by name */
1178 static struct sip_user *find_user(char *name)
1180 struct sip_user *u = NULL;
1184 if (!strcasecmp(u->name, name)) {
1190 u = realtime_user(name);
1195 /*--- create_addr: create address structure from peer definition ---*/
1196 /* Or, if peer not found, find it in the global DNS */
1197 /* returns TRUE on failure, FALSE on success */
1198 static int create_addr(struct sip_pvt *r, char *opeer)
1201 struct ast_hostent ahp;
1207 char host[256], *hostn;
1210 strncpy(peer, opeer, sizeof(peer) - 1);
1211 port = strchr(peer, ':');
1216 r->sa.sin_family = AF_INET;
1217 ast_mutex_lock(&peerl.lock);
1218 p = find_peer(peer, NULL);
1222 r->capability = p->capability;
1225 ast_log(LOG_DEBUG, "Setting NAT on RTP to %d\n", (r->nat & SIP_NAT_ROUTE));
1226 ast_rtp_setnat(r->rtp, (r->nat & SIP_NAT_ROUTE));
1229 ast_log(LOG_DEBUG, "Setting NAT on VRTP to %d\n", (r->nat & SIP_NAT_ROUTE));
1230 ast_rtp_setnat(r->vrtp, (r->nat & SIP_NAT_ROUTE));
1232 strncpy(r->peername, p->username, sizeof(r->peername)-1);
1233 strncpy(r->authname, p->username, sizeof(r->authname)-1);
1234 strncpy(r->peersecret, p->secret, sizeof(r->peersecret)-1);
1235 strncpy(r->peermd5secret, p->md5secret, sizeof(r->peermd5secret)-1);
1236 strncpy(r->username, p->username, sizeof(r->username)-1);
1237 strncpy(r->tohost, p->tohost, sizeof(r->tohost)-1);
1238 strncpy(r->fullcontact, p->fullcontact, sizeof(r->fullcontact)-1);
1239 if (!r->initreq.headers && !ast_strlen_zero(p->fromdomain)) {
1240 if ((callhost = strchr(r->callid, '@'))) {
1241 strncpy(callhost + 1, p->fromdomain, sizeof(r->callid) - (callhost - r->callid) - 2);
1244 if (ast_strlen_zero(r->tohost)) {
1245 if (p->addr.sin_addr.s_addr)
1246 ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->addr.sin_addr);
1248 ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->defaddr.sin_addr);
1250 if (!ast_strlen_zero(p->fromdomain))
1251 strncpy(r->fromdomain, p->fromdomain, sizeof(r->fromdomain)-1);
1252 if (!ast_strlen_zero(p->fromuser))
1253 strncpy(r->fromuser, p->fromuser, sizeof(r->fromuser)-1);
1254 r->insecure = p->insecure;
1255 r->canreinvite = p->canreinvite;
1256 r->maxtime = p->maxms;
1257 r->callgroup = p->callgroup;
1258 r->pickupgroup = p->pickupgroup;
1260 r->dtmfmode = p->dtmfmode;
1261 if (r->dtmfmode & SIP_DTMF_RFC2833)
1262 r->noncodeccapability |= AST_RTP_DTMF;
1264 r->noncodeccapability &= ~AST_RTP_DTMF;
1266 r->promiscredir = p->promiscredir;
1267 strncpy(r->context, p->context,sizeof(r->context)-1);
1268 if ((p->addr.sin_addr.s_addr || p->defaddr.sin_addr.s_addr) &&
1269 (!p->maxms || ((p->lastms > 0) && (p->lastms <= p->maxms)))) {
1270 if (p->addr.sin_addr.s_addr) {
1271 r->sa.sin_addr = p->addr.sin_addr;
1272 r->sa.sin_port = p->addr.sin_port;
1274 r->sa.sin_addr = p->defaddr.sin_addr;
1275 r->sa.sin_port = p->defaddr.sin_port;
1277 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1285 ast_mutex_unlock(&peerl.lock);
1289 portno = atoi(port);
1291 portno = DEFAULT_SIP_PORT;
1296 snprintf(service, sizeof(service), "_sip._udp.%s", peer);
1297 ret = ast_get_srv(NULL, host, sizeof(host), &tportno, service);
1303 hp = ast_gethostbyname(hostn, &ahp);
1305 strncpy(r->tohost, peer, sizeof(r->tohost) - 1);
1306 memcpy(&r->sa.sin_addr, hp->h_addr, sizeof(r->sa.sin_addr));
1307 r->sa.sin_port = htons(portno);
1308 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1311 ast_log(LOG_WARNING, "No such host: %s\n", peer);
1324 /*--- auto_congest: Scheduled congestion on a call ---*/
1325 static int auto_congest(void *nothing)
1327 struct sip_pvt *p = nothing;
1328 ast_mutex_lock(&p->lock);
1331 if (!ast_mutex_trylock(&p->owner->lock)) {
1332 ast_log(LOG_NOTICE, "Auto-congesting %s\n", p->owner->name);
1333 ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
1334 ast_mutex_unlock(&p->owner->lock);
1337 ast_mutex_unlock(&p->lock);
1341 /*--- sip_prefs_free: Free codec list in preference structure ---*/
1342 static void sip_prefs_free(void)
1344 struct sip_codec_pref *cur, *next;
1354 /*--- sip_pref_remove: Remove codec from pref list ---*/
1355 static void sip_pref_remove(int format)
1357 struct sip_codec_pref *cur, *prev=NULL;
1360 if (cur->codec == format) {
1362 prev->next = cur->next;
1373 /*--- sip_pref_append: Append codec to list ---*/
1374 static int sip_pref_append(int format)
1376 struct sip_codec_pref *cur, *tmp;
1377 sip_pref_remove(format);
1378 tmp = (struct sip_codec_pref *)malloc(sizeof(struct sip_codec_pref));
1381 memset(tmp, 0, sizeof(struct sip_codec_pref));
1382 tmp->codec = format;
1393 /*--- sip_codec_choose: Pick a codec ---*/
1394 static int sip_codec_choose(int formats)
1396 struct sip_codec_pref *cur;
1397 formats &= ((AST_FORMAT_MAX_AUDIO << 1) - 1);
1400 if (formats & cur->codec)
1404 return ast_best_codec(formats);
1407 /*--- sip_call: Initiate SIP call from PBX ---*/
1408 /* used from the dial() application */
1409 static int sip_call(struct ast_channel *ast, char *dest, int timeout)
1413 char *vxml_url = NULL;
1414 char *distinctive_ring = NULL;
1415 char *osptoken = NULL;
1417 char *osphandle = NULL;
1419 struct varshead *headp;
1420 struct ast_var_t *current;
1423 if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) {
1424 ast_log(LOG_WARNING, "sip_call called on %s, neither down nor reserved\n", ast->name);
1427 /* Check whether there is vxml_url, distinctive ring variables */
1429 headp=&ast->varshead;
1430 AST_LIST_TRAVERSE(headp,current,entries) {
1431 /* Check whether there is a VXML_URL variable */
1432 if (strcasecmp(ast_var_name(current),"VXML_URL")==0)
1434 vxml_url = ast_var_value(current);
1436 /* Check whether there is a ALERT_INFO variable */
1437 if (strcasecmp(ast_var_name(current),"ALERT_INFO")==0)
1439 distinctive_ring = ast_var_value(current);
1442 else if (!strcasecmp(ast_var_name(current), "OSPTOKEN")) {
1443 osptoken = ast_var_value(current);
1444 } else if (!strcasecmp(ast_var_name(current), "OSPHANDLE")) {
1445 osphandle = ast_var_value(current);
1453 if (!osptoken || !osphandle || (sscanf(osphandle, "%i", &p->osphandle) != 1)) {
1454 /* Force Disable OSP support */
1460 ast_log(LOG_DEBUG, "Outgoing Call for %s\n", p->username);
1461 res = update_user_counter(p,INC_OUT_USE);
1463 p->callingpres = ast->cid.cid_pres;
1464 p->jointcapability = p->capability;
1465 transmit_invite(p, "INVITE", 1, NULL, NULL, vxml_url,distinctive_ring, osptoken, 1);
1467 /* Initialize auto-congest time */
1468 p->initid = ast_sched_add(sched, p->maxtime * 4, auto_congest, p);
1474 /*--- __sip_destroy: Execute destrucion of call structure, release memory---*/
1475 static void __sip_destroy(struct sip_pvt *p, int lockowner)
1477 struct sip_pvt *cur, *prev = NULL;
1479 struct sip_history *hist;
1481 if (sip_debug_test_pvt(p))
1482 ast_verbose("Destroying call '%s'\n", p->callid);
1483 if (p->stateid > -1)
1484 ast_extension_state_del(p->stateid, NULL);
1486 ast_sched_del(sched, p->initid);
1487 if (p->autokillid > -1)
1488 ast_sched_del(sched, p->autokillid);
1491 ast_rtp_destroy(p->rtp);
1494 ast_rtp_destroy(p->vrtp);
1497 free_old_route(p->route);
1501 /* Carefully unlink from registry */
1502 struct sip_registry *reg;
1503 ast_mutex_lock(®l.lock);
1504 reg = regl.registrations;
1506 if ((reg == p->registry) && (p->registry->call == p))
1507 p->registry->call=NULL;
1510 ast_mutex_unlock(®l.lock);
1512 /* Unlink us from the owner if we have one */
1515 ast_mutex_lock(&p->owner->lock);
1516 ast_log(LOG_DEBUG, "Detaching from %s\n", p->owner->name);
1517 p->owner->pvt->pvt = NULL;
1519 ast_mutex_unlock(&p->owner->lock);
1524 p->history = p->history->next;
1531 prev->next = cur->next;
1540 ast_log(LOG_WARNING, "%p is not in list?!?! \n", cur);
1543 ast_sched_del(sched, p->initid);
1544 while((cp = p->packets)) {
1545 p->packets = p->packets->next;
1546 if (cp->retransid > -1)
1547 ast_sched_del(sched, cp->retransid);
1550 ast_mutex_destroy(&p->lock);
1555 /*--- update_user_counter: Handle incominglimit and outgoinglimit for SIP users ---*/
1556 /* Note: This is going to be replaced by app_groupcount */
1557 static int update_user_counter(struct sip_pvt *fup, int event)
1559 char name[256] = "";
1561 strncpy(name, fup->username, sizeof(name) - 1);
1562 ast_mutex_lock(&userl.lock);
1563 u = find_user(name);
1565 ast_log(LOG_DEBUG, "%s is not a local user\n", name);
1566 ast_mutex_unlock(&userl.lock);
1570 /* incoming and outgoing affects the inUse counter */
1573 if ( u->inUse > 0 ) {
1581 if (u->incominglimit > 0 ) {
1582 if (u->inUse >= u->incominglimit) {
1583 ast_log(LOG_ERROR, "Call from user '%s' rejected due to usage limit of %d\n", u->name, u->incominglimit);
1584 /* inc inUse as well */
1585 if ( event == INC_OUT_USE ) {
1588 ast_mutex_unlock(&userl.lock);
1596 ast_log(LOG_DEBUG, "Call from user '%s' is %d out of %d\n", u->name, u->inUse, u->incominglimit);
1598 /* we don't use these anymore
1600 if ( u->outUse > 0 ) {
1607 if ( u->outgoinglimit > 0 ) {
1608 if ( u->outUse >= u->outgoinglimit ) {
1609 ast_log(LOG_ERROR, "Outgoing call from user '%s' rejected due to usage limit of %d\n", u->name, u->outgoinglimit);
1610 ast_mutex_unlock(&userl.lock);
1621 ast_log(LOG_ERROR, "update_user_counter(%s,%d) called with no event!\n",u->name,event);
1623 ast_mutex_unlock(&userl.lock);
1630 /*--- sip_destroy: Destroy SIP call structure ---*/
1631 static void sip_destroy(struct sip_pvt *p)
1633 ast_mutex_lock(&iflock);
1634 __sip_destroy(p, 1);
1635 ast_mutex_unlock(&iflock);
1639 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal);
1641 static int hangup_sip2cause(int cause)
1643 /* Possible values from causes.h
1644 AST_CAUSE_NOTDEFINED AST_CAUSE_NORMAL AST_CAUSE_BUSY
1645 AST_CAUSE_FAILURE AST_CAUSE_CONGESTION AST_CAUSE_UNALLOCATED
1649 case 404: /* Not found */
1650 return AST_CAUSE_UNALLOCATED;
1651 case 483: /* Too many hops */
1652 return AST_CAUSE_FAILURE;
1654 return AST_CAUSE_BUSY;
1656 return AST_CAUSE_NORMAL;
1662 static char *hangup_cause2sip(int cause)
1666 case AST_CAUSE_FAILURE:
1667 return "500 Server internal failure";
1668 case AST_CAUSE_CONGESTION:
1669 return "503 Service Unavailable";
1670 case AST_CAUSE_BUSY:
1679 /*--- sip_hangup: Hangup SIP call */
1680 static int sip_hangup(struct ast_channel *ast)
1682 struct sip_pvt *p = ast->pvt->pvt;
1684 int needdestroy = 0;
1686 ast_log(LOG_DEBUG, "sip_hangup(%s)\n", ast->name);
1687 if (!ast->pvt->pvt) {
1688 ast_log(LOG_DEBUG, "Asked to hangup channel not connected\n");
1691 ast_mutex_lock(&p->lock);
1693 if ((p->osphandle > -1) && (ast->_state == AST_STATE_UP)) {
1694 ast_osp_terminate(p->osphandle, AST_CAUSE_NORMAL, p->ospstart, time(NULL) - p->ospstart);
1697 if ( p->outgoing ) {
1698 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement outUse counter\n", p->username);
1699 update_user_counter(p, DEC_OUT_USE);
1701 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement inUse counter\n", p->username);
1702 update_user_counter(p, DEC_IN_USE);
1704 /* Determine how to disconnect */
1705 if (p->owner != ast) {
1706 ast_log(LOG_WARNING, "Huh? We aren't the owner?\n");
1707 ast_mutex_unlock(&p->lock);
1710 if (!ast || (ast->_state != AST_STATE_UP))
1715 ast_dsp_free(p->vad);
1718 ast->pvt->pvt = NULL;
1720 ast_mutex_lock(&usecnt_lock);
1722 ast_mutex_unlock(&usecnt_lock);
1723 ast_update_use_count();
1726 /* Start the process if it's not already started */
1727 if (!p->alreadygone && !ast_strlen_zero(p->initreq.data)) {
1730 transmit_request_with_auth(p, "CANCEL", p->ocseq, 1, 0);
1731 /* Actually don't destroy us yet, wait for the 487 on our original
1732 INVITE, but do set an autodestruct just in case we never get it. */
1734 sip_scheddestroy(p, 15000);
1735 if ( p->initid != -1 ) {
1736 /* channel still up - reverse dec of inUse counter
1737 only if the channel is not auto-congested */
1738 if ( p->outgoing ) {
1739 update_user_counter(p, INC_OUT_USE);
1742 update_user_counter(p, INC_IN_USE);
1747 if (ast->hangupcause && ((res = hangup_cause2sip(ast->hangupcause)))) {
1748 transmit_response_reliable(p, res, &p->initreq, 1);
1750 transmit_response_reliable(p, "403 Forbidden", &p->initreq, 1);
1753 if (!p->pendinginvite) {
1755 transmit_request_with_auth(p, "BYE", 0, 1, 1);
1757 /* Note we will need a BYE when this all settles out
1758 but we can't send one while we have "INVITE" outstanding. */
1760 p->needreinvite = 0;
1764 p->needdestroy = needdestroy;
1765 ast_mutex_unlock(&p->lock);
1769 /*--- sip_answer: Answer SIP call , send 200 OK on Invite */
1770 static int sip_answer(struct ast_channel *ast)
1774 struct sip_pvt *p = ast->pvt->pvt;
1776 ast_mutex_lock(&p->lock);
1777 if (ast->_state != AST_STATE_UP) {
1782 codec=pbx_builtin_getvar_helper(p->owner,"SIP_CODEC");
1784 fmt=ast_getformatbyname(codec);
1786 ast_log(LOG_NOTICE, "Changing codec to '%s' for this call because of ${SIP_CODEC) variable\n",codec);
1787 if (p->jointcapability & fmt) {
1788 p->jointcapability &= fmt;
1789 p->capability &= fmt;
1791 ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because it is not shared by both ends.\n");
1792 } else ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because of unrecognized/not configured codec (check allow/disallow in sip.conf): %s\n",codec);
1795 ast_setstate(ast, AST_STATE_UP);
1797 ast_log(LOG_DEBUG, "sip_answer(%s)\n", ast->name);
1798 res = transmit_response_with_sdp(p, "200 OK", &p->initreq, 1);
1800 ast_mutex_unlock(&p->lock);
1804 /*--- sip_write: Send response, support audio media ---*/
1805 static int sip_write(struct ast_channel *ast, struct ast_frame *frame)
1807 struct sip_pvt *p = ast->pvt->pvt;
1809 if (frame->frametype == AST_FRAME_VOICE) {
1810 if (!(frame->subclass & ast->nativeformats)) {
1811 ast_log(LOG_WARNING, "Asked to transmit frame type %d, while native formats is %d (read/write = %d/%d)\n",
1812 frame->subclass, ast->nativeformats, ast->readformat, ast->writeformat);
1816 ast_mutex_lock(&p->lock);
1818 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1819 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1822 res = ast_rtp_write(p->rtp, frame);
1824 ast_mutex_unlock(&p->lock);
1826 } else if (frame->frametype == AST_FRAME_VIDEO) {
1828 ast_mutex_lock(&p->lock);
1830 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1831 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1834 res = ast_rtp_write(p->vrtp, frame);
1836 ast_mutex_unlock(&p->lock);
1838 } else if (frame->frametype == AST_FRAME_IMAGE) {
1841 ast_log(LOG_WARNING, "Can't send %d type frames with SIP write\n", frame->frametype);
1848 /*--- sip_fixup: Fix up a channel: If a channel is consumed, this is called.
1849 Basically update any ->owner links ----*/
1850 static int sip_fixup(struct ast_channel *oldchan, struct ast_channel *newchan)
1852 struct sip_pvt *p = newchan->pvt->pvt;
1853 ast_mutex_lock(&p->lock);
1854 if (p->owner != oldchan) {
1855 ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, p->owner);
1856 ast_mutex_unlock(&p->lock);
1860 ast_mutex_unlock(&p->lock);
1864 /*--- sip_senddigit: Send DTMF character on SIP channel */
1865 /* within one call, we're able to transmit in many methods simultaneously */
1866 static int sip_senddigit(struct ast_channel *ast, char digit)
1868 struct sip_pvt *p = ast->pvt->pvt;
1869 if (p && (p->dtmfmode & SIP_DTMF_INFO)) {
1870 transmit_info_with_digit(p, digit);
1872 if (p && p->rtp && (p->dtmfmode & SIP_DTMF_RFC2833)) {
1873 ast_rtp_senddigit(p->rtp, digit);
1875 /* If in-band DTMF is desired, send that */
1876 if (p->dtmfmode & SIP_DTMF_INBAND)
1882 /*--- sip_transfer: Transfer SIP call */
1883 static int sip_transfer(struct ast_channel *ast, char *dest)
1885 struct sip_pvt *p = ast->pvt->pvt;
1887 res = transmit_refer(p, dest);
1891 /*--- sip_indicate: Play indication to user */
1892 /* With SIP a lot of indications is sent as messages, letting the device play
1893 the indication - busy signal, congestion etc */
1894 static int sip_indicate(struct ast_channel *ast, int condition)
1896 struct sip_pvt *p = ast->pvt->pvt;
1898 case AST_CONTROL_RINGING:
1899 if (ast->_state == AST_STATE_RING) {
1901 transmit_response(p, "180 Ringing", &p->initreq);
1903 if (!p->progressinband)
1906 /* Oops, we've sent progress tones. Let Asterisk do it instead */
1910 case AST_CONTROL_BUSY:
1911 if (ast->_state != AST_STATE_UP) {
1912 transmit_response(p, "486 Busy Here", &p->initreq);
1914 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1918 case AST_CONTROL_CONGESTION:
1919 if (ast->_state != AST_STATE_UP) {
1920 transmit_response(p, "503 Service Unavailable", &p->initreq);
1922 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1926 case AST_CONTROL_PROGRESS:
1927 case AST_CONTROL_PROCEEDING:
1928 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1929 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1937 ast_log(LOG_WARNING, "Don't know how to indicate condition %d\n", condition);
1945 /*--- sip_new: Initiate a call in the SIP channel */
1946 /* called from sip_request_call (calls from the pbx ) */
1947 static struct ast_channel *sip_new(struct sip_pvt *i, int state, char *title)
1949 struct ast_channel *tmp;
1952 ast_mutex_unlock(&i->lock);
1953 /* Don't hold a sip pvt lock while we allocate a channel */
1954 tmp = ast_channel_alloc(1);
1955 ast_mutex_lock(&i->lock);
1957 /* Select our native format based on codec preference until we receive
1958 something from another device to the contrary. */
1959 if (i->jointcapability)
1960 tmp->nativeformats = sip_codec_choose(i->jointcapability);
1961 else if (i->capability)
1962 tmp->nativeformats = sip_codec_choose(i->capability);
1964 tmp->nativeformats = sip_codec_choose(global_capability);
1965 fmt = ast_best_codec(tmp->nativeformats);
1967 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%04x", title, rand() & 0xffff);
1969 if (strchr(i->fromdomain,':'))
1971 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", strchr(i->fromdomain,':')+1, (int)(long)(i));
1975 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", i->fromdomain, (int)(long)(i));
1978 if (i->dtmfmode & SIP_DTMF_INBAND) {
1979 i->vad = ast_dsp_new();
1980 ast_dsp_set_features(i->vad, DSP_FEATURE_DTMF_DETECT);
1982 ast_dsp_digitmode(i->vad, DSP_DIGITMODE_DTMF | DSP_DIGITMODE_RELAXDTMF);
1984 tmp->fds[0] = ast_rtp_fd(i->rtp);
1985 tmp->fds[1] = ast_rtcp_fd(i->rtp);
1987 tmp->fds[2] = ast_rtp_fd(i->vrtp);
1988 tmp->fds[3] = ast_rtcp_fd(i->vrtp);
1990 if (state == AST_STATE_RING)
1992 tmp->adsicpe = AST_ADSI_UNAVAILABLE;
1993 tmp->writeformat = fmt;
1994 tmp->pvt->rawwriteformat = fmt;
1995 tmp->readformat = fmt;
1996 tmp->pvt->rawreadformat = fmt;
1998 tmp->pvt->send_text = sip_sendtext;
1999 tmp->pvt->call = sip_call;
2000 tmp->pvt->hangup = sip_hangup;
2001 tmp->pvt->answer = sip_answer;
2002 tmp->pvt->read = sip_read;
2003 tmp->pvt->write = sip_write;
2004 tmp->pvt->write_video = sip_write;
2005 tmp->pvt->indicate = sip_indicate;
2006 tmp->pvt->transfer = sip_transfer;
2007 tmp->pvt->fixup = sip_fixup;
2008 tmp->pvt->send_digit = sip_senddigit;
2010 tmp->pvt->bridge = ast_rtp_bridge;
2012 tmp->callgroup = i->callgroup;
2013 tmp->pickupgroup = i->pickupgroup;
2014 tmp->cid.cid_pres = i->callingpres;
2015 if (!ast_strlen_zero(i->accountcode))
2016 strncpy(tmp->accountcode, i->accountcode, sizeof(tmp->accountcode)-1);
2018 tmp->amaflags = i->amaflags;
2019 if (!ast_strlen_zero(i->language))
2020 strncpy(tmp->language, i->language, sizeof(tmp->language)-1);
2021 if (!ast_strlen_zero(i->musicclass))
2022 strncpy(tmp->musicclass, i->musicclass, sizeof(tmp->musicclass)-1);
2024 ast_mutex_lock(&usecnt_lock);
2026 ast_mutex_unlock(&usecnt_lock);
2027 strncpy(tmp->context, i->context, sizeof(tmp->context)-1);
2028 strncpy(tmp->exten, i->exten, sizeof(tmp->exten)-1);
2029 if (!ast_strlen_zero(i->cid_num))
2030 tmp->cid.cid_num = strdup(i->cid_num);
2031 if (!ast_strlen_zero(i->cid_name))
2032 tmp->cid.cid_name = strdup(i->cid_name);
2033 if (!ast_strlen_zero(i->rdnis))
2034 tmp->cid.cid_rdnis = strdup(i->rdnis);
2035 if (!ast_strlen_zero(i->exten) && strcmp(i->exten, "s"))
2036 tmp->cid.cid_dnid = strdup(i->exten);
2038 if (!ast_strlen_zero(i->domain)) {
2039 pbx_builtin_setvar_helper(tmp, "SIPDOMAIN", i->domain);
2041 if (!ast_strlen_zero(i->useragent)) {
2042 pbx_builtin_setvar_helper(tmp, "SIPUSERAGENT", i->useragent);
2044 if (!ast_strlen_zero(i->callid)) {
2045 pbx_builtin_setvar_helper(tmp, "SIPCALLID", i->callid);
2047 ast_setstate(tmp, state);
2048 if (state != AST_STATE_DOWN) {
2049 if (ast_pbx_start(tmp)) {
2050 ast_log(LOG_WARNING, "Unable to start PBX on %s\n", tmp->name);
2056 ast_log(LOG_WARNING, "Unable to allocate channel structure\n");
2060 static struct cfalias {
2064 { "Content-Type", "c" },
2065 { "Content-Encoding", "e" },
2069 { "Content-Length", "l" },
2072 { "Supported", "k" },
2073 { "Refer-To", "r" },
2074 { "Allow-Events", "u" },
2079 /*--- get_sdp_by_line: Reads one line of SIP message body */
2080 static char* get_sdp_by_line(char* line, char *name, int nameLen) {
2081 if (strncasecmp(line, name, nameLen) == 0 && line[nameLen] == '=') {
2082 char* r = line + nameLen + 1;
2083 while (*r && (*r < 33)) ++r;
2090 /*--- get_sdp: Gets all kind of SIP message bodies, including SDP,
2091 but the name wrongly applies _only_ sdp */
2092 static char *get_sdp(struct sip_request *req, char *name) {
2094 int len = strlen(name);
2097 for (x=0; x<req->lines; x++) {
2098 r = get_sdp_by_line(req->line[x], name, len);
2099 if (r[0] != '\0') return r;
2105 static void sdpLineNum_iterator_init(int* iterator) {
2109 static char* get_sdp_iterate(int* iterator,
2110 struct sip_request *req, char *name) {
2111 int len = strlen(name);
2113 while (*iterator < req->lines) {
2114 r = get_sdp_by_line(req->line[(*iterator)++], name, len);
2115 if (r[0] != '\0') return r;
2120 static char *__get_header(struct sip_request *req, char *name, int *start)
2123 int len = strlen(name);
2125 if (pedanticsipchecking) {
2126 /* Technically you can place arbitrary whitespace both before and after the ':' in
2127 a header, although RFC3261 clearly says you shouldn't before, and place just
2128 one afterwards. If you shouldn't do it, what absolute idiot decided it was
2129 a good idea to say you can do it, and if you can do it, why in the hell would
2130 you say you shouldn't. */
2131 for (x=*start;x<req->headers;x++) {
2132 if (!strncasecmp(req->header[x], name, len)) {
2133 r = req->header[x] + len;
2134 while(*r && (*r < 33))
2138 while(*r && (*r < 33))
2146 /* We probably shouldn't even bother counting whitespace afterwards but
2147 I guess for backwards compatibility we will */
2148 for (x=*start;x<req->headers;x++) {
2149 if (!strncasecmp(req->header[x], name, len) &&
2150 (req->header[x][len] == ':')) {
2151 r = req->header[x] + len + 1;
2152 while(*r && (*r < 33))
2160 for (x=0;x<sizeof(aliases) / sizeof(aliases[0]); x++)
2161 if (!strcasecmp(aliases[x].fullname, name))
2162 return __get_header(req, aliases[x].shortname, start);
2164 /* Don't return NULL, so get_header is always a valid pointer */
2168 /*--- get_header: Get header from SIP request ---*/
2169 static char *get_header(struct sip_request *req, char *name)
2172 return __get_header(req, name, &start);
2175 /*--- sip_rtp_read: Read RTP from network ---*/
2176 static struct ast_frame *sip_rtp_read(struct ast_channel *ast, struct sip_pvt *p)
2178 /* Retrieve audio/etc from channel. Assumes p->lock is already held. */
2179 struct ast_frame *f;
2180 static struct ast_frame null_frame = { AST_FRAME_NULL, };
2183 f = ast_rtp_read(p->rtp); /* RTP Audio */
2186 f = ast_rtcp_read(p->rtp); /* RTCP Control Channel */
2189 f = ast_rtp_read(p->vrtp); /* RTP Video */
2192 f = ast_rtcp_read(p->vrtp); /* RTCP Control Channel for video */
2197 /* Don't send RFC2833 if we're not supposed to */
2198 if (f && (f->frametype == AST_FRAME_DTMF) && !(p->dtmfmode & SIP_DTMF_RFC2833))
2201 /* We already hold the channel lock */
2202 if (f->frametype == AST_FRAME_VOICE) {
2203 if (f->subclass != p->owner->nativeformats) {
2204 ast_log(LOG_DEBUG, "Oooh, format changed to %d\n", f->subclass);
2205 p->owner->nativeformats = f->subclass;
2206 ast_set_read_format(p->owner, p->owner->readformat);
2207 ast_set_write_format(p->owner, p->owner->writeformat);
2209 if ((p->dtmfmode & SIP_DTMF_INBAND) && p->vad) {
2210 f = ast_dsp_process(p->owner,p->vad,f);
2211 if (f && (f->frametype == AST_FRAME_DTMF))
2212 ast_log(LOG_DEBUG, "Detected DTMF '%c'\n", f->subclass);
2219 /*--- sip_read: Read SIP RTP from channel */
2220 static struct ast_frame *sip_read(struct ast_channel *ast)
2222 struct ast_frame *fr;
2223 struct sip_pvt *p = ast->pvt->pvt;
2224 ast_mutex_lock(&p->lock);
2225 fr = sip_rtp_read(ast, p);
2226 time(&p->lastrtprx);
2227 ast_mutex_unlock(&p->lock);
2231 /*--- build_callid: Build SIP CALLID header ---*/
2232 static void build_callid(char *callid, int len, struct in_addr ourip, char *fromdomain)
2237 char iabuf[INET_ADDRSTRLEN];
2240 res = snprintf(callid, len, "%08x", val);
2244 if (!ast_strlen_zero(fromdomain))
2245 snprintf(callid, len, "@%s", fromdomain);
2247 /* It's not important that we really use our right IP here... */
2248 snprintf(callid, len, "@%s", ast_inet_ntoa(iabuf, sizeof(iabuf), ourip));
2251 /*--- sip_alloc: Allocate SIP_PVT structure and set defaults ---*/
2252 static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useglobal_nat)
2255 char iabuf[INET_ADDRSTRLEN];
2257 p = malloc(sizeof(struct sip_pvt));
2260 /* Keep track of stuff */
2261 memset(p, 0, sizeof(struct sip_pvt));
2262 ast_mutex_init(&p->lock);
2270 memcpy(&p->sa, sin, sizeof(p->sa));
2271 if (ast_sip_ouraddrfor(&p->sa.sin_addr,&p->ourip))
2272 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2274 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2276 p->rtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2278 p->vrtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2282 /* Start with 101 instead of 1 */
2285 ast_log(LOG_WARNING, "Unable to create RTP session: %s\n", strerror(errno));
2286 ast_mutex_destroy(&p->lock);
2290 ast_rtp_settos(p->rtp, tos);
2292 ast_rtp_settos(p->vrtp, tos);
2293 if (useglobal_nat && sin) {
2294 /* Setup NAT structure according to global settings if we have an address */
2295 p->nat = global_nat;
2296 memcpy(&p->recv, sin, sizeof(p->recv));
2297 ast_rtp_setnat(p->rtp, (p->nat & SIP_NAT_ROUTE));
2299 ast_rtp_setnat(p->vrtp, (p->nat & SIP_NAT_ROUTE));
2302 strncpy(p->fromdomain, default_fromdomain, sizeof(p->fromdomain) - 1);
2303 /* z9hG4bK is a magic cookie. See RFC 3261 section 8.1.1.7 */
2304 if (p->nat != SIP_NAT_NEVER)
2305 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);
2307 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);
2309 build_callid(p->callid, sizeof(p->callid), p->ourip, p->fromdomain);
2311 strncpy(p->callid, callid, sizeof(p->callid) - 1);
2312 /* Assume reinvite OK and via INVITE */
2313 p->canreinvite = global_canreinvite;
2314 /* Assign default music on hold class */
2315 strncpy(p->musicclass, global_musicclass, sizeof(p->musicclass) - 1);
2316 p->dtmfmode = global_dtmfmode;
2317 p->promiscredir = global_promiscredir;
2318 p->trustrpid = global_trustrpid;
2319 p->progressinband = global_progressinband;
2321 p->ospauth = global_ospauth;
2323 p->rtptimeout = global_rtptimeout;
2324 p->rtpholdtimeout = global_rtpholdtimeout;
2325 p->capability = global_capability;
2326 if (p->dtmfmode & SIP_DTMF_RFC2833)
2327 p->noncodeccapability |= AST_RTP_DTMF;
2328 strncpy(p->context, default_context, sizeof(p->context) - 1);
2330 ast_mutex_lock(&iflock);
2333 ast_mutex_unlock(&iflock);
2335 ast_log(LOG_DEBUG, "Allocating new SIP call for %s\n", callid);
2339 /*--- find_call: Connect incoming SIP message to current call or create new call structure */
2340 /* Called by handle_request ,sipsock_read */
2341 static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *sin)
2346 char iabuf[INET_ADDRSTRLEN];
2350 callid = get_header(req, "Call-ID");
2352 if (pedanticsipchecking) {
2353 /* In principle Call-ID's uniquely identify a call, however some vendors
2354 (i.e. Pingtel) send multiple calls with the same Call-ID and different
2355 tags in order to simplify billing. The RFC does state that we have to
2356 compare tags in addition to the call-id, but this generate substantially
2357 more overhead which is totally unnecessary for the vast majority of sane
2358 SIP implementations, and thus Asterisk does not enable this behavior
2359 by default. Short version: You'll need this option to support conferencing
2361 strncpy(tmp, req->header[0], sizeof(tmp) - 1);
2363 c = strchr(tmp, ' ');
2366 if (!strcasecmp(cmd, "SIP/2.0"))
2367 strncpy(tmp, get_header(req, "To"), sizeof(tmp) - 1);
2369 strncpy(tmp, get_header(req, "From"), sizeof(tmp) - 1);
2370 tag = strstr(tmp, "tag=");
2373 c = strchr(tag, ';');
2380 if (ast_strlen_zero(callid)) {
2381 ast_log(LOG_WARNING, "Call missing call ID from '%s'\n", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr));
2384 ast_mutex_lock(&iflock);
2387 if (!strcmp(p->callid, callid) &&
2388 (!pedanticsipchecking || !tag || ast_strlen_zero(p->theirtag) || !strcmp(p->theirtag, tag))) {
2389 /* Found the call */
2390 ast_mutex_lock(&p->lock);
2391 ast_mutex_unlock(&iflock);
2396 ast_mutex_unlock(&iflock);
2397 p = sip_alloc(callid, sin, 1);
2399 ast_mutex_lock(&p->lock);
2403 /*--- sip_register: Parse register=> line in sip.conf and add to registry */
2404 static int sip_register(char *value, int lineno)
2406 struct sip_registry *reg;
2407 char copy[256] = "";
2408 char *username=NULL, *hostname=NULL, *secret=NULL, *authuser=NULL;
2415 strncpy(copy, value, sizeof(copy)-1);
2418 hostname = strrchr(stringp, '@');
2423 if (!username || ast_strlen_zero(username) || !hostname || ast_strlen_zero(hostname)) {
2424 ast_log(LOG_WARNING, "Format for registration is user[:secret[:authuser]]@host[:port][/contact] at line %d", lineno);
2428 username = strsep(&stringp, ":");
2430 secret = strsep(&stringp, ":");
2432 authuser = strsep(&stringp, ":");
2435 hostname = strsep(&stringp, "/");
2437 contact = strsep(&stringp, "/");
2438 if (!contact || ast_strlen_zero(contact))
2441 hostname = strsep(&stringp, ":");
2442 porta = strsep(&stringp, ":");
2444 if (porta && !atoi(porta)) {
2445 ast_log(LOG_WARNING, "%s is not a valid port number at line %d\n", porta, lineno);
2448 reg = malloc(sizeof(struct sip_registry));
2450 memset(reg, 0, sizeof(struct sip_registry));
2451 strncpy(reg->contact, contact, sizeof(reg->contact) - 1);
2453 strncpy(reg->username, username, sizeof(reg->username)-1);
2455 strncpy(reg->hostname, hostname, sizeof(reg->hostname)-1);
2457 strncpy(reg->authuser, authuser, sizeof(reg->authuser)-1);
2459 strncpy(reg->secret, secret, sizeof(reg->secret)-1);
2462 reg->refresh = default_expiry;
2463 reg->portno = porta ? atoi(porta) : 0;
2464 reg->callid_valid = 0;
2466 ast_mutex_lock(®l.lock);
2467 reg->next = regl.registrations;
2468 regl.registrations = reg;
2469 ast_mutex_unlock(®l.lock);
2471 ast_log(LOG_ERROR, "Out of memory\n");
2477 /*--- lws2sws: Parse multiline SIP headers into one header */
2478 /* This is enabled if pedanticsipchecking is enabled */
2479 static int lws2sws(char *msgbuf, int len)
2485 /* Eliminate all CRs */
2486 if (msgbuf[h] == '\r') {
2490 /* Check for end-of-line */
2491 if (msgbuf[h] == '\n') {
2492 /* Check for end-of-message */
2495 /* Check for a continuation line */
2496 if (msgbuf[h + 1] == ' ') {
2497 /* Merge continuation line */
2501 /* Propagate LF and start new line */
2502 msgbuf[t++] = msgbuf[h++];
2507 if (msgbuf[h] == ' ' || msgbuf[h] == '\t') {
2512 msgbuf[t++] = msgbuf[h++];
2516 msgbuf[t++] = msgbuf[h++];
2524 /*--- parse: Parse a SIP message ----*/
2525 static void parse(struct sip_request *req)
2527 /* Divide fields by NULL's */
2532 /* First header starts immediately */
2536 /* We've got a new header */
2540 printf("Header: %s (%d)\n", req->header[f], strlen(req->header[f]));
2542 if (ast_strlen_zero(req->header[f])) {
2543 /* Line by itself means we're now in content */
2547 if (f >= SIP_MAX_HEADERS - 1) {
2548 ast_log(LOG_WARNING, "Too many SIP headers...\n");
2551 req->header[f] = c + 1;
2552 } else if (*c == '\r') {
2553 /* Ignore but eliminate \r's */
2558 /* Check for last header */
2559 if (!ast_strlen_zero(req->header[f]))
2562 /* Now we process any mime content */
2567 /* We've got a new line */
2570 printf("Line: %s (%d)\n", req->line[f], strlen(req->line[f]));
2572 if (f >= SIP_MAX_LINES - 1) {
2573 ast_log(LOG_WARNING, "Too many SDP lines...\n");
2576 req->line[f] = c + 1;
2577 } else if (*c == '\r') {
2578 /* Ignore and eliminate \r's */
2583 /* Check for last line */
2584 if (!ast_strlen_zero(req->line[f]))
2588 ast_log(LOG_WARNING, "Odd content, extra stuff left over ('%s')\n", c);
2591 /*--- process_sdp: Process SIP SDP ---*/
2592 static int process_sdp(struct sip_pvt *p, struct sip_request *req)
2598 char iabuf[INET_ADDRSTRLEN];
2602 int peercapability, peernoncodeccapability;
2603 int vpeercapability=0, vpeernoncodeccapability=0;
2604 struct sockaddr_in sin;
2607 struct ast_hostent ahp;
2612 int debug=sip_debug_test_pvt(p);
2614 /* Update our last rtprx when we receive an SDP, too */
2615 time(&p->lastrtprx);
2617 /* Get codec and RTP info from SDP */
2618 if (strcasecmp(get_header(req, "Content-Type"), "application/sdp")) {
2619 ast_log(LOG_NOTICE, "Content is '%s', not 'application/sdp'\n", get_header(req, "Content-Type"));
2622 m = get_sdp(req, "m");
2623 c = get_sdp(req, "c");
2624 if (ast_strlen_zero(m) || ast_strlen_zero(c)) {
2625 ast_log(LOG_WARNING, "Insufficient information for SDP (m = '%s', c = '%s')\n", m, c);
2628 if (sscanf(c, "IN IP4 %256s", host) != 1) {
2629 ast_log(LOG_WARNING, "Invalid host in c= line, '%s'\n", c);
2632 /* XXX This could block for a long time, and block the main thread! XXX */
2633 hp = ast_gethostbyname(host, &ahp);
2635 ast_log(LOG_WARNING, "Unable to lookup host in c= line, '%s'\n", c);
2638 sdpLineNum_iterator_init(&iterator);
2640 while ((m = get_sdp_iterate(&iterator, req, "m"))[0] != '\0') {
2641 if ((sscanf(m, "audio %d RTP/AVP %n", &x, &len) == 1) ||
2642 (sscanf(m, "audio %d/%d RTP/AVP %n", &x, &y, &len) == 2)) {
2644 /* Scan through the RTP payload types specified in a "m=" line: */
2645 ast_rtp_pt_clear(p->rtp);
2647 while(!ast_strlen_zero(codecs)) {
2648 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2649 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2653 ast_verbose("Found RTP audio format %d\n", codec);
2654 ast_rtp_set_m_type(p->rtp, codec);
2656 /* Skip over any whitespace */
2657 while(*codecs && (*codecs < 33)) codecs++;
2661 ast_rtp_pt_clear(p->vrtp); /* Must be cleared in case no m=video line exists */
2663 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->peercapability = (peercapability | vpeercapability);
2736 p->noncodeccapability = noncodeccapability & peernoncodeccapability;
2739 const unsigned slen=80;
2740 char s1[slen], s2[slen], s3[slen], s4[slen];
2742 ast_verbose("Capabilities: us - %s, peer - audio=%s/video=%s, combined - %s\n",
2743 ast_getformatname_multiple(s1, slen, p->capability),
2744 ast_getformatname_multiple(s2, slen, peercapability),
2745 ast_getformatname_multiple(s3, slen, vpeercapability),
2746 ast_getformatname_multiple(s4, slen, p->jointcapability));
2748 ast_verbose("Non-codec capabilities: us - %s, peer - %s, combined - %s\n",
2749 ast_getformatname_multiple(s1, slen, noncodeccapability),
2750 ast_getformatname_multiple(s2, slen, peernoncodeccapability),
2751 ast_getformatname_multiple(s3, slen, p->noncodeccapability));
2753 if (!p->jointcapability) {
2754 ast_log(LOG_WARNING, "No compatible codecs!\n");
2758 if (!(p->owner->nativeformats & p->jointcapability)) {
2759 const unsigned slen=80;
2760 char s1[slen], s2[slen];
2761 ast_log(LOG_DEBUG, "Oooh, we need to change our formats since our peer supports only %s and not %s\n",
2762 ast_getformatname_multiple(s1, slen, p->jointcapability),
2763 ast_getformatname_multiple(s2, slen, p->owner->nativeformats));
2764 p->owner->nativeformats = sip_codec_choose(p->jointcapability);
2765 ast_set_read_format(p->owner, p->owner->readformat);
2766 ast_set_write_format(p->owner, p->owner->writeformat);
2768 if (ast_bridged_channel(p->owner)) {
2769 /* Turn on/off music on hold if we are holding/unholding */
2770 if (sin.sin_addr.s_addr && !sendonly) {
2771 ast_moh_stop(ast_bridged_channel(p->owner));
2773 ast_moh_start(ast_bridged_channel(p->owner), NULL);
2781 /*--- add_header: Add header to SIP message */
2782 static int add_header(struct sip_request *req, char *var, char *value)
2784 if (req->len >= sizeof(req->data) - 4) {
2785 ast_log(LOG_WARNING, "Out of space, can't add anymore (%s:%s)\n", var, value);
2789 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2792 req->header[req->headers] = req->data + req->len;
2793 snprintf(req->header[req->headers], sizeof(req->data) - req->len - 4, "%s: %s\r\n", var, value);
2794 req->len += strlen(req->header[req->headers]);
2795 if (req->headers < SIP_MAX_HEADERS)
2798 ast_log(LOG_WARNING, "Out of header space\n");
2804 /*--- add_blank_header: Add blank header to SIP message */
2805 static int add_blank_header(struct sip_request *req)
2807 if (req->len >= sizeof(req->data) - 4) {
2808 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2812 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2815 req->header[req->headers] = req->data + req->len;
2816 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "\r\n");
2817 req->len += strlen(req->header[req->headers]);
2818 if (req->headers < SIP_MAX_HEADERS)
2821 ast_log(LOG_WARNING, "Out of header space\n");
2827 /*--- add_line: Add content (not header) to SIP message */
2828 static int add_line(struct sip_request *req, char *line)
2830 if (req->len >= sizeof(req->data) - 4) {
2831 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2835 /* Add extra empty return */
2836 snprintf(req->data + req->len, sizeof(req->data) - req->len, "\r\n");
2837 req->len += strlen(req->data + req->len);
2839 req->line[req->lines] = req->data + req->len;
2840 snprintf(req->line[req->lines], sizeof(req->data) - req->len, "%s", line);
2841 req->len += strlen(req->line[req->lines]);
2842 if (req->lines < SIP_MAX_LINES)
2845 ast_log(LOG_WARNING, "Out of line space\n");
2851 /*--- copy_header: Copy one header field from one request to another */
2852 static int copy_header(struct sip_request *req, struct sip_request *orig, char *field)
2855 tmp = get_header(orig, field);
2856 if (!ast_strlen_zero(tmp)) {
2857 /* Add what we're responding to */
2858 return add_header(req, field, tmp);
2860 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2864 /*--- copy_all_header: Copy all headers from one request to another ---*/
2865 static int copy_all_header(struct sip_request *req, struct sip_request *orig, char *field)
2871 tmp = __get_header(orig, field, &start);
2872 if (!ast_strlen_zero(tmp)) {
2873 /* Add what we're responding to */
2874 add_header(req, field, tmp);
2879 return copied ? 0 : -1;
2882 /*--- copy_via_headers: Copy SIP VIA Headers from one request to another ---*/
2883 static int copy_via_headers(struct sip_pvt *p, struct sip_request *req, struct sip_request *orig, char *field)
2885 char tmp[256]="", *oh, *end;
2889 char iabuf[INET_ADDRSTRLEN];
2891 oh = __get_header(orig, field, &start);
2892 if (!ast_strlen_zero(oh)) {
2894 strncpy(tmp, oh, sizeof(tmp) - 1);
2895 oh = strstr(tmp, ";rport");
2897 end = strchr(oh + 1, ';');
2899 memmove(oh, end, strlen(end) + 1);
2903 if (!copied && (p->nat == SIP_NAT_ALWAYS)) {
2904 /* Whoo hoo! Now we can indicate port address translation too! Just
2905 another RFC (RFC3581). I'll leave the original comments in for
2907 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));
2908 add_header(req, field, new);
2910 /* Add what we're responding to */
2911 add_header(req, field, tmp);
2918 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2924 /*--- add_route: Add route header into request per learned route ---*/
2925 static void add_route(struct sip_request *req, struct sip_route *route)
2928 int n, rem = 255; /* sizeof(r)-1: Room for terminating 0 */
2934 n = strlen(route->hop);
2935 if ((n+3)>rem) break;
2941 strncpy(p, route->hop, rem); p += n;
2944 route = route->next;
2947 add_header(req, "Route", r);
2950 /*--- set_destination: Set destination from SIP URI ---*/
2951 static void set_destination(struct sip_pvt *p, char *uri)
2953 char *h, *maddr, hostname[256] = "";
2954 char iabuf[INET_ADDRSTRLEN];
2957 struct ast_hostent ahp;
2958 int debug=sip_debug_test_pvt(p);
2960 /* Parse uri to h (host) and port - uri is already just the part inside the <> */
2961 /* general form we are expecting is sip[s]:username[:password]@host[:port][;...] */
2964 ast_verbose("set_destination: Parsing <%s> for address/port to send to\n", uri);
2966 /* Find and parse hostname */
2967 h = strchr(uri, '@');
2972 if (strncmp(h, "sip:", 4) == 0)
2974 else if (strncmp(h, "sips:", 5) == 0)
2977 hn = strcspn(h, ":;>");
2978 if (hn > (sizeof(hostname) - 1)) hn = sizeof(hostname) - 1;
2979 strncpy(hostname, h, hn); hostname[hn] = '\0'; /* safe */
2982 /* Is "port" present? if not default to 5060 */
2986 port = strtol(h, &h, 10);
2991 /* Got the hostname:port - but maybe there's a "maddr=" to override address? */
2992 maddr = strstr(h, "maddr=");
2995 hn = strspn(maddr, "0123456789.");
2996 if (hn > (sizeof(hostname) - 1)) hn = sizeof(hostname) - 1;
2997 strncpy(hostname, maddr, hn); hostname[hn] = '\0'; /* safe */
3000 hp = ast_gethostbyname(hostname, &ahp);
3002 ast_log(LOG_WARNING, "Can't find address for host '%s'\n", hostname);
3005 p->sa.sin_family = AF_INET;
3006 memcpy(&p->sa.sin_addr, hp->h_addr, sizeof(p->sa.sin_addr));
3007 p->sa.sin_port = htons(port);
3009 ast_verbose("set_destination: set destination to %s, port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr), port);
3012 /*--- init_resp: Initialize SIP response, based on SIP request ---*/
3013 static int init_resp(struct sip_request *req, char *resp, struct sip_request *orig)
3015 /* Initialize a response */
3016 if (req->headers || req->len) {
3017 ast_log(LOG_WARNING, "Request already initialized?!?\n");
3020 req->header[req->headers] = req->data + req->len;
3021 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "SIP/2.0 %s\r\n", resp);
3022 req->len += strlen(req->header[req->headers]);
3023 if (req->headers < SIP_MAX_HEADERS)
3026 ast_log(LOG_WARNING, "Out of header space\n");
3030 /*--- init_req: Initialize SIP request ---*/
3031 static int init_req(struct sip_request *req, char *resp, char *recip)
3033 /* Initialize a response */
3034 if (req->headers || req->len) {
3035 ast_log(LOG_WARNING, "Request already initialized?!?\n");
3038 req->header[req->headers] = req->data + req->len;
3039 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "%s %s SIP/2.0\r\n", resp, recip);
3040 req->len += strlen(req->header[req->headers]);
3041 if (req->headers < SIP_MAX_HEADERS)
3044 ast_log(LOG_WARNING, "Out of header space\n");
3049 static int respprep(struct sip_request *resp, struct sip_pvt *p, char *msg, struct sip_request *req)
3051 char newto[256] = "", *ot;
3053 memset(resp, 0, sizeof(*resp));
3054 init_resp(resp, msg, req);
3055 copy_via_headers(p, resp, req, "Via");
3056 if (msg[0] == '2') copy_all_header(resp, req, "Record-Route");
3057 copy_header(resp, req, "From");
3058 ot = get_header(req, "To");
3059 if (!strstr(ot, "tag=")) {
3060 /* Add the proper tag if we don't have it already. If they have specified
3061 their tag, use it. Otherwise, use our own tag */
3062 if (!ast_strlen_zero(p->theirtag) && p->outgoing)
3063 snprintf(newto, sizeof(newto), "%s;tag=%s", ot, p->theirtag);
3064 else if (p->tag && !p->outgoing)
3065 snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag);
3067 strncpy(newto, ot, sizeof(newto) - 1);
3068 newto[sizeof(newto) - 1] = '\0';
3072 add_header(resp, "To", ot);
3073 copy_header(resp, req, "Call-ID");
3074 copy_header(resp, req, "CSeq");
3075 add_header(resp, "User-Agent", default_useragent);
3076 add_header(resp, "Allow", ALLOWED_METHODS);
3078 /* For registration responses, we also need expiry and
3082 snprintf(contact, sizeof(contact), "%s;expires=%d", p->our_contact, p->expiry);
3083 snprintf(tmp, sizeof(tmp), "%d", p->expiry);
3084 add_header(resp, "Expires", tmp);
3085 add_header(resp, "Contact", contact);
3087 add_header(resp, "Contact", p->our_contact);
3092 static int reqprep(struct sip_request *req, struct sip_pvt *p, char *msg, int seqno, int newbranch)
3094 struct sip_request *orig = &p->initreq;
3095 char stripped[80] ="";
3098 char iabuf[INET_ADDRSTRLEN];
3102 memset(req, 0, sizeof(struct sip_request));
3104 snprintf(p->lastmsg, sizeof(p->lastmsg), "Tx: %s", msg);
3112 p->branch ^= rand();
3113 if (p->nat & SIP_NAT_RFC3581)
3114 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);
3115 else /* Some implementations (e.g. Uniden UIP200) can't handle rport being in the message!! */
3116 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);
3118 if (!strcasecmp(msg, "CANCEL") || !strcasecmp(msg, "ACK")) {
3119 /* MUST use original URI */
3120 c = p->initreq.rlPart2;
3121 } else if (!ast_strlen_zero(p->uri)) {
3125 strncpy(stripped, get_header(orig, "To"), sizeof(stripped) - 1);
3127 strncpy(stripped, get_header(orig, "From"), sizeof(stripped) - 1);
3129 c = strchr(stripped, '<');
3141 init_req(req, msg, c);
3143 snprintf(tmp, sizeof(tmp), "%d %s", seqno, msg);
3145 add_header(req, "Via", p->via);
3147 set_destination(p, p->route->hop);
3148 add_route(req, p->route->next);
3151 ot = get_header(orig, "To");
3152 of = get_header(orig, "From");
3154 /* Add tag *unless* this is a CANCEL, in which case we need to send it exactly
3155 as our original request, including tag (or presumably lack thereof) */
3156 if (!strstr(ot, "tag=") && strcasecmp(msg, "CANCEL")) {
3157 /* Add the proper tag if we don't have it already. If they have specified
3158 their tag, use it. Otherwise, use our own tag */
3159 if (p->outgoing && !ast_strlen_zero(p->theirtag))
3160 snprintf(newto, sizeof(newto), "%s;tag=%s", ot, p->theirtag);
3161 else if (!p->outgoing)
3162 snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag);
3164 snprintf(newto, sizeof(newto), "%s", ot);
3169 add_header(req, "From", of);
3170 add_header(req, "To", ot);
3172 add_header(req, "From", ot);
3173 add_header(req, "To", of);
3175 add_header(req, "Contact", p->our_contact);
3176 copy_header(req, orig, "Call-ID");
3177 add_header(req, "CSeq", tmp);
3179 add_header(req, "User-Agent", default_useragent);
3183 static int __transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req, int reliable)
3185 struct sip_request resp;
3187 if (reliable && (sscanf(get_header(req, "CSeq"), "%i ", &seqno) != 1)) {
3188 ast_log(LOG_WARNING, "Unable to determine sequence number from '%s'\n", get_header(req, "CSeq"));
3191 respprep(&resp, p, msg, req);
3192 add_header(&resp, "Content-Length", "0");
3193 add_blank_header(&resp);
3194 return send_response(p, &resp, reliable, seqno);
3197 /*--- transmit_response: Transmit response, no retransmits */
3198 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req)
3200 return __transmit_response(p, msg, req, 0);
3203 /*--- transmit_response: Transmit response, Make sure you get a reply */
3204 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal)
3206 return __transmit_response(p, msg, req, fatal ? 2 : 1);
3209 /*--- append_date: Append date to SIP message ---*/
3210 static void append_date(struct sip_request *req)
3217 strftime(tmpdat, sizeof(tmpdat), "%a, %d %b %Y %T GMT", &tm);
3218 add_header(req, "Date", tmpdat);
3221 /*--- transmit_response_with_date: Append date and content length before transmitting response ---*/
3222 static int transmit_response_with_date(struct sip_pvt *p, char *msg, struct sip_request *req)
3224 struct sip_request resp;
3225 respprep(&resp, p, msg, req);
3227 add_header(&resp, "Content-Length", "0");
3228 add_blank_header(&resp);
3229 return send_response(p, &resp, 0, 0);
3232 /*--- transmit_response_with_allow: Append Accept header, content length before transmitting response ---*/
3233 static int transmit_response_with_allow(struct sip_pvt *p, char *msg, struct sip_request *req, int reliable)
3235 struct sip_request resp;
3236 respprep(&resp, p, msg, req);
3237 add_header(&resp, "Accept", "application/sdp");
3238 add_header(&resp, "Content-Length", "0");
3239 add_blank_header(&resp);
3240 return send_response(p, &resp, reliable, 0);
3243 /* transmit_response_with_auth: Respond with authorization request */
3244 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *randdata, int reliable, char *header)
3246 struct sip_request resp;
3249 if (reliable && (sscanf(get_header(req, "CSeq"), "%i ", &seqno) != 1)) {
3250 ast_log(LOG_WARNING, "Unable to determine sequence number from '%s'\n", get_header(req, "CSeq"));
3253 snprintf(tmp, sizeof(tmp), "Digest realm=\"%s\", nonce=\"%s\"", global_realm, randdata);
3254 respprep(&resp, p, msg, req);
3255 add_header(&resp, header, tmp);
3256 add_header(&resp, "Content-Length", "0");
3257 add_blank_header(&resp);
3258 return send_response(p, &resp, reliable, seqno);
3261 /*--- add_text: Add text body to SIP message ---*/
3262 static int add_text(struct sip_request *req, char *text)
3264 /* XXX Convert \n's to \r\n's XXX */
3265 int len = strlen(text);
3267 snprintf(clen, sizeof(clen), "%d", len);
3268 add_header(req, "Content-Type", "text/plain");
3269 add_header(req, "Content-Length", clen);
3270 add_line(req, text);
3274 /*--- add_digit: add DTMF INFO tone to sip message ---*/
3275 /* Always adds default duration 250 ms, regardless of what came in over the line */
3276 static int add_digit(struct sip_request *req, char digit)
3281 snprintf(tmp, sizeof(tmp), "Signal=%c\r\nDuration=250\r\n", digit);
3283 snprintf(clen, sizeof(clen), "%d", len);
3284 add_header(req, "Content-Type", "application/dtmf-relay");
3285 add_header(req, "Content-Length", clen);
3290 /*--- add_sdp: Add Session Description Protocol message ---*/
3291 static int add_sdp(struct sip_request *resp, struct sip_pvt *p)
3295 int alreadysent = 0;
3297 struct sockaddr_in sin;
3298 struct sockaddr_in vsin;
3299 struct sip_codec_pref *cur;
3309 char iabuf[INET_ADDRSTRLEN];
3312 struct sockaddr_in dest;
3313 struct sockaddr_in vdest = { 0, };
3314 int debug=sip_debug_test_pvt(p);
3316 /* XXX We break with the "recommendation" and send our IP, in order that our
3317 peer doesn't have to ast_gethostbyname() us XXX */
3320 ast_log(LOG_WARNING, "No way to add SDP without an RTP structure\n");
3323 capability = p->capability;
3325 if (!p->sessionid) {
3326 p->sessionid = getpid();
3327 p->sessionversion = p->sessionid;
3329 p->sessionversion++;
3330 ast_rtp_get_us(p->rtp, &sin);
3332 ast_rtp_get_us(p->vrtp, &vsin);
3334 if (p->redirip.sin_addr.s_addr) {
3335 dest.sin_port = p->redirip.sin_port;
3336 dest.sin_addr = p->redirip.sin_addr;
3338 capability = p->redircodecs;
3340 dest.sin_addr = p->ourip;
3341 dest.sin_port = sin.sin_port;
3344 /* Determine video destination */
3346 if (p->vredirip.sin_addr.s_addr) {
3347 vdest.sin_port = p->vredirip.sin_port;
3348 vdest.sin_addr = p->vredirip.sin_addr;
3350 vdest.sin_addr = p->ourip;
3351 vdest.sin_port = vsin.sin_port;
3355 ast_verbose("We're at %s port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ntohs(sin.sin_port));
3357 ast_verbose("Video is at %s port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ntohs(vsin.sin_port));
3359 snprintf(v, sizeof(v), "v=0\r\n");
3360 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));
3361 snprintf(s, sizeof(s), "s=session\r\n");
3362 snprintf(c, sizeof(c), "c=IN IP4 %s\r\n", ast_inet_ntoa(iabuf, sizeof(iabuf), dest.sin_addr));
3363 snprintf(t, sizeof(t), "t=0 0\r\n");
3364 snprintf(m, sizeof(m), "m=audio %d RTP/AVP", ntohs(dest.sin_port));
3365 snprintf(m2, sizeof(m2), "m=video %d RTP/AVP", ntohs(vdest.sin_port));
3366 if (capability & p->prefcodec) {
3368 ast_verbose("Answering/Requesting with root capability %d\n", p->prefcodec);
3369 codec = ast_rtp_lookup_code(p->rtp, 1, p->prefcodec);
3371 snprintf(costr, sizeof(costr), " %d", codec);
3372 if (p->prefcodec <= AST_FORMAT_MAX_AUDIO) {
3373 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3374 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, p->prefcodec));
3375 strncpy(a, costr, sizeof(a) - 1);
3377 strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
3378 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, p->prefcodec));
3379 strncpy(a2, costr, sizeof(a2) - 1);
3382 alreadysent |= p->prefcodec;
3384 /* Start by sending our preferred codecs */
3387 if ((capability & cur->codec) && !(alreadysent & cur->codec)) {
3389 ast_verbose("Answering with preferred capability 0x%x(%s)\n", cur->codec, ast_getformatname(cur->codec));
3390 codec = ast_rtp_lookup_code(p->rtp, 1, cur->codec);
3392 snprintf(costr, sizeof(costr), " %d", codec);
3393 if (cur->codec <= AST_FORMAT_MAX_AUDIO) {
3394 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3395 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, cur->codec));
3396 strncat(a, costr, sizeof(a) - strlen(a) - 1);
3398 strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
3399 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, cur->codec));
3400 strncat(a2, costr, sizeof(a2) - strlen(a) - 1);
3404 alreadysent |= cur->codec;
3407 /* Now send any other common codecs, and non-codec formats: */
3408 for (x = 1; x <= ((videosupport && p->vrtp) ? AST_FORMAT_MAX_VIDEO : AST_FORMAT_MAX_AUDIO); x <<= 1) {
3409 if ((capability & x) && !(alreadysent & x)) {
3411 ast_verbose("Answering with capability 0x%x(%s)\n", x, ast_getformatname(x));
3412 codec = ast_rtp_lookup_code(p->rtp, 1, x);
3414 snprintf(costr, sizeof(costr), " %d", codec);
3415 if (x <= AST_FORMAT_MAX_AUDIO) {
3416 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3417 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, x));
3418 strncat(a, costr, sizeof(a) - strlen(a) - 1);
3420 strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
3421 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, x));
3422 strncat(a2, costr, sizeof(a2) - strlen(a2) - 1);
3427 for (x = 1; x <= AST_RTP_MAX; x <<= 1) {
3428 if (p->noncodeccapability & x) {
3430 ast_verbose("Answering with non-codec capability 0x%x(%s)\n", x, ast_getformatname(x));
3431 codec = ast_rtp_lookup_code(p->rtp, 0, x);
3433 snprintf(costr, sizeof(costr), " %d", codec);
3434 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3435 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(0, x));
3436 strncat(a, costr, sizeof(a) - strlen(a) - 1);
3437 if (x == AST_RTP_DTMF) {
3438 /* Indicate we support DTMF... Not sure about 16, but MSN supports it so dang it, we will too... */
3439 snprintf(costr, sizeof costr, "a=fmtp:%d 0-16\r\n",
3441 strncat(a, costr, sizeof(a) - strlen(a) - 1);
3446 strncat(a, "a=silenceSupp:off - - - -\r\n", sizeof(a) - strlen(a) - 1);
3447 if (strlen(m) < sizeof(m) - 2)
3448 strncat(m, "\r\n", sizeof(m) - strlen(m) - 1);
3449 if (strlen(m2) < sizeof(m2) - 2)
3450 strncat(m2, "\r\n", sizeof(m2) - strlen(m2) - 1);
3451 if ((sizeof(m) <= strlen(m) - 2) || (sizeof(m2) <= strlen(m2) - 2) || (sizeof(a) == strlen(a)) || (sizeof(a2) == strlen(a2)))
3452 ast_log(LOG_WARNING, "SIP SDP may be truncated due to undersized buffer!!\n");
3453 len = strlen(v) + strlen(s) + strlen(o) + strlen(c) + strlen(t) + strlen(m) + strlen(a);
3454 if ((p->vrtp) && (!p->novideo) && (capability & VIDEO_CODEC_MASK)) /* only if video response is appropriate */
3455 len += strlen(m2) + strlen(a2);
3456 snprintf(costr, sizeof(costr), "%d", len);
3457 add_header(resp, "Content-Type", "application/sdp");
3458 add_header(resp, "Content-Length", costr);
3466 if ((p->vrtp) && (!p->novideo) && (capability & VIDEO_CODEC_MASK)) { /* only if video response is appropriate */
3470 /* Update lastrtprx when we send our SDP */
3471 time(&p->lastrtprx);
3475 /*--- copy_request: copy SIP request (mostly used to save request for responses) ---*/
3476 static void copy_request(struct sip_request *dst,struct sip_request *src)
3480 offset = ((void *)dst) - ((void *)src);
3481 /* First copy stuff */
3482 memcpy(dst, src, sizeof(*dst));
3483 /* Now fix pointer arithmetic */
3484 for (x=0;x<src->headers;x++)
3485 dst->header[x] += offset;<