2 * Asterisk -- A telephony toolkit for Linux.
4 * Implementation of Session Initiation Protocol
6 * Copyright (C) 1999, Mark Spencer
8 * Mark Spencer <markster@linux-support.net>
10 * This program is free software, distributed under the terms of
11 * the GNU General Public License
18 #include <asterisk/lock.h>
19 #include <asterisk/channel.h>
20 #include <asterisk/channel_pvt.h>
21 #include <asterisk/config.h>
22 #include <asterisk/logger.h>
23 #include <asterisk/module.h>
24 #include <asterisk/pbx.h>
25 #include <asterisk/options.h>
26 #include <asterisk/lock.h>
27 #include <asterisk/sched.h>
28 #include <asterisk/io.h>
29 #include <asterisk/rtp.h>
30 #include <asterisk/acl.h>
31 #include <asterisk/callerid.h>
32 #include <asterisk/cli.h>
33 #include <asterisk/md5.h>
34 #include <asterisk/app.h>
35 #include <asterisk/musiconhold.h>
36 #include <asterisk/dsp.h>
37 #include <asterisk/parking.h>
38 #include <asterisk/acl.h>
39 #include <asterisk/srv.h>
40 #include <asterisk/astdb.h>
41 #include <asterisk/causes.h>
42 #include <sys/socket.h>
43 #include <sys/ioctl.h>
50 #include <arpa/inet.h>
51 #include <sys/signal.h>
52 #include <netinet/in_systm.h>
53 #include <netinet/ip.h>
56 #define IPTOS_MINCOST 0x02
59 /* #define VOCAL_DATA_HACK */
62 #define DEFAULT_DEFAULT_EXPIRY 120
63 #define DEFAULT_MAX_EXPIRY 3600
64 #define EXPIRY_GUARD_SECS 15
66 #define CALLERID_UNKNOWN "Unknown"
68 #define SIP_DTMF_RFC2833 (1 << 0)
69 #define SIP_DTMF_INBAND (1 << 1)
70 #define SIP_DTMF_INFO (1 << 2)
72 static int max_expiry = DEFAULT_MAX_EXPIRY;
73 static int default_expiry = DEFAULT_DEFAULT_EXPIRY;
75 #define DEFAULT_MAXMS 2000 /* Must be faster than 2 seconds by default */
76 #define DEFAULT_FREQ_OK 60 * 1000 /* How often to check for the host to be up */
77 #define DEFAULT_FREQ_NOTOK 10 * 1000 /* How often to check, if the host is down... */
79 #define DEFAULT_RETRANS 1000 /* How frequently to retransmit */
80 #define MAX_RETRANS 5 /* Try only 5 times for retransmissions */
82 static char *desc = "Session Initiation Protocol (SIP)";
83 static char *type = "sip";
84 static char *tdesc = "Session Initiation Protocol (SIP)";
85 static char *config = "sip.conf";
87 #define DEFAULT_SIP_PORT 5060 /* From RFC 2543 */
88 #define SIP_MAX_PACKET 1500 /* Also from RFC 2543, should sub headers tho */
90 #define ALLOWED_METHODS "INVITE, ACK, CANCEL, OPTIONS, BYE, REFER"
92 static char context[AST_MAX_EXTENSION] = "default";
94 static char language[MAX_LANGUAGE] = "";
96 static char callerid[AST_MAX_EXTENSION] = "asterisk";
98 static char fromdomain[AST_MAX_EXTENSION] = "";
100 static char notifymime[AST_MAX_EXTENSION] = "application/simple-message-summary";
102 static int srvlookup = 0;
104 static int pedanticsipchecking = 0;
106 static int usecnt =0;
107 static ast_mutex_t usecnt_lock = AST_MUTEX_INITIALIZER;
109 /* Protect the interface list (of sip_pvt's) */
110 static ast_mutex_t iflock = AST_MUTEX_INITIALIZER;
112 /* Protect the monitoring thread, so only one process can kill or start it, and not
113 when it's doing something critical. */
114 static ast_mutex_t netlock = AST_MUTEX_INITIALIZER;
116 static ast_mutex_t monlock = AST_MUTEX_INITIALIZER;
118 /* This is the thread for the monitor which checks for input on the channels
119 which are not currently in use. */
120 static pthread_t monitor_thread = 0;
122 static int restart_monitor(void);
124 /* Codecs that we support by default: */
125 static int capability = AST_FORMAT_ULAW | AST_FORMAT_ALAW | AST_FORMAT_GSM | AST_FORMAT_H263;
126 static int noncodeccapability = AST_RTP_DTMF;
128 static char ourhost[256];
129 static struct in_addr __ourip;
132 static int sipdebug = 0;
136 static int videosupport = 0;
138 static int globaldtmfmode = SIP_DTMF_RFC2833;
141 static int expiry = 900;
143 static struct sched_context *sched;
144 static struct io_context *io;
145 /* The private structures of the sip channels are linked for
146 selecting outgoing channels */
148 #define SIP_MAX_HEADERS 64
149 #define SIP_MAX_LINES 64
153 #define DEC_OUT_USE 2
154 #define INC_OUT_USE 3
156 static struct sip_codec_pref {
158 struct sip_codec_pref *next;
162 char *rlPart1; /* SIP Method Name or "SIP/2.0" protocol version */
163 char *rlPart2; /* The Request URI or Response Status */
165 int headers; /* SIP Headers */
166 char *header[SIP_MAX_HEADERS];
167 int lines; /* SDP Content */
168 char *line[SIP_MAX_LINES];
169 char data[SIP_MAX_PACKET];
175 struct sip_route *next;
179 static struct sip_pvt {
180 ast_mutex_t lock; /* Channel private lock */
181 char callid[80]; /* Global CallID */
182 char randdata[80]; /* Random data */
183 unsigned int ocseq; /* Current outgoing seqno */
184 unsigned int icseq; /* Current incoming seqno */
185 unsigned int callgroup;
186 unsigned int pickupgroup;
187 int lastinvite; /* Last Cseq of invite */
188 int alreadygone; /* Whether or not we've already been destroyed by or peer */
189 int needdestroy; /* if we need to be destroyed */
190 int capability; /* Special capability */
191 int jointcapability; /* Supported capability at both ends */
192 int noncodeccapability;
193 int outgoing; /* Outgoing or incoming call? */
194 int authtries; /* Times we've tried to authenticate */
195 int insecure; /* Don't check source port/ip */
196 int expiry; /* How long we take to expire */
197 int branch; /* One random number */
198 int canreinvite; /* Do we support reinvite */
199 int ringing; /* Have sent 180 ringing */
200 int progress; /* Have sent 183 message progress */
201 int tag; /* Another random number */
202 int nat; /* Whether to try to support NAT */
203 struct sockaddr_in sa; /* Our peer */
204 struct sockaddr_in redirip; /* Where our RTP should be going if not to us */
205 struct sockaddr_in vredirip; /* Where our Video RTP should be going if not to us */
206 struct sockaddr_in recv; /* Received as */
207 struct in_addr ourip; /* Our IP */
208 struct ast_channel *owner; /* Who owns us */
209 char exten[AST_MAX_EXTENSION]; /* Extention where to start */
210 char refer_to[AST_MAX_EXTENSION]; /* Place to store REFER-TO extension */
211 char referred_by[AST_MAX_EXTENSION];/* Place to store REFERRED-BY extension */
212 char refer_contact[AST_MAX_EXTENSION];/* Place to store Contact info from a REFER extension */
213 struct sip_pvt *refer_call; /* Call we are referring */
214 struct sip_route *route; /* Head of linked list of routing steps (fm Record-Route) */
215 char remote_party_id[256];
217 char context[AST_MAX_EXTENSION];
218 char fromdomain[AST_MAX_EXTENSION]; /* Domain to show in the from field */
219 char fromuser[AST_MAX_EXTENSION]; /* Domain to show in the user field */
220 char tohost[AST_MAX_EXTENSION]; /* Host we should put in the "to" field */
221 char language[MAX_LANGUAGE];
222 char rdnis[256]; /* Referring DNIS */
223 char theirtag[256]; /* Their tag */
226 char uri[256]; /* Original requested URI */
227 char peersecret[256];
228 char peermd5secret[256];
229 char callerid[256]; /* Caller*ID */
230 int restrictcid; /* hide presentation from remote user */
232 char accountcode[20]; /* Account code */
233 char our_contact[256]; /* Our contact header */
234 char realm[256]; /* Authorization realm */
235 char nonce[256]; /* Authorization nonce */
236 char domain[256]; /* Authorization nonce */
237 char lastmsg[256]; /* Last Message sent/received */
238 int amaflags; /* AMA Flags */
239 int pendinginvite; /* Any pending invite */
240 int pendingbye; /* Need to send bye after we ack? */
241 struct sip_request initreq; /* Initial request */
243 int maxtime; /* Max time for first response */
244 int initid; /* Auto-congest ID if appropriate */
245 int autokillid; /* Auto-kill ID */
254 struct sip_peer *peerpoke; /* If this calls is to poke a peer, which one */
255 struct sip_registry *registry; /* If this is a REGISTER call, to which registry */
256 struct ast_rtp *rtp; /* RTP Session */
257 struct ast_rtp *vrtp; /* Video RTP session */
258 struct sip_pkt *packets; /* Packets scheduled for re-transmission */
259 struct sip_pvt *next;
263 struct sip_pkt *next; /* Next packet */
264 int retrans; /* Retransmission number */
265 int seqno; /* Sequence number */
266 int resp; /* non-zero if this is a response packet (e.g. 200 OK) */
267 struct sip_pvt *owner; /* Owner call */
268 int retransid; /* Retransmission ID */
269 int packetlen; /* Length of packet */
274 /* Users who can access various contexts */
281 char accountcode[20];
282 char language[MAX_LANGUAGE];
283 unsigned int callgroup;
284 unsigned int pickupgroup;
298 struct sip_user *next;
305 char context[80]; /* JK02: peers need context too to allow parking etc */
311 char mailbox[AST_MAX_EXTENSION];
321 unsigned int callgroup;
322 unsigned int pickupgroup;
324 struct sockaddr_in addr;
328 struct sip_pvt *call; /* Call pointer */
329 int pokeexpire; /* When to expire poke */
330 int lastms; /* How long last response took (in ms), or -1 for no response */
331 int maxms; /* Max ms we will accept for the host to be up, 0 to not monitor */
332 struct timeval ps; /* Ping send time */
334 struct sockaddr_in defaddr;
338 struct sip_peer *next;
341 static struct ast_user_list {
342 struct sip_user *users;
344 } userl = { NULL, AST_MUTEX_INITIALIZER };
346 static struct ast_peer_list {
347 struct sip_peer *peers;
349 } peerl = { NULL, AST_MUTEX_INITIALIZER };
352 #define REG_STATE_UNREGISTERED 0
353 #define REG_STATE_REGSENT 1
354 #define REG_STATE_AUTHSENT 2
355 #define REG_STATE_REGISTERED 3
356 #define REG_STATE_REJECTED 4
357 #define REG_STATE_TIMEOUT 5
358 #define REG_STATE_NOAUTH 6
360 struct sip_registry {
361 ast_mutex_t lock; /* Channel private lock */
362 struct sockaddr_in addr; /* Who we connect to for registration purposes */
363 char username[80]; /* Who we are registering as */
364 char authuser[80]; /* Who we *authenticate* as */
366 char secret[80]; /* Password or key name in []'s */
368 char contact[80]; /* Contact extension */
370 int expire; /* Sched ID of expiration */
371 int timeout; /* sched id of sip_reg_timeout */
372 int refresh; /* How often to refresh */
373 struct sip_pvt *call; /* create a sip_pvt structure for each outbound "registration call" in progress */
375 int callid_valid; /* 0 means we haven't chosen callid for this registry yet. */
376 char callid[80]; /* Global CallID for this registry */
377 unsigned int ocseq; /* Sequence number we got to for REGISTERs for this registry */
378 struct sockaddr_in us; /* Who the server thinks we are */
379 struct sip_registry *next;
382 #define REINVITE_INVITE 1
383 #define REINVITE_UPDATE 2
385 static int sip_do_register(struct sip_registry *r);
386 static struct sip_registry *registrations;
388 static int sipsock = -1;
389 static int globalnat = 0;
390 static int globalcanreinvite = REINVITE_INVITE;
391 static int use_external_ip = 0;
393 static struct sockaddr_in bindaddr;
395 static struct ast_frame *sip_read(struct ast_channel *ast);
396 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req);
397 static int transmit_response_with_sdp(struct sip_pvt *p, char *msg, struct sip_request *req, int retrans);
398 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *rand, int reliable);
399 static int transmit_request(struct sip_pvt *p, char *msg, int inc, int reliable);
400 static int transmit_request_with_auth(struct sip_pvt *p, char *msg, int inc, int reliable);
401 static int transmit_invite(struct sip_pvt *p, char *msg, int sendsdp, char *auth, char *vxml_url,char *distinctive_ring, int init);
402 static int transmit_reinvite_with_sdp(struct sip_pvt *p, struct ast_rtp *rtp, struct ast_rtp *vrtp);
403 static int transmit_info_with_digit(struct sip_pvt *p, char digit);
404 static int transmit_message_with_text(struct sip_pvt *p, char *text);
405 static int transmit_refer(struct sip_pvt *p, char *dest);
406 static int do_proxy_auth(struct sip_pvt *p, struct sip_request *req, char *msg, int init);
407 static char *getsipuri(char *header);
408 static void free_old_route(struct sip_route *route);
409 static int build_reply_digest(struct sip_pvt *p, char *orig_header, char *digest, int digest_len);
410 static int find_user(struct sip_pvt *fup, int event);
412 static int __sip_xmit(struct sip_pvt *p, char *data, int len)
416 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->recv, sizeof(struct sockaddr_in));
418 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->sa, sizeof(struct sockaddr_in));
420 ast_log(LOG_WARNING, "sip_xmit of %p (len %d) to %s returned %d: %s\n", data, len, inet_ntoa(p->sa.sin_addr), res, strerror(errno));
425 static void sip_destroy(struct sip_pvt *p);
427 static int ast_sip_ouraddrfor(struct in_addr *them, struct in_addr *us)
429 if (use_external_ip) {
432 if (bindaddr.sin_addr.s_addr)
433 memcpy(us, &bindaddr.sin_addr, sizeof(struct in_addr));
435 return ast_ouraddrfor(them, us);
440 static int retrans_pkt(void *data)
442 struct sip_pkt *pkt=data;
444 ast_mutex_lock(&pkt->owner->lock);
445 if (pkt->retrans < MAX_RETRANS) {
449 ast_verbose("Retransmitting #%d (NAT):\n%s\n to %s:%d\n", pkt->retrans, pkt->data, inet_ntoa(pkt->owner->recv.sin_addr), ntohs(pkt->owner->recv.sin_port));
451 ast_verbose("Retransmitting #%d (no NAT):\n%s\n to %s:%d\n", pkt->retrans, pkt->data, inet_ntoa(pkt->owner->sa.sin_addr), ntohs(pkt->owner->sa.sin_port));
453 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
456 ast_log(LOG_WARNING, "Maximum retries exceeded on call %s for seqno %d (%s)\n", pkt->owner->callid, pkt->seqno, pkt->resp ? "Response" : "Request");
458 while(pkt->owner->owner && ast_mutex_lock(&pkt->owner->owner->lock)) {
459 ast_mutex_unlock(&pkt->owner->lock);
461 ast_mutex_lock(&pkt->owner->lock);
463 if (pkt->owner->owner) {
464 /* XXX Potential deadlocK?? XXX */
465 ast_queue_hangup(pkt->owner->owner, 0);
466 ast_mutex_unlock(&pkt->owner->owner->lock);
468 /* If no owner, destroy now */
469 pkt->owner->needdestroy = 1;
473 ast_mutex_unlock(&pkt->owner->lock);
477 static int __sip_reliable_xmit(struct sip_pvt *p, int seqno, int resp, char *data, int len)
480 pkt = malloc(sizeof(struct sip_pkt) + len);
483 memset(pkt, 0, sizeof(struct sip_pkt));
484 memcpy(pkt->data, data, len);
485 pkt->packetlen = len;
486 pkt->next = p->packets;
490 /* Schedule retransmission */
491 pkt->retransid = ast_sched_add(sched, DEFAULT_RETRANS, retrans_pkt, pkt);
492 pkt->next = p->packets;
494 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
495 if (!strncasecmp(pkt->data, "INVITE", 6)) {
496 /* Note this is a pending invite */
497 p->pendinginvite = seqno;
502 static int __sip_autodestruct(void *data)
504 struct sip_pvt *p = data;
506 ast_log(LOG_DEBUG, "Auto destroying call '%s'\n", p->callid);
508 ast_log(LOG_WARNING, "Autodestruct on call '%s' with owner in place\n", p->callid);
509 ast_queue_hangup(p->owner, 0);
516 static int sip_scheddestroy(struct sip_pvt *p, int ms)
518 if (p->autokillid > -1)
519 ast_sched_del(sched, p->autokillid);
520 p->autokillid = ast_sched_add(sched, ms, __sip_autodestruct, p);
524 static int sip_cancel_destroy(struct sip_pvt *p)
526 if (p->autokillid > -1)
527 ast_sched_del(sched, p->autokillid);
532 static int __sip_ack(struct sip_pvt *p, int seqno, int resp)
534 struct sip_pkt *cur, *prev = NULL;
539 if ((cur->seqno == seqno) && (cur->resp == resp)) {
540 if (!resp && (seqno == p->pendinginvite)) {
541 ast_log(LOG_DEBUG, "Acked pending invite %d\n", p->pendinginvite);
542 p->pendinginvite = 0;
545 /* this is our baby */
547 prev->next = cur->next;
549 p->packets = cur->next;
550 if (cur->retransid > -1)
551 ast_sched_del(sched, cur->retransid);
559 ast_log(LOG_DEBUG, "Stopping retransmission on '%s' of %s %d: %s\n", p->callid, resp ? "Response" : "Request", seqno, res ? "Not Found" : "Found");
563 static int __sip_semi_ack(struct sip_pvt *p, int seqno, int resp)
569 if ((cur->seqno == seqno) && (cur->resp == resp)) {
570 /* this is our baby */
571 if (cur->retransid > -1)
572 ast_sched_del(sched, cur->retransid);
579 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");
583 static int send_response(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
588 ast_verbose("%sTransmitting (NAT):\n%s\n to %s:%d\n", reliable ? "Reliably " : "", req->data, inet_ntoa(p->recv.sin_addr), ntohs(p->recv.sin_port));
590 ast_verbose("%sTransmitting (no NAT):\n%s\n to %s:%d\n", reliable ? "Reliably " : "", req->data, inet_ntoa(p->sa.sin_addr), ntohs(p->sa.sin_port));
593 res = __sip_reliable_xmit(p, seqno, 1, req->data, req->len);
595 res = __sip_xmit(p, req->data, req->len);
601 static int send_request(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
606 ast_verbose("%sTransmitting:\n%s (NAT) to %s:%d\n", reliable ? "Reliably " : "", req->data, inet_ntoa(p->recv.sin_addr), ntohs(p->recv.sin_port));
608 ast_verbose("%sTransmitting:\n%s (no NAT) to %s:%d\n", reliable ? "Reliably " : "", req->data, inet_ntoa(p->sa.sin_addr), ntohs(p->sa.sin_port));
611 res = __sip_reliable_xmit(p, seqno, 0, req->data, req->len);
613 res = __sip_xmit(p, req->data, req->len);
617 static char *ditch_braces(char *tmp)
622 if ((n = strchr(tmp, '<')) ) {
624 while(*c && *c != '>') c++;
626 ast_log(LOG_WARNING, "No closing brace in '%s'\n", tmp);
635 static int sip_sendtext(struct ast_channel *ast, char *text)
637 struct sip_pvt *p = ast->pvt->pvt;
639 ast_verbose("Sending text %s on %s\n", text, ast->name);
642 if (!text || !strlen(text))
645 ast_verbose("Really sending text %s on %s\n", text, ast->name);
646 transmit_message_with_text(p, text);
650 static int create_addr(struct sip_pvt *r, char *peer)
657 char host[256], *hostn;
659 r->sa.sin_family = AF_INET;
660 ast_mutex_lock(&peerl.lock);
663 if (!strcasecmp(p->name, peer)) {
665 r->capability = p->capability;
668 ast_log(LOG_DEBUG, "Setting NAT on RTP to %d\n", r->nat);
669 ast_rtp_setnat(r->rtp, r->nat);
672 ast_log(LOG_DEBUG, "Setting NAT on VRTP to %d\n", r->nat);
673 ast_rtp_setnat(r->vrtp, r->nat);
675 strncpy(r->peername, p->username, sizeof(r->peername)-1);
676 strncpy(r->peersecret, p->secret, sizeof(r->peersecret)-1);
677 strncpy(r->peermd5secret, p->md5secret, sizeof(r->peermd5secret)-1);
678 strncpy(r->username, p->username, sizeof(r->username)-1);
679 strncpy(r->tohost, p->tohost, sizeof(r->tohost)-1);
680 if (!strlen(r->tohost)) {
681 if (p->addr.sin_addr.s_addr)
682 snprintf(r->tohost, sizeof(r->tohost), inet_ntoa(p->addr.sin_addr));
684 snprintf(r->tohost, sizeof(r->tohost), inet_ntoa(p->defaddr.sin_addr));
686 if (strlen(p->fromdomain))
687 strncpy(r->fromdomain, p->fromdomain, sizeof(r->fromdomain)-1);
688 if (strlen(p->fromuser))
689 strncpy(r->fromuser, p->fromuser, sizeof(r->fromuser)-1);
690 r->insecure = p->insecure;
691 r->canreinvite = p->canreinvite;
692 r->maxtime = p->maxms;
693 r->callgroup = p->callgroup;
694 r->pickupgroup = p->pickupgroup;
696 r->dtmfmode = p->dtmfmode;
697 if (r->dtmfmode & SIP_DTMF_RFC2833)
698 r->noncodeccapability |= AST_RTP_DTMF;
700 r->noncodeccapability &= ~AST_RTP_DTMF;
702 strncpy(r->context, p->context,sizeof(r->context)-1);
703 if ((p->addr.sin_addr.s_addr || p->defaddr.sin_addr.s_addr) &&
704 (!p->maxms || ((p->lastms > 0) && (p->lastms <= p->maxms)))) {
705 if (p->addr.sin_addr.s_addr) {
706 r->sa.sin_addr = p->addr.sin_addr;
707 r->sa.sin_port = p->addr.sin_port;
709 r->sa.sin_addr = p->defaddr.sin_addr;
710 r->sa.sin_port = p->defaddr.sin_port;
712 memcpy(&r->recv, &r->sa, sizeof(r->recv));
718 ast_mutex_unlock(&peerl.lock);
720 if ((port=strchr(peer, ':'))) {
728 portno = DEFAULT_SIP_PORT;
733 snprintf(service, sizeof(service), "_sip._udp.%s", peer);
734 ret = ast_get_srv(NULL, host, sizeof(host), &tportno, service);
740 hp = gethostbyname(hostn);
742 strncpy(r->tohost, peer, sizeof(r->tohost) - 1);
743 memcpy(&r->sa.sin_addr, hp->h_addr, sizeof(r->sa.sin_addr));
744 r->sa.sin_port = htons(portno);
745 memcpy(&r->recv, &r->sa, sizeof(r->recv));
748 ast_log(LOG_WARNING, "No such host: %s\n", peer);
757 static int auto_congest(void *nothing)
759 struct sip_pvt *p = nothing;
760 ast_mutex_lock(&p->lock);
763 if (!ast_mutex_trylock(&p->owner->lock)) {
764 ast_log(LOG_NOTICE, "Auto-congesting %s\n", p->owner->name);
765 ast_queue_control(p->owner, AST_CONTROL_CONGESTION, 0);
766 ast_mutex_unlock(&p->owner->lock);
769 ast_mutex_unlock(&p->lock);
773 static void sip_prefs_free(void)
775 struct sip_codec_pref *cur, *next;
785 static void sip_pref_remove(int format)
787 struct sip_codec_pref *cur, *prev=NULL;
790 if (cur->codec == format) {
792 prev->next = cur->next;
803 static int sip_pref_append(int format)
805 struct sip_codec_pref *cur, *tmp;
806 sip_pref_remove(format);
807 tmp = (struct sip_codec_pref *)malloc(sizeof(struct sip_codec_pref));
810 memset(tmp, 0, sizeof(struct sip_codec_pref));
822 static int sip_codec_choose(int formats)
824 struct sip_codec_pref *cur;
825 formats &= (AST_FORMAT_MAX_AUDIO - 1);
828 if (formats & cur->codec)
832 return ast_best_codec(formats);
835 static int sip_call(struct ast_channel *ast, char *dest, int timeout)
839 char *vxml_url = NULL;
840 char *distinctive_ring = NULL;
841 struct varshead *headp;
842 struct ast_var_t *current;
845 if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) {
846 ast_log(LOG_WARNING, "sip_call called on %s, neither down nor reserved\n", ast->name);
849 /* Check whether there is vxml_url, distinctive ring variables */
851 headp=&ast->varshead;
852 AST_LIST_TRAVERSE(headp,current,entries) {
853 /* Check whether there is a VXML_URL variable */
854 if (strcasecmp(ast_var_name(current),"VXML_URL")==0)
856 vxml_url = ast_var_value(current);
859 /* Check whether there is a ALERT_INFO variable */
860 if (strcasecmp(ast_var_name(current),"ALERT_INFO")==0)
862 distinctive_ring = ast_var_value(current);
869 ast_log(LOG_DEBUG, "Outgoing Call for %s\n", p->username);
870 res = find_user(p,INC_OUT_USE);
871 p->restrictcid = ast->restrictcid;
872 p->jointcapability = p->capability;
873 transmit_invite(p, "INVITE", 1, NULL, vxml_url,distinctive_ring, 1);
875 /* Initialize auto-congest time */
876 p->initid = ast_sched_add(sched, p->maxtime * 2, auto_congest, p);
881 static void __sip_destroy(struct sip_pvt *p, int lockowner)
883 struct sip_pvt *cur, *prev = NULL;
886 ast_log(LOG_DEBUG, "Destorying call '%s'\n", p->callid);
888 ast_extension_state_del(p->stateid, NULL);
890 ast_sched_del(sched, p->initid);
891 if (p->autokillid > -1)
892 ast_sched_del(sched, p->autokillid);
895 ast_rtp_destroy(p->rtp);
898 ast_rtp_destroy(p->vrtp);
901 free_old_route(p->route);
905 /* Carefully unlink from registry */
906 struct sip_registry *reg;
909 if ((reg == p->registry) && (p->registry->call == p))
910 p->registry->call=NULL;
914 /* Unlink us from the owner if we have one */
917 ast_mutex_lock(&p->owner->lock);
918 ast_log(LOG_DEBUG, "Detaching from %s\n", p->owner->name);
919 p->owner->pvt->pvt = NULL;
921 ast_mutex_unlock(&p->owner->lock);
927 prev->next = cur->next;
936 ast_log(LOG_WARNING, "%p is not in list?!?! \n", cur);
939 ast_sched_del(sched, p->initid);
940 while((cp = p->packets)) {
941 p->packets = p->packets->next;
942 if (cp->retransid > -1)
943 ast_sched_del(sched, cp->retransid);
950 static int find_user(struct sip_pvt *fup, int event)
954 strncpy(name, fup->username, sizeof(name) - 1);
955 ast_mutex_lock(&userl.lock);
958 if (!strcasecmp(u->name, name)) {
964 ast_log(LOG_DEBUG, "%s is not a local user\n", name);
965 ast_mutex_unlock(&userl.lock);
970 if ( u->inUse > 0 ) {
977 if (u->incominglimit > 0 ) {
978 if (u->inUse >= u->incominglimit) {
979 ast_log(LOG_ERROR, "Call from user '%s' rejected due to usage limit of %d\n", u->name, u->incominglimit);
980 ast_mutex_unlock(&userl.lock);
985 ast_log(LOG_DEBUG, "Call from user '%s' is %d out of %d\n", u->name, u->inUse, u->incominglimit);
988 if ( u->outUse > 0 ) {
995 if ( u->outgoinglimit > 0 ) {
996 if ( u->outUse >= u->outgoinglimit ) {
997 ast_log(LOG_ERROR, "Outgoing call from user '%s' rejected due to usage limit of %d\n", u->name, u->outgoinglimit);
998 ast_mutex_unlock(&userl.lock);
1005 ast_log(LOG_ERROR, "find_user(%s,%d) called with no event!\n",u->name,event);
1007 ast_mutex_unlock(&userl.lock);
1011 static void sip_destroy(struct sip_pvt *p)
1013 ast_mutex_lock(&iflock);
1014 __sip_destroy(p, 1);
1015 ast_mutex_unlock(&iflock);
1018 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req);
1020 static int hangup_sip2cause(int cause)
1025 return AST_CAUSE_BUSY;
1027 return AST_CAUSE_NORMAL;
1033 static char *hangup_cause2sip(int cause)
1037 case AST_CAUSE_BUSY:
1046 static int sip_hangup(struct ast_channel *ast)
1048 struct sip_pvt *p = ast->pvt->pvt;
1050 int needdestroy = 0;
1052 ast_log(LOG_DEBUG, "sip_hangup(%s)\n", ast->name);
1053 if (!ast->pvt->pvt) {
1054 ast_log(LOG_DEBUG, "Asked to hangup channel not connected\n");
1057 ast_mutex_lock(&p->lock);
1058 if ( p->outgoing ) {
1059 ast_log(LOG_DEBUG, "find_user(%s) - decrement outUse counter\n", p->username);
1060 find_user(p, DEC_OUT_USE);
1062 ast_log(LOG_DEBUG, "find_user(%s) - decrement inUse counter\n", p->username);
1063 find_user(p, DEC_IN_USE);
1065 /* Determine how to disconnect */
1066 if (p->owner != ast) {
1067 ast_log(LOG_WARNING, "Huh? We aren't the owner?\n");
1068 ast_mutex_unlock(&p->lock);
1071 if (!ast || (ast->_state != AST_STATE_UP))
1076 ast_dsp_free(p->vad);
1079 ast->pvt->pvt = NULL;
1081 ast_mutex_lock(&usecnt_lock);
1083 ast_mutex_unlock(&usecnt_lock);
1084 ast_update_use_count();
1087 /* Start the process if it's not already started */
1088 if (!p->alreadygone && strlen(p->initreq.data)) {
1091 transmit_request_with_auth(p, "CANCEL", p->ocseq, 1);
1092 /* Actually don't destroy us yet, wait for the 487 on our original
1093 INVITE, but do set an autodestruct just in case. */
1095 sip_scheddestroy(p, 15000);
1098 if (ast->hangupcause && ((res = hangup_cause2sip(ast->hangupcause)))) {
1099 transmit_response_reliable(p, res, &p->initreq);
1101 transmit_response_reliable(p, "403 Forbidden", &p->initreq);
1104 if (!p->pendinginvite) {
1106 transmit_request_with_auth(p, "BYE", 0, 1);
1108 /* Note we will need a BYE when this all settles out
1109 but we can't send one while we have "INVITE" outstanding. */
1114 p->needdestroy = needdestroy;
1115 ast_mutex_unlock(&p->lock);
1119 static int sip_answer(struct ast_channel *ast)
1123 struct sip_pvt *p = ast->pvt->pvt;
1126 if (ast->_state != AST_STATE_UP) {
1130 codec=pbx_builtin_getvar_helper(p->owner,"SIP_CODEC");
1132 fmt=ast_getformatbyname(codec);
1134 ast_log(LOG_NOTICE, "Changing codec to '%s' for this call because of ${SIP_CODEC) variable\n",codec);
1136 } else ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because of unrecognized/not configured codec (check allow/disallow in sip.conf): %s\n",codec);
1139 ast_setstate(ast, AST_STATE_UP);
1141 ast_log(LOG_DEBUG, "sip_answer(%s)\n", ast->name);
1142 res = transmit_response_with_sdp(p, "200 OK", &p->initreq, 1);
1147 static int sip_write(struct ast_channel *ast, struct ast_frame *frame)
1149 struct sip_pvt *p = ast->pvt->pvt;
1151 if (frame->frametype == AST_FRAME_VOICE) {
1152 if (!(frame->subclass & ast->nativeformats)) {
1153 ast_log(LOG_WARNING, "Asked to transmit frame type %d, while native formats is %d (read/write = %d/%d)\n",
1154 frame->subclass, ast->nativeformats, ast->readformat, ast->writeformat);
1158 ast_mutex_lock(&p->lock);
1160 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1161 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1164 res = ast_rtp_write(p->rtp, frame);
1166 ast_mutex_unlock(&p->lock);
1168 } else if (frame->frametype == AST_FRAME_VIDEO) {
1170 ast_mutex_lock(&p->lock);
1172 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1173 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1176 res = ast_rtp_write(p->vrtp, frame);
1178 ast_mutex_unlock(&p->lock);
1180 } else if (frame->frametype == AST_FRAME_IMAGE) {
1183 ast_log(LOG_WARNING, "Can't send %d type frames with SIP write\n", frame->frametype);
1190 static int sip_fixup(struct ast_channel *oldchan, struct ast_channel *newchan)
1192 struct sip_pvt *p = newchan->pvt->pvt;
1193 ast_mutex_lock(&p->lock);
1194 if (p->owner != oldchan) {
1195 ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, p->owner);
1196 ast_mutex_unlock(&p->lock);
1200 ast_mutex_unlock(&p->lock);
1204 static int sip_senddigit(struct ast_channel *ast, char digit)
1206 struct sip_pvt *p = ast->pvt->pvt;
1207 if (p && (p->dtmfmode & SIP_DTMF_INFO)) {
1208 transmit_info_with_digit(p, digit);
1210 if (p && p->rtp && (p->dtmfmode & SIP_DTMF_RFC2833)) {
1211 ast_rtp_senddigit(p->rtp, digit);
1213 /* If in-band DTMF is desired, send that */
1214 if (p->dtmfmode & SIP_DTMF_INBAND)
1219 static int sip_transfer(struct ast_channel *ast, char *dest)
1221 struct sip_pvt *p = ast->pvt->pvt;
1223 res = transmit_refer(p, dest);
1227 static int sip_indicate(struct ast_channel *ast, int condition)
1229 struct sip_pvt *p = ast->pvt->pvt;
1231 case AST_CONTROL_RINGING:
1232 if (ast->_state == AST_STATE_RING) {
1233 if (!p->progress && !p->ringing) {
1234 transmit_response(p, "180 Ringing", &p->initreq);
1238 /* Oops, we've sent progress tones. Let Asterisk do it instead */
1242 case AST_CONTROL_BUSY:
1243 if (ast->_state != AST_STATE_UP) {
1244 transmit_response(p, "486 Busy Here", &p->initreq);
1246 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1250 case AST_CONTROL_CONGESTION:
1251 if (ast->_state != AST_STATE_UP) {
1252 transmit_response(p, "503 Service Unavailable", &p->initreq);
1254 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1258 case AST_CONTROL_PROGRESS:
1259 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1260 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1268 ast_log(LOG_WARNING, "Don't know how to indicate condition %d\n", condition);
1276 static struct ast_channel *sip_new(struct sip_pvt *i, int state, char *title)
1278 struct ast_channel *tmp;
1280 tmp = ast_channel_alloc(1);
1282 /* Select our native format based on codec preference until we receive
1283 something from another device to the contrary. */
1284 if (i->jointcapability)
1285 tmp->nativeformats = sip_codec_choose(i->jointcapability);
1286 else if (i->capability)
1287 tmp->nativeformats = sip_codec_choose(i->capability);
1289 tmp->nativeformats = sip_codec_choose(capability);
1290 fmt = ast_best_codec(tmp->nativeformats);
1292 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%04x", title, rand() & 0xffff);
1294 if (strchr(i->fromdomain,':'))
1296 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", strchr(i->fromdomain,':')+1, (int)(i));
1300 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", i->fromdomain, (int)(i));
1303 if (i->dtmfmode & SIP_DTMF_INBAND) {
1304 i->vad = ast_dsp_new();
1305 ast_dsp_set_features(i->vad, DSP_FEATURE_DTMF_DETECT);
1307 tmp->fds[0] = ast_rtp_fd(i->rtp);
1308 tmp->fds[1] = ast_rtcp_fd(i->rtp);
1310 tmp->fds[2] = ast_rtp_fd(i->vrtp);
1311 tmp->fds[3] = ast_rtcp_fd(i->vrtp);
1313 ast_setstate(tmp, state);
1314 if (state == AST_STATE_RING)
1316 tmp->adsicpe = AST_ADSI_UNAVAILABLE;
1317 tmp->writeformat = fmt;
1318 tmp->pvt->rawwriteformat = fmt;
1319 tmp->readformat = fmt;
1320 tmp->pvt->rawreadformat = fmt;
1322 tmp->pvt->send_text = sip_sendtext;
1323 tmp->pvt->call = sip_call;
1324 tmp->pvt->hangup = sip_hangup;
1325 tmp->pvt->answer = sip_answer;
1326 tmp->pvt->read = sip_read;
1327 tmp->pvt->write = sip_write;
1328 tmp->pvt->write_video = sip_write;
1329 tmp->pvt->indicate = sip_indicate;
1330 tmp->pvt->transfer = sip_transfer;
1331 tmp->pvt->fixup = sip_fixup;
1332 tmp->pvt->send_digit = sip_senddigit;
1334 tmp->pvt->bridge = ast_rtp_bridge;
1336 tmp->callgroup = i->callgroup;
1337 tmp->pickupgroup = i->pickupgroup;
1338 tmp->restrictcid = i->restrictcid;
1339 if (strlen(i->accountcode))
1340 strncpy(tmp->accountcode, i->accountcode, sizeof(tmp->accountcode)-1);
1342 tmp->amaflags = i->amaflags;
1343 if (strlen(i->language))
1344 strncpy(tmp->language, i->language, sizeof(tmp->language)-1);
1346 ast_mutex_lock(&usecnt_lock);
1348 ast_mutex_unlock(&usecnt_lock);
1349 ast_update_use_count();
1350 strncpy(tmp->context, i->context, sizeof(tmp->context)-1);
1351 strncpy(tmp->exten, i->exten, sizeof(tmp->exten)-1);
1352 if (strlen(i->callerid))
1353 tmp->callerid = strdup(i->callerid);
1354 if (strlen(i->rdnis))
1355 tmp->rdnis = strdup(i->rdnis);
1357 if (state != AST_STATE_DOWN) {
1358 if (ast_pbx_start(tmp)) {
1359 ast_log(LOG_WARNING, "Unable to start PBX on %s\n", tmp->name);
1365 ast_log(LOG_WARNING, "Unable to allocate channel structure\n");
1369 static struct cfalias {
1373 { "Content-Type", "c" },
1374 { "Content-Encoding", "e" },
1378 { "Content-Length", "l" },
1384 static char* get_sdp_by_line(char* line, char *name, int nameLen) {
1385 if (strncasecmp(line, name, nameLen) == 0 && line[nameLen] == '=') {
1386 char* r = line + nameLen + 1;
1387 while (*r && (*r < 33)) ++r;
1394 static char *get_sdp(struct sip_request *req, char *name) {
1396 int len = strlen(name);
1399 for (x=0; x<req->lines; x++) {
1400 r = get_sdp_by_line(req->line[x], name, len);
1401 if (r[0] != '\0') return r;
1406 static void sdpLineNum_iterator_init(int* iterator) {
1410 static char* get_sdp_iterate(int* iterator,
1411 struct sip_request *req, char *name) {
1412 int len = strlen(name);
1414 while (*iterator < req->lines) {
1415 r = get_sdp_by_line(req->line[(*iterator)++], name, len);
1416 if (r[0] != '\0') return r;
1421 static char *__get_header(struct sip_request *req, char *name, int *start)
1424 int len = strlen(name);
1426 for (x=*start;x<req->headers;x++) {
1427 if (!strncasecmp(req->header[x], name, len) &&
1428 (req->header[x][len] == ':')) {
1429 r = req->header[x] + len + 1;
1430 while(*r && (*r < 33))
1437 for (x=0;x<sizeof(aliases) / sizeof(aliases[0]); x++)
1438 if (!strcasecmp(aliases[x].fullname, name))
1439 return __get_header(req, aliases[x].shortname, start);
1441 /* Don't return NULL, so get_header is always a valid pointer */
1445 static char *get_header(struct sip_request *req, char *name)
1448 return __get_header(req, name, &start);
1451 static struct ast_frame *sip_rtp_read(struct ast_channel *ast, struct sip_pvt *p)
1453 /* Retrieve audio/etc from channel. Assumes p->lock is already held. */
1454 struct ast_frame *f;
1455 static struct ast_frame null_frame = { AST_FRAME_NULL, };
1458 f = ast_rtp_read(p->rtp);
1461 f = ast_rtcp_read(p->rtp);
1464 f = ast_rtp_read(p->vrtp);
1467 f = ast_rtcp_read(p->vrtp);
1472 /* Don't send RFC2833 if we're not supposed to */
1473 if (f && (f->frametype == AST_FRAME_DTMF) && !(p->dtmfmode & SIP_DTMF_RFC2833))
1476 /* We already hold the channel lock */
1477 if (f->frametype == AST_FRAME_VOICE) {
1478 if (f->subclass != p->owner->nativeformats) {
1479 ast_log(LOG_DEBUG, "Oooh, format changed to %d\n", f->subclass);
1480 p->owner->nativeformats = f->subclass;
1481 ast_set_read_format(p->owner, p->owner->readformat);
1482 ast_set_write_format(p->owner, p->owner->writeformat);
1484 if (p->dtmfmode & SIP_DTMF_INBAND) {
1485 f = ast_dsp_process(p->owner,p->vad,f,0);
1492 static struct ast_frame *sip_read(struct ast_channel *ast)
1494 struct ast_frame *fr;
1495 struct sip_pvt *p = ast->pvt->pvt;
1496 ast_mutex_lock(&p->lock);
1497 fr = sip_rtp_read(ast, p);
1498 ast_mutex_unlock(&p->lock);
1502 static void build_callid(char *callid, int len, struct in_addr ourip)
1509 res = snprintf(callid, len, "%08x", val);
1513 /* It's not important that we really use our right IP here... */
1514 snprintf(callid, len, "@%s", inet_ntoa(ourip));
1517 static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useglobalnat)
1521 p = malloc(sizeof(struct sip_pvt));
1524 /* Keep track of stuff */
1525 memset(p, 0, sizeof(struct sip_pvt));
1529 p->rtp = ast_rtp_new(sched, io, 1, 0);
1531 p->vrtp = ast_rtp_new(sched, io, 1, 0);
1535 /* Start with 101 instead of 1 */
1538 ast_log(LOG_WARNING, "Unable to create RTP session: %s\n", strerror(errno));
1542 ast_rtp_settos(p->rtp, tos);
1544 ast_rtp_settos(p->vrtp, tos);
1545 if (useglobalnat && sin) {
1546 /* Setup NAT structure according to global settings if we have an address */
1548 memcpy(&p->recv, sin, sizeof(p->recv));
1549 ast_rtp_setnat(p->rtp, p->nat);
1551 ast_rtp_setnat(p->vrtp, p->nat);
1553 ast_mutex_init(&p->lock);
1556 memcpy(&p->sa, sin, sizeof(p->sa));
1557 if (ast_sip_ouraddrfor(&p->sa.sin_addr,&p->ourip))
1558 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
1560 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
1562 /* z9hG4bK is a magic cookie. See RFC 3261 section 8.1.1.7 */
1563 snprintf(p->via, sizeof(p->via), "SIP/2.0/UDP %s:%d;branch=z9hG4bK%08x", inet_ntoa(p->ourip), ourport, p->branch);
1565 build_callid(p->callid, sizeof(p->callid), p->ourip);
1567 strncpy(p->callid, callid, sizeof(p->callid) - 1);
1568 /* Assume reinvite OK and via INVITE */
1569 p->canreinvite = globalcanreinvite;
1570 p->dtmfmode = globaldtmfmode;
1571 p->capability = capability;
1572 if (p->dtmfmode & SIP_DTMF_RFC2833)
1573 p->noncodeccapability |= AST_RTP_DTMF;
1574 strncpy(p->context, context, sizeof(p->context) - 1);
1575 strncpy(p->fromdomain, fromdomain, sizeof(p->fromdomain) - 1);
1577 ast_mutex_lock(&iflock);
1580 ast_mutex_unlock(&iflock);
1582 ast_log(LOG_DEBUG, "Allocating new SIP call for %s\n", callid);
1586 static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *sin)
1594 callid = get_header(req, "Call-ID");
1596 if (pedanticsipchecking) {
1597 /* In principle Call-ID's uniquely identify a call, however some vendors
1598 (i.e. Pingtel) send multiple calls with the same Call-ID and different
1599 tags in order to simplify billing. The RFC does state that we have to
1600 compare tags in addition to the call-id, but this generate substantially
1601 more overhead which is totally unnecessary for the vast majority of sane
1602 SIP implementations, and thus Asterisk does not enable this behavior
1603 by default. Short version: You'll need this option to support conferencing
1605 strncpy(tmp, req->header[0], sizeof(tmp) - 1);
1607 c = strchr(tmp, ' ');
1610 if (!strcasecmp(cmd, "SIP/2.0")) {
1616 strncpy(tmp, get_header(req, "From"), sizeof(tmp) - 1);
1618 strncpy(tmp, get_header(req, "To"), sizeof(tmp) - 1);
1619 tag = strstr(tmp, "tag=");
1622 c = strchr(tag, ';');
1629 if (!strlen(callid)) {
1630 ast_log(LOG_WARNING, "Call missing call ID from '%s'\n", inet_ntoa(sin->sin_addr));
1633 ast_mutex_lock(&iflock);
1636 if (!strcmp(p->callid, callid) &&
1637 (!pedanticsipchecking || !tag || !strlen(p->theirtag) || !strcmp(p->theirtag, tag))) {
1638 /* Found the call */
1639 ast_mutex_lock(&p->lock);
1640 ast_mutex_unlock(&iflock);
1645 ast_mutex_unlock(&iflock);
1646 p = sip_alloc(callid, sin, 1);
1648 ast_mutex_lock(&p->lock);
1652 static int sip_register(char *value, int lineno)
1654 struct sip_registry *reg;
1655 char copy[256] = "";
1656 char *username=NULL, *hostname=NULL, *secret=NULL, *authuser=NULL;
1664 strncpy(copy, value, sizeof(copy)-1);
1667 hostname = strrchr(stringp, '@');
1672 if (!username || !strlen(username) || !hostname || !strlen(hostname)) {
1673 ast_log(LOG_WARNING, "Format for registration is user[:secret[:authuser]]@host[:port][/contact] at line %d", lineno);
1677 username = strsep(&stringp, ":");
1679 secret = strsep(&stringp, ":");
1681 authuser = strsep(&stringp, ":");
1684 hostname = strsep(&stringp, "/");
1686 contact = strsep(&stringp, "/");
1687 if (!contact || !strlen(contact))
1690 hostname = strsep(&stringp, ":");
1691 porta = strsep(&stringp, ":");
1693 if (porta && !atoi(porta)) {
1694 ast_log(LOG_WARNING, "%s is not a valid port number at line %d\n", porta, lineno);
1697 hp = gethostbyname(hostname);
1699 ast_log(LOG_WARNING, "Host '%s' not found at line %d\n", hostname, lineno);
1702 reg = malloc(sizeof(struct sip_registry));
1704 memset(reg, 0, sizeof(struct sip_registry));
1705 strncpy(reg->contact, contact, sizeof(reg->contact) - 1);
1707 strncpy(reg->username, username, sizeof(reg->username)-1);
1709 strncpy(reg->hostname, hostname, sizeof(reg->hostname)-1);
1711 strncpy(reg->authuser, authuser, sizeof(reg->authuser)-1);
1713 strncpy(reg->secret, secret, sizeof(reg->secret)-1);
1716 reg->refresh = default_expiry;
1717 reg->addr.sin_family = AF_INET;
1718 memcpy(®->addr.sin_addr, hp->h_addr, sizeof(®->addr.sin_addr));
1719 reg->addr.sin_port = porta ? htons(atoi(porta)) : htons(DEFAULT_SIP_PORT);
1720 reg->next = registrations;
1721 reg->callid_valid = 0;
1723 registrations = reg;
1725 ast_log(LOG_ERROR, "Out of memory\n");
1731 static void parse(struct sip_request *req)
1733 /* Divide fields by NULL's */
1738 /* First header starts immediately */
1742 /* We've got a new header */
1746 printf("Header: %s (%d)\n", req->header[f], strlen(req->header[f]));
1748 if (!strlen(req->header[f])) {
1749 /* Line by itself means we're now in content */
1753 if (f >= SIP_MAX_HEADERS - 1) {
1754 ast_log(LOG_WARNING, "Too many SIP headers...\n");
1757 req->header[f] = c + 1;
1758 } else if (*c == '\r') {
1759 /* Ignore but eliminate \r's */
1764 /* Check for last header */
1765 if (strlen(req->header[f]))
1768 /* Now we process any mime content */
1773 /* We've got a new line */
1776 printf("Line: %s (%d)\n", req->line[f], strlen(req->line[f]));
1778 if (f >= SIP_MAX_LINES - 1) {
1779 ast_log(LOG_WARNING, "Too many SDP lines...\n");
1782 req->line[f] = c + 1;
1783 } else if (*c == '\r') {
1784 /* Ignore and eliminate \r's */
1789 /* Check for last line */
1790 if (strlen(req->line[f]))
1794 ast_verbose("%d headers, %d lines\n", req->headers, req->lines);
1796 ast_log(LOG_WARNING, "Odd content, extra stuff left over ('%s')\n", c);
1799 static int process_sdp(struct sip_pvt *p, struct sip_request *req)
1808 int peercapability, peernoncodeccapability;
1809 int vpeercapability=0, vpeernoncodeccapability=0;
1810 struct sockaddr_in sin;
1817 /* Get codec and RTP info from SDP */
1818 if (strcasecmp(get_header(req, "Content-Type"), "application/sdp")) {
1819 ast_log(LOG_NOTICE, "Content is '%s', not 'application/sdp'\n", get_header(req, "Content-Type"));
1822 m = get_sdp(req, "m");
1823 c = get_sdp(req, "c");
1824 if (!strlen(m) || !strlen(c)) {
1825 ast_log(LOG_WARNING, "Insufficient information for SDP (m = '%s', c = '%s')\n", m, c);
1828 if (sscanf(c, "IN IP4 %256s", host) != 1) {
1829 ast_log(LOG_WARNING, "Invalid host in c= line, '%s'\n", c);
1832 /* XXX This could block for a long time, and block the main thread! XXX */
1833 hp = gethostbyname(host);
1835 ast_log(LOG_WARNING, "Unable to lookup host in c= line, '%s'\n", c);
1838 sdpLineNum_iterator_init(&iterator);
1839 while ((m = get_sdp_iterate(&iterator, req, "m"))[0] != '\0') {
1840 if ((sscanf(m, "audio %d RTP/AVP %n", &x, &len) == 1)) {
1842 // Scan through the RTP payload types specified in a "m=" line:
1843 ast_rtp_pt_clear(p->rtp);
1845 while(strlen(codecs)) {
1846 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
1847 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
1851 ast_verbose("Found audio format %s\n", ast_getformatname(codec));
1852 ast_rtp_set_m_type(p->rtp, codec);
1854 /* Skip over any whitespace */
1855 while(*codecs && (*codecs < 33)) codecs++;
1858 if (p->vrtp && (sscanf(m, "video %d RTP/AVP %n", &x, &len) == 1)) {
1860 // Scan through the RTP payload types specified in a "m=" line:
1861 ast_rtp_pt_clear(p->vrtp);
1863 while(strlen(codecs)) {
1864 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
1865 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
1869 ast_verbose("Found video format %s\n", ast_getformatname(codec));
1870 ast_rtp_set_m_type(p->vrtp, codec);
1872 /* Skip over any whitespace */
1873 while(*codecs && (*codecs < 33)) codecs++;
1877 sin.sin_family = AF_INET;
1878 memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
1879 /* Setup audio port number */
1880 sin.sin_port = htons(portno);
1881 if (p->rtp && sin.sin_port)
1882 ast_rtp_set_peer(p->rtp, &sin);
1883 /* Setup video port number */
1884 sin.sin_port = htons(vportno);
1885 if (p->vrtp && sin.sin_port)
1886 ast_rtp_set_peer(p->vrtp, &sin);
1888 printf("Peer RTP is at port %s:%d\n", inet_ntoa(sin.sin_addr), ntohs(sin.sin_port));
1890 // Next, scan through each "a=rtpmap:" line, noting each
1891 // specified RTP payload type (with corresponding MIME subtype):
1892 sdpLineNum_iterator_init(&iterator);
1893 while ((a = get_sdp_iterate(&iterator, req, "a"))[0] != '\0') {
1894 char* mimeSubtype = ast_strdupa(a); // ensures we have enough space
1895 if (sscanf(a, "rtpmap: %u %[^/]/", &codec, mimeSubtype) != 2) continue;
1897 ast_verbose("Found description format %s\n", mimeSubtype);
1898 // Note: should really look at the 'freq' and '#chans' params too
1899 ast_rtp_set_rtpmap_type(p->rtp, codec, "audio", mimeSubtype);
1901 ast_rtp_set_rtpmap_type(p->vrtp, codec, "video", mimeSubtype);
1904 // Now gather all of the codecs that were asked for:
1905 ast_rtp_get_current_formats(p->rtp,
1906 &peercapability, &peernoncodeccapability);
1908 ast_rtp_get_current_formats(p->vrtp,
1909 &vpeercapability, &vpeernoncodeccapability);
1910 p->jointcapability = p->capability & (peercapability | vpeercapability);
1911 p->noncodeccapability = noncodeccapability & (peernoncodeccapability | vpeernoncodeccapability);
1914 ast_verbose("Capabilities: us - %d, them - %d/%d, combined - %d\n",
1915 p->capability, peercapability, vpeercapability, p->jointcapability);
1916 ast_verbose("Non-codec capabilities: us - %d, them - %d, combined - %d\n",
1917 noncodeccapability, peernoncodeccapability,
1918 p->noncodeccapability);
1920 if (!p->jointcapability) {
1921 ast_log(LOG_WARNING, "No compatible codecs!\n");
1925 if (!(p->owner->nativeformats & p->jointcapability)) {
1926 ast_log(LOG_DEBUG, "Oooh, we need to change our formats since our peer supports only %d and not %d\n", p->jointcapability, p->owner->nativeformats);
1927 p->owner->nativeformats = sip_codec_choose(p->jointcapability);
1928 ast_set_read_format(p->owner, p->owner->readformat);
1929 ast_set_write_format(p->owner, p->owner->writeformat);
1931 if (p->owner->bridge) {
1932 /* Turn on/off music on hold if we are holding/unholding */
1933 if (sin.sin_addr.s_addr) {
1934 ast_moh_stop(p->owner->bridge);
1936 ast_moh_start(p->owner->bridge, NULL);
1944 static int add_header(struct sip_request *req, char *var, char *value)
1946 if (req->len >= sizeof(req->data) - 4) {
1947 ast_log(LOG_WARNING, "Out of space, can't add anymore (%s:%s)\n", var, value);
1951 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
1954 req->header[req->headers] = req->data + req->len;
1955 snprintf(req->header[req->headers], sizeof(req->data) - req->len - 4, "%s: %s\r\n", var, value);
1956 req->len += strlen(req->header[req->headers]);
1957 if (req->headers < SIP_MAX_HEADERS)
1960 ast_log(LOG_WARNING, "Out of header space\n");
1966 static int add_blank_header(struct sip_request *req)
1968 if (req->len >= sizeof(req->data) - 4) {
1969 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
1973 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
1976 req->header[req->headers] = req->data + req->len;
1977 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "\r\n");
1978 req->len += strlen(req->header[req->headers]);
1979 if (req->headers < SIP_MAX_HEADERS)
1982 ast_log(LOG_WARNING, "Out of header space\n");
1988 static int add_line(struct sip_request *req, char *line)
1990 if (req->len >= sizeof(req->data) - 4) {
1991 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
1995 /* Add extra empty return */
1996 snprintf(req->data + req->len, sizeof(req->data) - req->len, "\r\n");
1997 req->len += strlen(req->data + req->len);
1999 req->line[req->lines] = req->data + req->len;
2000 snprintf(req->line[req->lines], sizeof(req->data) - req->len, "%s", line);
2001 req->len += strlen(req->line[req->lines]);
2002 if (req->lines < SIP_MAX_LINES)
2005 ast_log(LOG_WARNING, "Out of line space\n");
2011 static int copy_header(struct sip_request *req, struct sip_request *orig, char *field)
2014 tmp = get_header(orig, field);
2016 /* Add what we're responding to */
2017 return add_header(req, field, tmp);
2019 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2023 static int copy_all_header(struct sip_request *req, struct sip_request *orig, char *field)
2029 tmp = __get_header(orig, field, &start);
2031 /* Add what we're responding to */
2032 add_header(req, field, tmp);
2037 return copied ? 0 : -1;
2040 static int copy_via_headers(struct sip_pvt *p, struct sip_request *req, struct sip_request *orig, char *field)
2047 tmp = __get_header(orig, field, &start);
2049 if (!copied && p->nat) {
2050 #ifdef THE_SIP_AUTHORS_CAN_SUCK_MY_GONADS
2051 /* SLD: FIXME: Nice try, but the received= should not have a port */
2052 /* SLD: FIXME: See RFC2543 BNF in Section 6.40.5 */
2053 /* MAS: Yup, RFC says you can't do it. No way to indicate PAT...
2055 if (ntohs(p->recv.sin_port) != DEFAULT_SIP_PORT)
2056 snprintf(new, sizeof(new), "%s;received=%s:%d", tmp, inet_ntoa(p->recv.sin_addr), ntohs(p->recv.sin_port));
2059 snprintf(new, sizeof(new), "%s;received=%s", tmp, inet_ntoa(p->recv.sin_addr));
2060 add_header(req, field, new);
2062 /* Add what we're responding to */
2063 add_header(req, field, tmp);
2070 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2076 /* Add Route: header into request per learned route */
2077 static void add_route(struct sip_request *req, struct sip_route *route)
2080 int n, rem = 255; /* sizeof(r)-1: Room for terminating 0 */
2086 n = strlen(route->hop);
2087 if ((n+3)>rem) break;
2093 strcpy(p, route->hop); p += n;
2096 route = route->next;
2099 add_header(req, "Route", r);
2102 static void set_destination(struct sip_pvt *p, char *uri)
2104 char *h, *maddr, hostname[256];
2108 /* Parse uri to h (host) and port - uri is already just the part inside the <> */
2109 /* general form we are expecting is sip[s]:username[:password]@host[:port][;...] */
2112 ast_verbose("set_destination: Parsing <%s> for address/port to send to\n", uri);
2114 /* Find and parse hostname */
2115 h = strchr(uri, '@');
2120 if (strncmp(h, "sip:", 4) == 0)
2122 else if (strncmp(h, "sips:", 5) == 0)
2125 hn = strcspn(h, ":;>");
2127 strncpy(hostname, h, hn); hostname[hn] = '\0';
2130 /* Is "port" present? if not default to 5060 */
2134 port = strtol(h, &h, 10);
2139 /* Got the hostname:port - but maybe there's a "maddr=" to override address? */
2140 maddr = strstr(h, "maddr=");
2143 hn = strspn(maddr, "0123456789.");
2145 strncpy(hostname, maddr, hn); hostname[hn] = '\0';
2148 hp = gethostbyname(hostname);
2150 ast_log(LOG_WARNING, "Can't find address for host '%s'\n", hostname);
2153 p->sa.sin_family = AF_INET;
2154 memcpy(&p->sa.sin_addr, hp->h_addr, sizeof(p->sa.sin_addr));
2155 p->sa.sin_port = htons(port);
2157 ast_verbose("set_destination: set destination to %s, port %d\n", inet_ntoa(p->sa.sin_addr), port);
2160 static int init_resp(struct sip_request *req, char *resp, struct sip_request *orig)
2162 /* Initialize a response */
2163 if (req->headers || req->len) {
2164 ast_log(LOG_WARNING, "Request already initialized?!?\n");
2167 req->header[req->headers] = req->data + req->len;
2168 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "SIP/2.0 %s\r\n", resp);
2169 req->len += strlen(req->header[req->headers]);
2170 if (req->headers < SIP_MAX_HEADERS)
2173 ast_log(LOG_WARNING, "Out of header space\n");
2177 static int init_req(struct sip_request *req, char *resp, char *recip)
2179 /* Initialize a response */
2180 if (req->headers || req->len) {
2181 ast_log(LOG_WARNING, "Request already initialized?!?\n");
2184 req->header[req->headers] = req->data + req->len;
2185 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "%s %s SIP/2.0\r\n", resp, recip);
2186 req->len += strlen(req->header[req->headers]);
2187 if (req->headers < SIP_MAX_HEADERS)
2190 ast_log(LOG_WARNING, "Out of header space\n");
2194 static int respprep(struct sip_request *resp, struct sip_pvt *p, char *msg, struct sip_request *req)
2196 char newto[256] = "", *ot;
2197 memset(resp, 0, sizeof(*resp));
2198 init_resp(resp, msg, req);
2199 copy_via_headers(p, resp, req, "Via");
2200 if (msg[0] == '2') copy_all_header(resp, req, "Record-Route");
2201 copy_header(resp, req, "From");
2202 ot = get_header(req, "To");
2203 if (!strstr(ot, "tag=")) {
2204 /* Add the proper tag if we don't have it already. If they have specified
2205 their tag, use it. Otherwise, use our own tag */
2206 if (strlen(p->theirtag) && p->outgoing)
2207 snprintf(newto, sizeof(newto), "%s;tag=%s", ot, p->theirtag);
2208 else if (p->tag && !p->outgoing)
2209 snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag);
2211 strncpy(newto, ot, sizeof(newto) - 1);
2214 add_header(resp, "To", ot);
2215 copy_header(resp, req, "Call-ID");
2216 copy_header(resp, req, "CSeq");
2217 add_header(resp, "User-Agent", "Asterisk PBX");
2218 add_header(resp, "Allow", ALLOWED_METHODS);
2220 /* For registration responses, we also need expiry and
2224 snprintf(contact, sizeof(contact), "%s;expires=%d", p->our_contact, p->expiry);
2225 snprintf(tmp, sizeof(tmp), "%d", p->expiry);
2226 add_header(resp, "Expires", tmp);
2227 add_header(resp, "Contact", contact);
2229 add_header(resp, "Contact", p->our_contact);
2234 static int reqprep(struct sip_request *req, struct sip_pvt *p, char *msg, int seqno)
2236 struct sip_request *orig = &p->initreq;
2237 char stripped[80] ="";
2243 memset(req, 0, sizeof(struct sip_request));
2245 snprintf(p->lastmsg, sizeof(p->lastmsg), "Tx: %s", msg);
2252 if (strlen(p->uri)) {
2256 strncpy(stripped, get_header(orig, "To"), sizeof(stripped) - 1);
2258 strncpy(stripped, get_header(orig, "From"), sizeof(stripped) - 1);
2260 c = strchr(stripped, '<');
2272 init_req(req, msg, c);
2274 snprintf(tmp, sizeof(tmp), "%d %s", seqno, msg);
2276 add_header(req, "Via", p->via);
2278 set_destination(p, p->route->hop);
2279 add_route(req, p->route->next);
2282 ot = get_header(orig, "To");
2283 of = get_header(orig, "From");
2285 /* Add tag *unless* this is a CANCEL, in which case we need to send it exactly
2286 as our original request, including tag (or presumably lack thereof) */
2287 if (!strstr(ot, "tag=") && strcasecmp(msg, "CANCEL")) {
2288 /* Add the proper tag if we don't have it already. If they have specified
2289 their tag, use it. Otherwise, use our own tag */
2290 if (p->outgoing && strlen(p->theirtag))
2291 snprintf(newto, sizeof(newto), "%s;tag=%s", ot, p->theirtag);
2292 else if (!p->outgoing)
2293 snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag);
2295 snprintf(newto, sizeof(newto), "%s", ot);
2300 add_header(req, "From", of);
2301 add_header(req, "To", ot);
2303 add_header(req, "From", ot);
2304 add_header(req, "To", of);
2306 add_header(req, "Contact", p->our_contact);
2307 copy_header(req, orig, "Call-ID");
2308 add_header(req, "CSeq", tmp);
2310 add_header(req, "User-Agent", "Asterisk PBX");
2314 static int __transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req, int reliable)
2316 struct sip_request resp;
2318 if (reliable && (sscanf(get_header(req, "CSeq"), "%i ", &seqno) != 1)) {
2319 ast_log(LOG_WARNING, "Unable to determine sequence number from '%s'\n", get_header(req, "CSeq"));
2322 respprep(&resp, p, msg, req);
2323 add_header(&resp, "Content-Length", "0");
2324 add_blank_header(&resp);
2325 return send_response(p, &resp, reliable, seqno);
2328 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req)
2330 return __transmit_response(p, msg, req, 0);
2332 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req)
2334 return __transmit_response(p, msg, req, 1);
2337 static void append_date(struct sip_request *req)
2344 strftime(tmpdat, sizeof(tmpdat), "%a, %d %b %Y %T GMT", &tm);
2345 add_header(req, "Date", tmpdat);
2348 static int transmit_response_with_date(struct sip_pvt *p, char *msg, struct sip_request *req)
2350 struct sip_request resp;
2351 respprep(&resp, p, msg, req);
2353 add_header(&resp, "Content-Length", "0");
2354 add_blank_header(&resp);
2355 return send_response(p, &resp, 0, 0);
2358 static int transmit_response_with_allow(struct sip_pvt *p, char *msg, struct sip_request *req)
2360 struct sip_request resp;
2361 respprep(&resp, p, msg, req);
2362 add_header(&resp, "Accept", "application/sdp");
2363 add_header(&resp, "Content-Length", "0");
2364 add_blank_header(&resp);
2365 return send_response(p, &resp, 0, 0);
2368 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *randdata, int reliable)
2370 struct sip_request resp;
2373 if (reliable && (sscanf(get_header(req, "CSeq"), "%i ", &seqno) != 1)) {
2374 ast_log(LOG_WARNING, "Unable to determine sequence number from '%s'\n", get_header(req, "CSeq"));
2377 snprintf(tmp, sizeof(tmp), "Digest realm=\"asterisk\", nonce=\"%s\"", randdata);
2378 respprep(&resp, p, msg, req);
2379 add_header(&resp, "Proxy-Authenticate", tmp);
2380 add_header(&resp, "Content-Length", "0");
2381 add_blank_header(&resp);
2382 return send_response(p, &resp, reliable, seqno);
2385 static int add_text(struct sip_request *req, char *text)
2387 /* XXX Convert \n's to \r\n's XXX */
2388 int len = strlen(text);
2390 snprintf(clen, sizeof(clen), "%d", len);
2391 add_header(req, "Content-Type", "text/plain");
2392 add_header(req, "Content-Length", clen);
2393 add_line(req, text);
2397 static int add_digit(struct sip_request *req, char digit)
2402 snprintf(tmp, sizeof(tmp), "Signal=%c\r\nDuration=250\r\n", digit);
2404 snprintf(clen, sizeof(clen), "%d", len);
2405 add_header(req, "Content-Type", "application/dtmf-relay");
2406 add_header(req, "Content-Length", clen);
2411 static int add_sdp(struct sip_request *resp, struct sip_pvt *p, struct ast_rtp *rtp, struct ast_rtp *vrtp)
2415 int alreadysent = 0;
2417 struct sockaddr_in sin;
2418 struct sockaddr_in vsin;
2419 struct sip_codec_pref *cur;
2430 struct sockaddr_in dest;
2431 struct sockaddr_in vdest;
2432 /* XXX We break with the "recommendation" and send our IP, in order that our
2433 peer doesn't have to gethostbyname() us XXX */
2436 ast_log(LOG_WARNING, "No way to add SDP without an RTP structure\n");
2439 ast_rtp_get_us(p->rtp, &sin);
2441 ast_rtp_get_us(p->vrtp, &vsin);
2443 if (p->redirip.sin_addr.s_addr) {
2444 dest.sin_port = p->redirip.sin_port;
2445 dest.sin_addr = p->redirip.sin_addr;
2447 ast_rtp_get_peer(rtp, &dest);
2449 dest.sin_addr = p->ourip;
2450 dest.sin_port = sin.sin_port;
2453 /* Determine video destination */
2455 if (p->vredirip.sin_addr.s_addr) {
2456 vdest.sin_port = p->vredirip.sin_port;
2457 vdest.sin_addr = p->vredirip.sin_addr;
2459 ast_rtp_get_peer(vrtp, &vdest);
2461 vdest.sin_addr = p->ourip;
2462 vdest.sin_port = vsin.sin_port;
2466 ast_verbose("We're at %s port %d\n", inet_ntoa(p->ourip), ntohs(sin.sin_port));
2467 if (sipdebug && p->vrtp)
2468 ast_verbose("Video is at %s port %d\n", inet_ntoa(p->ourip), ntohs(vsin.sin_port));
2469 snprintf(v, sizeof(v), "v=0\r\n");
2470 snprintf(o, sizeof(o), "o=root %d %d IN IP4 %s\r\n", getpid(), getpid(), inet_ntoa(dest.sin_addr));
2471 snprintf(s, sizeof(s), "s=session\r\n");
2472 snprintf(c, sizeof(c), "c=IN IP4 %s\r\n", inet_ntoa(dest.sin_addr));
2473 snprintf(t, sizeof(t), "t=0 0\r\n");
2474 snprintf(m, sizeof(m), "m=audio %d RTP/AVP", ntohs(dest.sin_port));
2475 snprintf(m2, sizeof(m2), "m=video %d RTP/AVP", ntohs(vdest.sin_port));
2476 /* Start by sending our preferred codecs */
2479 if (p->jointcapability & cur->codec) {
2481 ast_verbose("Answering with preferred capability %d\n", cur->codec);
2482 codec = ast_rtp_lookup_code(p->rtp, 1, cur->codec);
2484 snprintf(costr, sizeof(costr), " %d", codec);
2485 if (cur->codec < AST_FORMAT_MAX_AUDIO) {
2487 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, cur->codec));
2491 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, cur->codec));
2496 alreadysent |= cur->codec;
2499 /* Now send any other common codecs, and non-codec formats: */
2500 for (x = 1; x <= AST_FORMAT_MAX_AUDIO; x <<= 1) {
2501 if ((p->jointcapability & x) && !(alreadysent & x)) {
2503 ast_verbose("Answering with capability %d\n", x);
2504 codec = ast_rtp_lookup_code(p->rtp, 1, x);
2506 snprintf(costr, sizeof(costr), " %d", codec);
2507 if (x < AST_FORMAT_MAX_AUDIO) {
2509 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, x));
2513 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, x));
2519 for (x = 1; x <= AST_RTP_MAX; x <<= 1) {
2520 if (p->noncodeccapability & x) {
2522 ast_verbose("Answering with non-codec capability %d\n", x);
2523 codec = ast_rtp_lookup_code(p->rtp, 0, x);
2525 snprintf(costr, sizeof(costr), " %d", codec);
2527 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(0, x));
2529 if (x == AST_RTP_DTMF) {
2530 /* Indicate we support DTMF... Not sure about 16, but MSN supports it so dang it, we will too... */
2531 snprintf(costr, sizeof costr, "a=fmtp:%d 0-16\r\n",
2540 len = strlen(v) + strlen(s) + strlen(o) + strlen(c) + strlen(t) + strlen(m) + strlen(a);
2542 len += strlen(m2) + strlen(a2);
2543 snprintf(costr, sizeof(costr), "%d", len);
2544 add_header(resp, "Content-Type", "application/sdp");
2545 add_header(resp, "Content-Length", costr);
2560 static void copy_request(struct sip_request *dst,struct sip_request *src)
2564 offset = ((void *)dst) - ((void *)src);
2565 /* First copy stuff */
2566 memcpy(dst, src, sizeof(*dst));
2567 /* Now fix pointer arithmetic */
2568 for (x=0;x<src->headers;x++)
2569 dst->header[x] += offset;
2570 for (x=0;x<src->lines;x++)
2571 dst->line[x] += offset;
2574 static int transmit_response_with_sdp(struct sip_pvt *p, char *msg, struct sip_request *req, int retrans)
2576 struct sip_request resp;
2578 if (sscanf(get_header(req, "CSeq"), "%i ", &seqno) != 1) {
2579 ast_log(LOG_WARNING, "Unable to get seqno from '%s'\n", get_header(req, "CSeq"));
2582 respprep(&resp, p, msg, req);
2583 add_sdp(&resp, p, NULL, NULL);
2584 return send_response(p, &resp, retrans, seqno);
2587 static int determine_firstline_parts( struct sip_request *req ) {
2592 cmd= req->header[0];
2593 while(*cmd && (*cmd < 33)) {
2600 while(*e && (*e > 32)) {
2603 /* Get the command */
2609 while( *e && ( *e < 33 ) ) {
2616 if ( !strcasecmp(cmd, "SIP/2.0") ) {
2617 /* We have a response */
2619 len= strlen( req->rlPart2 );
2620 if( len < 2 ) { return -1; }
2622 while( *e && *e<33 ) {
2627 /* We have a request */
2630 if( !*e ) { return -1; }
2633 if( ( e= strrchr( req->rlPart2, 'S' ) ) == NULL ) {
2636 while( isspace( *(--e) ) ) {}
2646 static int transmit_reinvite_with_sdp(struct sip_pvt *p, struct ast_rtp *rtp, struct ast_rtp *vrtp)
2648 struct sip_request req;
2649 if (p->canreinvite == REINVITE_UPDATE)
2650 reqprep(&req, p, "UPDATE", 0);
2652 reqprep(&req, p, "INVITE", 0);
2653 add_header(&req, "Allow", ALLOWED_METHODS);
2654 add_sdp(&req, p, rtp, vrtp);
2655 /* Use this as the basis */
2656 copy_request(&p->initreq, &req);
2658 determine_firstline_parts(&p->initreq);
2659 p->lastinvite = p->ocseq;
2661 return send_request(p, &req, 1, p->ocseq);
2664 static void extract_uri(struct sip_pvt *p, struct sip_request *req)
2666 char stripped[256]="";
2668 strncpy(stripped, get_header(req, "Contact"), sizeof(stripped) - 1);
2669 c = strchr(stripped, '<');
2681 strncpy(p->uri, c, sizeof(p->uri) - 1);
2684 static void build_contact(struct sip_pvt *p)
2686 /* Construct Contact: header */
2687 if (ourport != 5060)
2688 snprintf(p->our_contact, sizeof(p->our_contact), "<sip:%s@%s:%d>", p->exten, inet_ntoa(p->ourip), ourport);
2690 snprintf(p->our_contact, sizeof(p->our_contact), "<sip:%s@%s>", p->exten, inet_ntoa(p->ourip));
2693 static void initreqprep(struct sip_request *req, struct sip_pvt *p, char *cmd, char *vxml_url)
2700 char *l = callerid, *n=NULL;
2702 snprintf(p->lastmsg, sizeof(p->lastmsg), "Init: %s", cmd);
2704 if (p->owner && p->owner->callerid) {
2705 strcpy(cid, p->owner->callerid);
2706 ast_callerid_parse(cid, &n, &l);
2708 ast_shrink_phone_number(l);
2709 if (!l || !ast_isphonenumber(l))
2712 /* if user want's his callerid restricted */
2714 l = CALLERID_UNKNOWN;
2715 if (!n || !strlen(n))
2717 /* Allow user to be overridden */
2718 if (strlen(p->fromuser))
2721 if ((ourport != 5060) && !strlen(p->fromdomain))
2722 snprintf(from, sizeof(from), "\"%s\" <sip:%s@%s:%d>;tag=as%08x", n, l, strlen(p->fromdomain) ? p->fromdomain : inet_ntoa(p->ourip), ourport, p->tag);
2724 snprintf(from, sizeof(from), "\"%s\" <sip:%s@%s>;tag=as%08x", n, l, strlen(p->fromdomain) ? p->fromdomain : inet_ntoa(p->ourip), p->tag);
2726 if (strlen(p->username)) {
2727 if (ntohs(p->sa.sin_port) != DEFAULT_SIP_PORT) {
2728 snprintf(invite, sizeof(invite), "sip:%s@%s:%d",p->username, p->tohost, ntohs(p->sa.sin_port));
2730 snprintf(invite, sizeof(invite), "sip:%s@%s",p->username, p->tohost);
2732 } else if (ntohs(p->sa.sin_port) != DEFAULT_SIP_PORT) {
2733 snprintf(invite, sizeof(invite), "sip:%s:%d", p->tohost, ntohs(p->sa.sin_port));
2735 snprintf(invite, sizeof(invite), "sip:%s", p->tohost);
2737 strncpy(p->uri, invite, sizeof(p->uri) - 1);
2738 /* If there is a VXML URL append it to the SIP URL */
2741 snprintf(to, sizeof(to), "<%s>;%s", invite, vxml_url);
2745 snprintf(to, sizeof(to), "<%s>", invite );
2747 memset(req, 0, sizeof(struct sip_request));
2748 init_req(req, cmd, invite);
2749 snprintf(tmp, sizeof(tmp), "%d %s", ++p->ocseq, cmd);
2751 add_header(req, "Via", p->via);
2752 /* SLD: FIXME?: do Route: here too? I think not cos this is the first request.
2753 * OTOH, then we won't have anything in p->route anyway */
2754 add_header(req, "From", from);
2755 strncpy(p->exten, l, sizeof(p->exten) - 1);
2757 add_header(req, "To", to);
2758 add_header(req, "Contact", p->our_contact);
2759 add_header(req, "Call-ID", p->callid);
2760 add_header(req, "CSeq", tmp);
2761 add_header(req, "User-Agent", "Asterisk PBX");
2764 static int transmit_invite(struct sip_pvt *p, char *cmd, int sdp, char *auth, char *vxml_url, char *distinctive_ring, int init)
2766 struct sip_request req;
2769 initreqprep(&req, p, cmd, vxml_url);
2771 reqprep(&req, p, cmd, 0);
2774 add_header(&req, "Proxy-Authorization", auth);
2776 if (distinctive_ring)
2778 add_header(&req, "Alert-info",distinctive_ring);
2780 add_header(&req, "Allow", ALLOWED_METHODS);
2782 add_sdp(&req, p, NULL, NULL);
2784 add_header(&req, "Content-Length", "0");
2785 add_blank_header(&req);
2788 if (!p->initreq.headers) {
2789 /* Use this as the basis */
2790 copy_request(&p->initreq, &req);
2792 determine_firstline_parts(&p->initreq);
2794 p->lastinvite = p->ocseq;
2795 return send_request(p, &req, 1, p->ocseq);
2798 static int transmit_state_notify(struct sip_pvt *p, int state, int full)
2801 char from[256], to[256];
2804 struct sip_request req;
2807 strncpy(from, get_header(&p->initreq, "From"), sizeof(from)-1);
2809 c = ditch_braces(from);
2810 if (strncmp(c, "sip:", 4)) {
2811 ast_log(LOG_WARNING, "Huh? Not a SIP header (%s)?\n", c);
2814 if ((a = strchr(c, ';'))) {
2819 reqprep(&req, p, "NOTIFY", 0);
2821 if (p->subscribed == 1) {
2822 strncpy(to, get_header(&p->initreq, "To"), sizeof(to)-1);
2824 c = ditch_braces(to);
2825 if (strncmp(c, "sip:", 4)) {
2826 ast_log(LOG_WARNING, "Huh? Not a SIP header (%s)?\n", c);
2829 if ((a = strchr(c, ';'))) {
2834 add_header(&req, "Content-Type", "application/xpidf+xml");
2836 if ((state==AST_EXTENSION_UNAVAILABLE) || (state==AST_EXTENSION_BUSY))
2838 else if (state==AST_EXTENSION_INUSE)
2844 sprintf(t, "<?xml version=\"1.0\"?>\n");
2845 t = tmp + strlen(tmp);
2846 sprintf(t, "<!DOCTYPE presence PUBLIC \"-//IETF//DTD RFCxxxx XPIDF 1.0//EN\" \"xpidf.dtd\">\n");
2847 t = tmp + strlen(tmp);
2848 sprintf(t, "<presence>\n");
2849 t = tmp + strlen(tmp);
2850 sprintf(t, "<presentity uri=\"%s;method=SUBSCRIBE\" />\n", mfrom);
2851 t = tmp + strlen(tmp);
2852 sprintf(t, "<atom id=\"%s\">\n", p->exten);
2853 t = tmp + strlen(tmp);
2854 sprintf(t, "<address uri=\"%s;user=ip\" priority=\"0,800000\">\n", mto);
2855 t = tmp + strlen(tmp);
2856 sprintf(t, "<status status=\"%s\" />\n", !state ? "open" : (state==1) ? "inuse" : "closed");
2857 t = tmp + strlen(tmp);
2858 sprintf(t, "<msnsubstatus substatus=\"%s\" />\n", !state ? "online" : (state==1) ? "onthephone" : "offline");
2859 t = tmp + strlen(tmp);
2860 sprintf(t, "</address>\n</atom>\n</presence>\n");
2862 add_header(&req, "Event", "dialog");
2863 add_header(&req, "Content-Type", "application/dialog-info+xml");
2866 sprintf(t, "<?xml version=\"1.0\"?>\n");
2867 t = tmp + strlen(tmp);
2868 sprintf(t, "<dialog-info xmlns=\"urn:ietf:params:xml:ns:dialog-info\" version=\"%d\" state=\"%s\" entity=\"%s\">\n", p->dialogver++, full ? "full":"partial", mfrom);
2869 t = tmp + strlen(tmp);
2870 sprintf(t, "<dialog id=\"%s\">\n", p->exten);
2871 t = tmp + strlen(tmp);
2872 sprintf(t, "<state>%s</state>\n", state ? "confirmed" : "terminated");
2873 t = tmp + strlen(tmp);
2874 sprintf(t, "</dialog>\n</dialog-info>\n");
2877 snprintf(clen, sizeof(clen), "%d", strlen(tmp));
2878 add_header(&req, "Content-Length", clen);
2879 add_line(&req, tmp);
2881 return send_request(p, &req, 1, p->ocseq);
2884 static int transmit_notify(struct sip_pvt *p, int newmsgs, int oldmsgs)
2886 struct sip_request req;
2890 initreqprep(&req, p, "NOTIFY", NULL);
2891 add_header(&req, "Event", "message-summary");
2892 add_header(&req, "Content-Type", notifymime);
2894 snprintf(tmp, sizeof(tmp), "Messages-Waiting: %s\n", newmsgs ? "yes" : "no");
2895 snprintf(tmp2, sizeof(tmp2), "Voicemail: %d/%d\n", newmsgs, oldmsgs);
2896 snprintf(clen, sizeof(clen), "%d", strlen(tmp) + strlen(tmp2));
2897 add_header(&req, "Content-Length", clen);
2898 add_line(&req, tmp);
2899 add_line(&req, tmp2);
2901 if (!p->initreq.headers) {
2902 /* Use this as the basis */
2903 copy_request(&p->initreq, &req);
2905 determine_firstline_parts(&p->initreq);
2908 return send_request(p, &req, 1, p->ocseq);
2911 static int transmit_register(struct sip_registry *r, char *cmd, char *auth, char *authheader);
2913 static int sip_reregister(void *data)
2915 /* if we are here, we know that we need to reregister. */
2916 struct sip_registry *r=(struct sip_registry *)data;
2923 static int sip_do_register(struct sip_registry *r)
2926 ast_mutex_lock(&r->lock);
2927 res=transmit_register(r, "REGISTER", NULL, NULL);
2928 ast_mutex_unlock(&r->lock);
2932 static int sip_reg_timeout(void *data)
2934 /* if we are here, our registration timed out, so we'll just do it over */
2935 struct sip_registry *r=data;
2938 ast_mutex_lock(&r->lock);
2939 ast_log(LOG_NOTICE, "Registration for '%s@%s' timed out, trying again\n", r->username, inet_ntoa(r->addr.sin_addr));
2941 /* Unlink us, destroy old call. Locking is not relevent here because all this happens
2942 in the single SIP manager thread. */
2948 r->regstate=REG_STATE_UNREGISTERED;
2950 res=transmit_register(r, "REGISTER", NULL, NULL);
2951 ast_mutex_unlock(&r->lock);
2955 static int transmit_register(struct sip_registry *r, char *cmd, char *auth, char *authheader)
2957 struct sip_request req;
2964 /* exit if we are already in process with this registrar ?*/
2965 if ( r == NULL || ((auth==NULL) && (r->regstate==REG_STATE_REGSENT || r->regstate==REG_STATE_AUTHSENT))) {
2966 ast_log(LOG_NOTICE, "Strange, trying to register when registration already pending\n");
2972 ast_log(LOG_WARNING, "Already have a call??\n");
2977 if (!r->callid_valid) {
2978 build_callid(r->callid, sizeof(r->callid), __ourip);
2979 r->callid_valid = 1;
2981 p=sip_alloc( r->callid, &r->addr, 0);
2983 ast_log(LOG_WARNING, "Unable to allocate registration call\n");
2989 strncpy(p->peersecret, r->secret, sizeof(p->peersecret)-1);
2990 strncpy(p->peermd5secret, r->md5secret, sizeof(p->peermd5secret)-1);
2991 if (strlen(r->authuser))
2992 strncpy(p->peername, r->authuser, sizeof(p->peername)-1);
2994 strncpy(p->peername, r->username, sizeof(p->peername)-1);
2995 strncpy(p->username, r->username, sizeof(p->username)-1);
2996 strncpy(p->exten, r->contact, sizeof(p->exten) - 1);
2997 /* Always bind to our IP if specified */
2998 if (!use_external_ip && bindaddr.sin_addr.s_addr)
2999 memcpy(&p->ourip, &bindaddr.sin_addr, sizeof(p->ourip));
3003 /* set up a timeout */
3005 if (r->timeout > -1) {
3006 ast_log(LOG_WARNING, "Still have a timeout, %d\n", r->timeout);
3007 ast_sched_del(sched, r->timeout);
3009 r->timeout = ast_sched_add(sched, 20*1000, sip_reg_timeout, r);
3010 ast_log(LOG_DEBUG, "Scheduled a timeout # %d\n", r->timeout);
3013 if (strchr(r->username, '@')) {
3014 snprintf(from, sizeof(from), "<sip:%s>;tag=as%08x", r->username, p->tag);
3015 snprintf(to, sizeof(to), "<sip:%s>", r->username);
3017 snprintf(from, sizeof(from), "<sip:%s@%s>;tag=as%08x", r->username, r->hostname, p->tag);
3018 snprintf(to, sizeof(to), "<sip:%s@%s>", r->username, r->hostname);
3021 snprintf(addr, sizeof(addr), "sip:%s", r->hostname);
3022 strncpy(p->uri, addr, sizeof(p->uri) - 1);
3024 memset(&req, 0, sizeof(req));
3025 init_req(&req, cmd, addr);
3027 snprintf(tmp, sizeof(tmp), "%u %s", ++r->ocseq, cmd);
3028 p->ocseq = r->ocseq;
3030 /* z9hG4bK is a magic cookie. See RFC 3261 section 8.1.1.7 */
3031 snprintf(via, sizeof(via), "SIP/2.0/UDP %s:%d;branch=z9hG4bK%08x", inet_ntoa(p->ourip), ourport, p->branch);
3032 add_header(&req, "Via", via);
3033 add_header(&req, "From", from);
3034 add_header(&req, "To", to);
3035 add_header(&req, "Call-ID", p->callid);
3036 add_header(&req, "CSeq", tmp);
3037 add_header(&req, "User-Agent", "Asterisk PBX");
3039 add_header(&req, authheader, auth);
3041 snprintf(tmp, sizeof(tmp), "%d", default_expiry);
3042 add_header(&req, "Expires", tmp);
3043 add_header(&req, "Contact", p->our_contact);
3044 add_header(&req, "Event", "registration");
3045 add_header(&req, "Content-length", "0");
3046 add_blank_header(&req);
3047 copy_request(&p->initreq, &req);
3049 determine_firstline_parts(&p->initreq);
3050 r->regstate=auth?REG_STATE_AUTHSENT:REG_STATE_REGSENT;
3051 return send_request(p, &req, 1, p->ocseq);
3054 static int transmit_message_with_text(struct sip_pvt *p, char *text)
3056 struct sip_request req;
3057 reqprep(&req, p, "MESSAGE", 0);
3058 add_text(&req, text);
3059 return send_request(p, &req, 1, p->ocseq);
3062 static int transmit_refer(struct sip_pvt *p, char *dest)
3064 struct sip_request req;
3069 of = get_header(&p->initreq, "To");
3071 of = get_header(&p->initreq, "From");
3072 strncpy(from, of, sizeof(from) - 1);
3073 of = ditch_braces(from);
3074 strncpy(p->from,of,sizeof(p->from) - 1);
3075 if (strncmp(of, "sip:", 4)) {
3076 ast_log(LOG_NOTICE, "From address missing 'sip:', using it anyway\n");
3079 /* Get just the username part */
3080 if ((c = strchr(of, '@'))) {
3085 snprintf(referto, sizeof(referto), "<sip:%s@%s>", dest, c);
3087 snprintf(referto, sizeof(referto), "<sip:%s>", dest);
3090 reqprep(&req, p, "REFER", 0);
3091 add_header(&req, "Refer-To", referto);
3092 add_header(&req, "Referred-By", callerid);
3093 return send_request(p, &req, 1, p->ocseq);
3096 static int transmit_info_with_digit(struct sip_pvt *p, char digit)
3098 struct sip_request req;
3099 reqprep(&req, p, "INFO", 0);
3100 add_digit(&req, digit);
3101 return send_request(p, &req, 1, p->ocseq);
3104 static int transmit_request(struct sip_pvt *p, char *msg, int seqno, int reliable)
3106 struct sip_request resp;