2 * Asterisk -- A telephony toolkit for Linux.
4 * Implementation of Session Initiation Protocol
6 * Copyright (C) 2004 - 2005, 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/config.h>
21 #include <asterisk/logger.h>
22 #include <asterisk/module.h>
23 #include <asterisk/pbx.h>
24 #include <asterisk/options.h>
25 #include <asterisk/lock.h>
26 #include <asterisk/sched.h>
27 #include <asterisk/io.h>
28 #include <asterisk/rtp.h>
29 #include <asterisk/acl.h>
30 #include <asterisk/manager.h>
31 #include <asterisk/callerid.h>
32 #include <asterisk/cli.h>
33 #include <asterisk/app.h>
34 #include <asterisk/musiconhold.h>
35 #include <asterisk/dsp.h>
36 #include <asterisk/features.h>
37 #include <asterisk/acl.h>
38 #include <asterisk/srv.h>
39 #include <asterisk/astdb.h>
40 #include <asterisk/causes.h>
41 #include <asterisk/utils.h>
42 #include <asterisk/file.h>
43 #include <asterisk/astobj.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>
62 #ifndef DEFAULT_USERAGENT
63 #define DEFAULT_USERAGENT "Asterisk PBX"
66 #define VIDEO_CODEC_MASK 0x1fc0000 /* Video codecs from H.261 thru AST_FORMAT_MAX_VIDEO */
68 #define IPTOS_MINCOST 0x02
71 /* #define VOCAL_DATA_HACK */
74 #define DEFAULT_DEFAULT_EXPIRY 120
75 #define DEFAULT_MAX_EXPIRY 3600
76 #define DEFAULT_REGISTRATION_TIMEOUT 20
78 /* guard limit must be larger than guard secs */
79 /* guard min must be < 1000, and should be >= 250 */
80 #define EXPIRY_GUARD_SECS 15 /* How long before expiry do we reregister */
81 #define EXPIRY_GUARD_LIMIT 30 /* Below here, we use EXPIRY_GUARD_PCT instead of
83 #define EXPIRY_GUARD_MIN 500 /* This is the minimum guard time applied. If
84 GUARD_PCT turns out to be lower than this, it
85 will use this time instead.
86 This is in milliseconds. */
87 #define EXPIRY_GUARD_PCT 0.20 /* Percentage of expires timeout to use when
88 below EXPIRY_GUARD_LIMIT */
90 static int max_expiry = DEFAULT_MAX_EXPIRY;
91 static int default_expiry = DEFAULT_DEFAULT_EXPIRY;
94 #define MAX(a,b) ((a) > (b) ? (a) : (b))
97 #define CALLERID_UNKNOWN "Unknown"
101 #define DEFAULT_MAXMS 2000 /* Must be faster than 2 seconds by default */
102 #define DEFAULT_FREQ_OK 60 * 1000 /* How often to check for the host to be up */
103 #define DEFAULT_FREQ_NOTOK 10 * 1000 /* How often to check, if the host is down... */
105 #define DEFAULT_RETRANS 1000 /* How frequently to retransmit */
106 #define MAX_RETRANS 5 /* Try only 5 times for retransmissions */
109 #define DEBUG_READ 0 /* Recieved data */
110 #define DEBUG_SEND 1 /* Transmit data */
112 static const char desc[] = "Session Initiation Protocol (SIP)";
113 static const char channeltype[] = "SIP";
114 static const char config[] = "sip.conf";
115 static const char notify_config[] = "sip_notify.conf";
117 #define SIP_REGISTER 1
118 #define SIP_OPTIONS 2
125 #define SIP_SUBSCRIBE 9
126 #define SIP_MESSAGE 10
127 #define SIP_UPDATE 11
129 #define SIP_CANCEL 13
130 #define SIP_PUBLISH 14
131 #define SIP_RESPONSE 100
133 const struct cfsip_methods {
138 { SIP_REGISTER, "REGISTER" },
139 { SIP_OPTIONS, "OPTIONS" },
140 { SIP_NOTIFY, "NOTIFY" },
141 { SIP_INVITE, "INVITE" },
143 { SIP_PRACK, "PRACK" },
145 { SIP_REFER, "REFER" },
146 { SIP_SUBSCRIBE,"SUBSCRIBE" },
147 { SIP_MESSAGE, "MESSAGE" },
148 { SIP_UPDATE, "UPDATE" },
149 { SIP_INFO, "INFO" },
150 { SIP_CANCEL, "CANCEL" },
151 { SIP_PUBLISH, "PUBLISH" }
155 #define DEFAULT_SIP_PORT 5060 /* From RFC 2543 */
156 #define SIP_MAX_PACKET 4096 /* Also from RFC 2543, should sub headers tho */
158 #define ALLOWED_METHODS "INVITE, ACK, CANCEL, OPTIONS, BYE, REFER"
160 static char default_useragent[AST_MAX_EXTENSION] = DEFAULT_USERAGENT;
162 #define DEFAULT_CONTEXT "default"
163 static char default_context[AST_MAX_EXTENSION] = DEFAULT_CONTEXT;
165 static char default_language[MAX_LANGUAGE] = "";
167 #define DEFAULT_CALLERID "asterisk"
168 static char default_callerid[AST_MAX_EXTENSION] = DEFAULT_CALLERID;
170 static char default_fromdomain[AST_MAX_EXTENSION] = "";
172 #define DEFAULT_NOTIFYMIME "application/simple-message-summary"
173 static char default_notifymime[AST_MAX_EXTENSION] = DEFAULT_NOTIFYMIME;
176 static int default_qualify = 0; /* Default Qualify= setting */
178 static struct ast_flags global_flags = {0}; /* global SIP_ flags */
179 static struct ast_flags global_flags_page2 = {0}; /* more global SIP_ flags */
181 static int srvlookup = 0; /* SRV Lookup on or off. Default is off, RFC behavior is on */
183 static int pedanticsipchecking = 0; /* Extra checking ? Default off */
185 static int autocreatepeer = 0; /* Auto creation of peers at registration? Default off. */
187 static int relaxdtmf = 0;
189 static int global_rtptimeout = 0;
191 static int global_rtpholdtimeout = 0;
193 static int global_rtpkeepalive = 0;
195 static int global_reg_timeout = DEFAULT_REGISTRATION_TIMEOUT;
197 /* Object counters */
198 static int suserobjs = 0;
199 static int ruserobjs = 0;
200 static int speerobjs = 0;
201 static int rpeerobjs = 0;
202 static int apeerobjs = 0;
203 static int regobjs = 0;
205 static int global_allowguest = 1; /* allow unauthenticated users/peers to connect? */
207 #define DEFAULT_MWITIME 10
208 static int global_mwitime = DEFAULT_MWITIME; /* Time between MWI checks for peers */
210 static int usecnt =0;
211 AST_MUTEX_DEFINE_STATIC(usecnt_lock);
214 /* Protect the interface list (of sip_pvt's) */
215 AST_MUTEX_DEFINE_STATIC(iflock);
217 /* Protect the monitoring thread, so only one process can kill or start it, and not
218 when it's doing something critical. */
219 AST_MUTEX_DEFINE_STATIC(netlock);
221 AST_MUTEX_DEFINE_STATIC(monlock);
223 /* This is the thread for the monitor which checks for input on the channels
224 which are not currently in use. */
225 static pthread_t monitor_thread = AST_PTHREADT_NULL;
227 static int restart_monitor(void);
229 /* Codecs that we support by default: */
230 static int global_capability = AST_FORMAT_ULAW | AST_FORMAT_ALAW | AST_FORMAT_GSM | AST_FORMAT_H263;
231 static int noncodeccapability = AST_RTP_DTMF;
233 static struct in_addr __ourip;
234 static struct sockaddr_in outboundproxyip;
237 static int sipdebug = 0;
238 static struct sockaddr_in debugaddr;
242 static int videosupport = 0;
244 static int compactheaders = 0; /* send compact sip headers */
246 static int recordhistory = 0; /* Record SIP history. Off by default */
248 static char global_musicclass[MAX_LANGUAGE] = ""; /* Global music on hold class */
249 #define DEFAULT_REALM "asterisk"
250 static char global_realm[AST_MAX_EXTENSION] = DEFAULT_REALM; /* Default realm */
251 static char regcontext[AST_MAX_EXTENSION] = ""; /* Context for auto-extensions */
254 #define DEFAULT_EXPIRY 900
255 static int expiry = DEFAULT_EXPIRY;
257 static struct sched_context *sched;
258 static struct io_context *io;
259 /* The private structures of the sip channels are linked for
260 selecting outgoing channels */
262 #define SIP_MAX_HEADERS 64
263 #define SIP_MAX_LINES 64
267 #define DEC_OUT_USE 2
268 #define INC_OUT_USE 3
270 static struct ast_codec_pref prefs;
273 /* sip_request: The data grabbed from the UDP socket */
275 char *rlPart1; /* SIP Method Name or "SIP/2.0" protocol version */
276 char *rlPart2; /* The Request URI or Response Status */
277 int len; /* Length */
278 int headers; /* # of SIP Headers */
279 int method; /* Method of this request */
280 char *header[SIP_MAX_HEADERS];
281 int lines; /* SDP Content */
282 char *line[SIP_MAX_LINES];
283 char data[SIP_MAX_PACKET];
289 struct sip_route *next;
293 /* sip_history: Structure for saving transactions within a SIP dialog */
296 struct sip_history *next;
299 /* sip_auth: Creadentials for authentication to other SIP services */
301 char realm[AST_MAX_EXTENSION]; /* Realm in which these credentials are valid */
302 char username[256]; /* Username */
303 char secret[256]; /* Secret */
304 char md5secret[256]; /* MD5Secret */
305 struct sip_auth *next; /* Next auth structure in list */
308 #define SIP_ALREADYGONE (1 << 0) /* Whether or not we've already been destroyed by our peer */
309 #define SIP_NEEDDESTROY (1 << 1) /* if we need to be destroyed */
310 #define SIP_NOVIDEO (1 << 2) /* Didn't get video in invite, don't offer */
311 #define SIP_RINGING (1 << 3) /* Have sent 180 ringing */
312 #define SIP_PROGRESS_SENT (1 << 4) /* Have sent 183 message progress */
313 #define SIP_NEEDREINVITE (1 << 5) /* Do we need to send another reinvite? */
314 #define SIP_PENDINGBYE (1 << 6) /* Need to send bye after we ack? */
315 #define SIP_GOTREFER (1 << 7) /* Got a refer? */
316 #define SIP_PROMISCREDIR (1 << 8) /* Promiscuous redirection */
317 #define SIP_TRUSTRPID (1 << 9) /* Trust RPID headers? */
318 #define SIP_USEREQPHONE (1 << 10) /* Add user=phone to numeric URI. Default off */
319 #define SIP_REALTIME (1 << 11) /* Flag for realtime users */
320 #define SIP_USECLIENTCODE (1 << 12) /* Trust X-ClientCode info message */
321 #define SIP_OUTGOING (1 << 13) /* Is this an outgoing call? */
322 #define SIP_SELFDESTRUCT (1 << 14)
323 #define SIP_DYNAMIC (1 << 15) /* Is this a dynamic peer? */
324 /* --- Choices for DTMF support in SIP channel */
325 #define SIP_DTMF (3 << 16) /* three settings, uses two bits */
326 #define SIP_DTMF_RFC2833 (0 << 16) /* RTP DTMF */
327 #define SIP_DTMF_INBAND (1 << 16) /* Inband audio, only for ULAW/ALAW */
328 #define SIP_DTMF_INFO (2 << 16) /* SIP Info messages */
330 #define SIP_NAT (3 << 18) /* four settings, uses two bits */
331 #define SIP_NAT_NEVER (0 << 18) /* No nat support */
332 #define SIP_NAT_RFC3581 (1 << 18)
333 #define SIP_NAT_ROUTE (2 << 18)
334 #define SIP_NAT_ALWAYS (3 << 18)
335 /* re-INVITE related settings */
336 #define SIP_REINVITE (3 << 20) /* two bits used */
337 #define SIP_CAN_REINVITE (1 << 20) /* allow peers to be reinvited to send media directly p2p */
338 #define SIP_REINVITE_UPDATE (2 << 20) /* use UPDATE (RFC3311) when reinviting this peer */
339 /* "insecure" settings */
340 #define SIP_INSECURE (3 << 22) /* three settings, uses two bits */
341 #define SIP_SECURE (0 << 22)
342 #define SIP_INSECURE_NORMAL (1 << 22)
343 #define SIP_INSECURE_VERY (2 << 22)
344 /* Sending PROGRESS in-band settings */
345 #define SIP_PROG_INBAND (3 << 24) /* three settings, uses two bits */
346 #define SIP_PROG_INBAND_NEVER (0 << 24)
347 #define SIP_PROG_INBAND_NO (1 << 24)
348 #define SIP_PROG_INBAND_YES (2 << 24)
349 /* Open Settlement Protocol authentication */
350 #define SIP_OSPAUTH (3 << 26) /* three settings, uses two bits */
351 #define SIP_OSPAUTH_NO (0 << 26)
352 #define SIP_OSPAUTH_YES (1 << 26)
353 #define SIP_OSPAUTH_EXCLUSIVE (2 << 26)
355 #define SIP_CALL_ONHOLD (1 << 28)
356 #define SIP_CALL_LIMIT (1 << 29)
358 /* a new page of flags for peer */
359 #define SIP_PAGE2_RTCACHEFRIENDS (1 << 0)
360 #define SIP_PAGE2_RTNOUPDATE (1 << 1)
361 #define SIP_PAGE2_RTAUTOCLEAR (1 << 2)
363 static int global_rtautoclear = 120;
365 /* sip_pvt: PVT structures are used for each SIP conversation, ie. a call */
366 static struct sip_pvt {
367 ast_mutex_t lock; /* Channel private lock */
368 int method; /* SIP method of this packet */
369 char callid[80]; /* Global CallID */
370 char randdata[80]; /* Random data */
371 struct ast_codec_pref prefs; /* codec prefs */
372 unsigned int ocseq; /* Current outgoing seqno */
373 unsigned int icseq; /* Current incoming seqno */
374 ast_group_t callgroup; /* Call group */
375 ast_group_t pickupgroup; /* Pickup group */
376 int lastinvite; /* Last Cseq of invite */
377 unsigned int flags; /* SIP_ flags */
378 int capability; /* Special capability (codec) */
379 int jointcapability; /* Supported capability at both ends (codecs ) */
380 int peercapability; /* Supported peer capability */
381 int prefcodec; /* Preferred codec (outbound only) */
382 int noncodeccapability;
383 int callingpres; /* Calling presentation */
384 int authtries; /* Times we've tried to authenticate */
385 int expiry; /* How long we take to expire */
386 int branch; /* One random number */
387 int tag; /* Another random number */
388 int sessionid; /* SDP Session ID */
389 int sessionversion; /* SDP Session Version */
390 struct sockaddr_in sa; /* Our peer */
391 struct sockaddr_in redirip; /* Where our RTP should be going if not to us */
392 struct sockaddr_in vredirip; /* Where our Video RTP should be going if not to us */
393 int redircodecs; /* Redirect codecs */
394 struct sockaddr_in recv; /* Received as */
395 struct in_addr ourip; /* Our IP */
396 struct ast_channel *owner; /* Who owns us */
397 char exten[AST_MAX_EXTENSION]; /* Extension where to start */
398 char refer_to[AST_MAX_EXTENSION]; /* Place to store REFER-TO extension */
399 char referred_by[AST_MAX_EXTENSION]; /* Place to store REFERRED-BY extension */
400 char refer_contact[AST_MAX_EXTENSION]; /* Place to store Contact info from a REFER extension */
401 struct sip_pvt *refer_call; /* Call we are referring */
402 struct sip_route *route; /* Head of linked list of routing steps (fm Record-Route) */
403 int route_persistant; /* Is this the "real" route? */
404 char from[256]; /* The From: header */
405 char useragent[256]; /* User agent in SIP request */
406 char context[AST_MAX_EXTENSION]; /* Context for this call */
407 char fromdomain[AST_MAX_EXTENSION]; /* Domain to show in the from field */
408 char fromuser[AST_MAX_EXTENSION]; /* User to show in the user field */
409 char fromname[AST_MAX_EXTENSION]; /* Name to show in the user field */
410 char tohost[AST_MAX_EXTENSION]; /* Host we should put in the "to" field */
411 char language[MAX_LANGUAGE]; /* Default language for this call */
412 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
413 char rdnis[256]; /* Referring DNIS */
414 char theirtag[256]; /* Their tag */
415 char username[256]; /* [user] name */
416 char peername[256]; /* [peer] name, not set if [user] */
417 char authname[256]; /* Who we use for authentication */
418 char uri[256]; /* Original requested URI */
419 char okcontacturi[256]; /* URI from the 200 OK on INVITE */
420 char peersecret[256]; /* Password */
421 char peermd5secret[256];
422 struct sip_auth *peerauth; /* Realm authentication */
423 char cid_num[256]; /* Caller*ID */
424 char cid_name[256]; /* Caller*ID */
425 char via[256]; /* Via: header */
426 char fullcontact[128]; /* The Contact: that the UA registers with us */
427 char accountcode[20]; /* Account code */
428 char our_contact[256]; /* Our contact header */
429 char realm[256]; /* Authorization realm */
430 char nonce[256]; /* Authorization nonce */
431 char opaque[256]; /* Opaque nonsense */
432 char qop[80]; /* Quality of Protection, since SIP wasn't complicated enough yet. */
433 char domain[256]; /* Authorization domain */
434 char lastmsg[256]; /* Last Message sent/received */
435 int amaflags; /* AMA Flags */
436 int pendinginvite; /* Any pending invite */
438 int osphandle; /* OSP Handle for call */
439 time_t ospstart; /* OSP Start time */
441 struct sip_request initreq; /* Initial request */
443 int maxtime; /* Max time for first response */
444 int maxforwards; /* keep the max-forwards info */
445 int initid; /* Auto-congest ID if appropriate */
446 int autokillid; /* Auto-kill ID */
447 time_t lastrtprx; /* Last RTP received */
448 time_t lastrtptx; /* Last RTP sent */
449 int rtptimeout; /* RTP timeout time */
450 int rtpholdtimeout; /* RTP timeout when on hold */
451 int rtpkeepalive; /* Send RTP packets for keepalive */
453 int subscribed; /* Is this call a subscription? */
457 struct ast_dsp *vad; /* Voice Activation Detection dsp */
459 struct sip_peer *peerpoke; /* If this calls is to poke a peer, which one */
460 struct sip_registry *registry; /* If this is a REGISTER call, to which registry */
461 struct ast_rtp *rtp; /* RTP Session */
462 struct ast_rtp *vrtp; /* Video RTP session */
463 struct sip_pkt *packets; /* Packets scheduled for re-transmission */
464 struct sip_history *history; /* History of this SIP dialog */
465 struct ast_variable *chanvars; /* Channel variables to set for call */
466 struct sip_pvt *next; /* Next call in chain */
469 #define FLAG_RESPONSE (1 << 0)
470 #define FLAG_FATAL (1 << 1)
472 /* sip packet - read in sipsock_read, transmitted in send_request */
474 struct sip_pkt *next; /* Next packet */
475 int retrans; /* Retransmission number */
476 int seqno; /* Sequence number */
477 unsigned int flags; /* non-zero if this is a response packet (e.g. 200 OK) */
478 struct sip_pvt *owner; /* Owner call */
479 int retransid; /* Retransmission ID */
480 int packetlen; /* Length of packet */
484 /* Structure for SIP user data. User's place calls to us */
486 /* Users who can access various contexts */
487 ASTOBJ_COMPONENTS(struct sip_user);
488 char secret[80]; /* Password */
489 char md5secret[80]; /* Password in md5 */
490 char context[80]; /* Default context for incoming calls */
491 char cid_num[80]; /* Caller ID num */
492 char cid_name[80]; /* Caller ID name */
493 char accountcode[20]; /* Account code */
494 char language[MAX_LANGUAGE]; /* Default language for this user */
495 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
496 char useragent[256]; /* User agent in SIP request */
497 struct ast_codec_pref prefs; /* codec prefs */
498 ast_group_t callgroup; /* Call group */
499 ast_group_t pickupgroup; /* Pickup Group */
500 unsigned int flags; /* SIP_ flags */
501 int amaflags; /* AMA flags for billing */
502 int callingpres; /* Calling id presentation */
503 int capability; /* Codec capability */
504 int inUse; /* Number of calls in use */
505 int incominglimit; /* Limit of incoming calls */
506 int outUse; /* disabled */
507 int outgoinglimit; /* disabled */
508 struct ast_ha *ha; /* ACL setting */
509 struct ast_variable *chanvars; /* Variables to set for channel created by user */
512 /* Structure for SIP peer data, we place calls to peers if registred or fixed IP address (host) */
514 ASTOBJ_COMPONENTS(struct sip_peer); /* name, refcount, objflags, object pointers */
515 /* peer->name is the unique name of this object */
516 char secret[80]; /* Password */
517 char md5secret[80]; /* Password in MD5 */
518 struct sip_auth *auth; /* Realm authentication list */
519 char context[80]; /* Default context for incoming calls */
520 char username[80]; /* Temporary username until registration */
521 char accountcode[20]; /* Account code */
522 int amaflags; /* AMA Flags (for billing) */
523 char tohost[80]; /* If not dynamic, IP address */
524 char regexten[AST_MAX_EXTENSION]; /* Extension to register (if regcontext is used) */
525 char fromuser[80]; /* From: user when calling this peer */
526 char fromdomain[80]; /* From: domain when calling this peer */
527 char fullcontact[128]; /* Contact registred with us (not in sip.conf) */
528 char cid_num[80]; /* Caller ID num */
529 char cid_name[80]; /* Caller ID name */
530 int callingpres; /* Calling id presentation */
531 int inUse; /* Number of calls in use */
532 int incominglimit; /* Limit of incoming calls */
533 int outUse; /* disabled */
534 int outgoinglimit; /* disabled */
535 char mailbox[AST_MAX_EXTENSION]; /* Mailbox setting for MWI checks */
536 char language[MAX_LANGUAGE]; /* Default language for prompts */
537 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
538 char useragent[256]; /* User agent in SIP request (saved from registration) */
539 struct ast_codec_pref prefs; /* codec prefs */
541 time_t lastmsgcheck; /* Last time we checked for MWI */
542 unsigned int flags; /* SIP_ flags */
543 struct ast_flags flags_page2; /* SIP_PAGE2 flags */
544 int expire; /* When to expire this peer registration */
545 int expiry; /* Duration of registration */
546 int capability; /* Codec capability */
547 int rtptimeout; /* RTP timeout */
548 int rtpholdtimeout; /* RTP Hold Timeout */
549 int rtpkeepalive; /* Send RTP packets for keepalive */
550 ast_group_t callgroup; /* Call group */
551 ast_group_t pickupgroup; /* Pickup group */
552 struct sockaddr_in addr; /* IP address of peer */
556 struct sip_pvt *call; /* Call pointer */
557 int pokeexpire; /* When to expire poke (qualify= checking) */
558 int lastms; /* How long last response took (in ms), or -1 for no response */
559 int maxms; /* Max ms we will accept for the host to be up, 0 to not monitor */
560 struct timeval ps; /* Ping send time */
562 struct sockaddr_in defaddr; /* Default IP address, used until registration */
563 struct ast_ha *ha; /* Access control list */
564 struct ast_variable *chanvars; /* Variables to set for channel created by user */
568 AST_MUTEX_DEFINE_STATIC(sip_reload_lock);
569 static int sip_reloading = 0;
571 /* States for outbound registrations (with register= lines in sip.conf */
572 #define REG_STATE_UNREGISTERED 0
573 #define REG_STATE_REGSENT 1
574 #define REG_STATE_AUTHSENT 2
575 #define REG_STATE_REGISTERED 3
576 #define REG_STATE_REJECTED 4
577 #define REG_STATE_TIMEOUT 5
578 #define REG_STATE_NOAUTH 6
581 /* sip_registry: Registrations with other SIP proxies */
582 struct sip_registry {
583 ASTOBJ_COMPONENTS_FULL(struct sip_registry,1,1);
584 int portno; /* Optional port override */
585 char username[80]; /* Who we are registering as */
586 char authuser[80]; /* Who we *authenticate* as */
587 char hostname[80]; /* Domain or host we register to */
588 char secret[80]; /* Password or key name in []'s */
590 char contact[80]; /* Contact extension */
592 int expire; /* Sched ID of expiration */
593 int timeout; /* sched id of sip_reg_timeout */
594 int refresh; /* How often to refresh */
595 struct sip_pvt *call; /* create a sip_pvt structure for each outbound "registration call" in progress */
596 int regstate; /* Registration state (see above) */
597 int callid_valid; /* 0 means we haven't chosen callid for this registry yet. */
598 char callid[80]; /* Global CallID for this registry */
599 unsigned int ocseq; /* Sequence number we got to for REGISTERs for this registry */
600 struct sockaddr_in us; /* Who the server thinks we are */
603 char realm[256]; /* Authorization realm */
604 char nonce[256]; /* Authorization nonce */
605 char domain[256]; /* Authorization domain */
606 char opaque[256]; /* Opaque nonsense */
607 char qop[80]; /* Quality of Protection. */
609 char lastmsg[256]; /* Last Message sent/received */
612 /*--- The user list: Users and friends ---*/
613 static struct ast_user_list {
614 ASTOBJ_CONTAINER_COMPONENTS(struct sip_user);
617 /*--- The peer list: Peers and Friends ---*/
618 static struct ast_peer_list {
619 ASTOBJ_CONTAINER_COMPONENTS(struct sip_peer);
622 /*--- The register list: Other SIP proxys we register with and call ---*/
623 static struct ast_register_list {
624 ASTOBJ_CONTAINER_COMPONENTS(struct sip_registry);
629 static int __sip_do_register(struct sip_registry *r);
631 static int sipsock = -1;
634 static struct sockaddr_in bindaddr;
635 static struct sockaddr_in externip;
636 static char externhost[256] = "";
637 static time_t externexpire = 0;
638 static int externrefresh = 10;
639 static struct ast_ha *localaddr;
641 /* The list of manual NOTIFY types we know how to send */
642 struct ast_config *notify_types;
644 static struct sip_auth *authl; /* Authentication list */
647 static struct ast_frame *sip_read(struct ast_channel *ast);
648 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req);
649 static int transmit_response_with_sdp(struct sip_pvt *p, char *msg, struct sip_request *req, int retrans);
650 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *rand, int reliable, char *header);
651 static int transmit_request(struct sip_pvt *p, int sipmethod, int inc, int reliable, int newbranch);
652 static int transmit_request_with_auth(struct sip_pvt *p, int sipmethod, int inc, int reliable, int newbranch);
653 static int transmit_invite(struct sip_pvt *p, int sipmethod, int sendsdp, char *auth, char *authheader, char *vxml_url, char *distinctive_ring, char *osptoken, int addsipheaders, int init);
654 static int transmit_reinvite_with_sdp(struct sip_pvt *p);
655 static int transmit_info_with_digit(struct sip_pvt *p, char digit);
656 static int transmit_message_with_text(struct sip_pvt *p, const char *text);
657 static int transmit_refer(struct sip_pvt *p, const char *dest);
658 static int sip_sipredirect(struct sip_pvt *p, const char *dest);
659 static struct sip_peer *temp_peer(char *name);
660 static int do_proxy_auth(struct sip_pvt *p, struct sip_request *req, char *header, char *respheader, int sipmethod, int init);
661 static void free_old_route(struct sip_route *route);
662 static int build_reply_digest(struct sip_pvt *p, int method, char *digest, int digest_len);
663 static int update_user_counter(struct sip_pvt *fup, int event);
664 static void prune_peers(void);
665 static struct sip_peer *build_peer(const char *name, struct ast_variable *v, int realtime);
666 static struct sip_user *build_user(const char *name, struct ast_variable *v, int realtime);
667 static int sip_do_reload(void);
668 static int expire_register(void *data);
669 static int callevents = 0;
671 static struct ast_channel *sip_request(const char *type, int format, void *data, int *cause);
672 static int sip_devicestate(void *data);
673 static int sip_sendtext(struct ast_channel *ast, const char *text);
674 static int sip_call(struct ast_channel *ast, char *dest, int timeout);
675 static int sip_hangup(struct ast_channel *ast);
676 static int sip_answer(struct ast_channel *ast);
677 static struct ast_frame *sip_read(struct ast_channel *ast);
678 static int sip_write(struct ast_channel *ast, struct ast_frame *frame);
679 static int sip_indicate(struct ast_channel *ast, int condition);
680 static int sip_transfer(struct ast_channel *ast, const char *dest);
681 static int sip_fixup(struct ast_channel *oldchan, struct ast_channel *newchan);
682 static int sip_senddigit(struct ast_channel *ast, char digit);
683 static int clear_realm_authentication(struct sip_auth *authlist); /* Clear realm authentication list (at reload) */
684 static struct sip_auth *add_realm_authentication(struct sip_auth *authlist, char *configuration, int lineno); /* Add realm authentication in list */
685 static struct sip_auth *find_realm_authentication(struct sip_auth *authlist, char *realm); /* Find authentication for a specific realm */
687 /* Definition of this channel for channel registration */
688 static const struct ast_channel_tech sip_tech = {
690 .description = "Session Initiation Protocol (SIP)",
691 .capabilities = ((AST_FORMAT_MAX_AUDIO << 1) - 1),
692 .properties = AST_CHAN_TP_WANTSJITTER,
693 .requester = sip_request,
694 .devicestate = sip_devicestate,
696 .hangup = sip_hangup,
697 .answer = sip_answer,
700 .write_video = sip_write,
701 .indicate = sip_indicate,
702 .transfer = sip_transfer,
704 .send_digit = sip_senddigit,
705 .bridge = ast_rtp_bridge,
706 .send_text = sip_sendtext,
709 /*--- find_sip_method: Find SIP method from header */
710 int find_sip_method(char *msg)
713 /* Strictly speaking, SIP methods are case SENSITIVE, but we don't check */
714 for (i=1;(i < (sizeof(sip_methods) / sizeof(sip_methods[0]))) && !res; i++) {
715 if (!strcasecmp(sip_methods[i].text, msg))
716 res = sip_methods[i].id;
721 /*--- sip_debug_test_addr: See if we pass debug IP filter */
722 static inline int sip_debug_test_addr(struct sockaddr_in *addr)
726 if (debugaddr.sin_addr.s_addr) {
727 if (((ntohs(debugaddr.sin_port) != 0)
728 && (debugaddr.sin_port != addr->sin_port))
729 || (debugaddr.sin_addr.s_addr != addr->sin_addr.s_addr))
735 /*--- sip_debug_test_pvt: Test PVT for debugging output */
736 static inline int sip_debug_test_pvt(struct sip_pvt *p)
740 return sip_debug_test_addr(((ast_test_flag(p, SIP_NAT) & SIP_NAT_ROUTE) ? &p->recv : &p->sa));
744 /*--- __sip_xmit: Transmit SIP message ---*/
745 static int __sip_xmit(struct sip_pvt *p, char *data, int len)
748 char iabuf[INET_ADDRSTRLEN];
749 if (ast_test_flag(p, SIP_NAT) & SIP_NAT_ROUTE)
750 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->recv, sizeof(struct sockaddr_in));
752 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->sa, sizeof(struct sockaddr_in));
754 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));
759 static void sip_destroy(struct sip_pvt *p);
761 /*--- build_via: Build a Via header for a request ---*/
762 static void build_via(struct sip_pvt *p, char *buf, int len)
764 char iabuf[INET_ADDRSTRLEN];
766 /* z9hG4bK is a magic cookie. See RFC 3261 section 8.1.1.7 */
767 if (ast_test_flag(p, SIP_NAT) != SIP_NAT_NEVER)
768 snprintf(buf, len, "SIP/2.0/UDP %s:%d;branch=z9hG4bK%08x;rport", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ourport, p->branch);
769 else /* Work around buggy UNIDEN UIP200 firmware */
770 snprintf(buf, len, "SIP/2.0/UDP %s:%d;branch=z9hG4bK%08x", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ourport, p->branch);
773 /*--- ast_sip_ouraddrfor: NAT fix - decide which IP address to use for ASterisk server? ---*/
774 /* Only used for outbound registrations */
775 static int ast_sip_ouraddrfor(struct in_addr *them, struct in_addr *us)
778 * Using the localaddr structure built up with localnet statements
779 * apply it to their address to see if we need to substitute our
780 * externip or can get away with our internal bindaddr
782 struct sockaddr_in theirs;
783 theirs.sin_addr = *them;
784 if (localaddr && externip.sin_addr.s_addr &&
785 ast_apply_ha(localaddr, &theirs)) {
786 char iabuf[INET_ADDRSTRLEN];
787 if (externexpire && (time(NULL) >= externexpire)) {
788 struct ast_hostent ahp;
791 externexpire += externrefresh;
792 if ((hp = ast_gethostbyname(externhost, &ahp))) {
793 memcpy(&externip.sin_addr, hp->h_addr, sizeof(externip.sin_addr));
795 ast_log(LOG_NOTICE, "Warning: Re-lookup of '%s' failed!\n", externhost);
797 memcpy(us, &externip.sin_addr, sizeof(struct in_addr));
798 ast_inet_ntoa(iabuf, sizeof(iabuf), *(struct in_addr *)&them->s_addr);
799 ast_log(LOG_DEBUG, "Target address %s is not local, substituting externip\n", iabuf);
801 else if (bindaddr.sin_addr.s_addr)
802 memcpy(us, &bindaddr.sin_addr, sizeof(struct in_addr));
804 return ast_ouraddrfor(them, us);
808 /*--- append_history: Append to SIP dialog history */
809 static int append_history(struct sip_pvt *p, char *event, char *data)
811 struct sip_history *hist, *prev;
815 hist = malloc(sizeof(struct sip_history));
817 memset(hist, 0, sizeof(struct sip_history));
818 snprintf(hist->event, sizeof(hist->event), "%-15s %s", event, data);
822 if ((*c == '\r') || (*c == '\n')) {
828 /* Enqueue into history */
841 /*--- retrans_pkt: Retransmit SIP message if no answer ---*/
842 static int retrans_pkt(void *data)
844 struct sip_pkt *pkt=data, *prev, *cur;
846 char iabuf[INET_ADDRSTRLEN];
847 ast_mutex_lock(&pkt->owner->lock);
848 if (pkt->retrans < MAX_RETRANS) {
850 if (sip_debug_test_pvt(pkt->owner)) {
851 if (ast_test_flag(pkt->owner, SIP_NAT) & SIP_NAT_ROUTE)
852 ast_verbose("Retransmitting #%d (NAT) to %s:%d:\n%s\n---\n", pkt->retrans, ast_inet_ntoa(iabuf, sizeof(iabuf), pkt->owner->recv.sin_addr), ntohs(pkt->owner->recv.sin_port), pkt->data);
854 ast_verbose("Retransmitting #%d (no NAT) to %s:%d:\n%s\n---\n", pkt->retrans, ast_inet_ntoa(iabuf, sizeof(iabuf), pkt->owner->sa.sin_addr), ntohs(pkt->owner->sa.sin_port), pkt->data);
856 append_history(pkt->owner, "ReTx", pkt->data);
857 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
860 ast_log(LOG_WARNING, "Maximum retries exceeded on call %s for seqno %d (%s %s)\n", pkt->owner->callid, pkt->seqno, (ast_test_flag(pkt, FLAG_FATAL)) ? "Critical" : "Non-critical", (ast_test_flag(pkt, FLAG_RESPONSE)) ? "Response" : "Request");
861 append_history(pkt->owner, "MaxRetries", (ast_test_flag(pkt, FLAG_FATAL)) ? "(Critical)" : "(Non-critical)");
863 if (ast_test_flag(pkt, FLAG_FATAL)) {
864 while(pkt->owner->owner && ast_mutex_trylock(&pkt->owner->owner->lock)) {
865 ast_mutex_unlock(&pkt->owner->lock);
867 ast_mutex_lock(&pkt->owner->lock);
869 if (pkt->owner->owner) {
870 ast_set_flag(pkt->owner, SIP_ALREADYGONE);
871 ast_queue_hangup(pkt->owner->owner);
872 ast_mutex_unlock(&pkt->owner->owner->lock);
874 /* If no owner, destroy now */
875 ast_set_flag(pkt->owner, SIP_NEEDDESTROY);
878 /* In any case, go ahead and remove the packet */
880 cur = pkt->owner->packets;
889 prev->next = cur->next;
891 pkt->owner->packets = cur->next;
892 ast_mutex_unlock(&pkt->owner->lock);
896 ast_log(LOG_WARNING, "Weird, couldn't find packet owner!\n");
899 ast_mutex_unlock(&pkt->owner->lock);
903 /*--- __sip_reliable_xmit: transmit packet with retransmits ---*/
904 static int __sip_reliable_xmit(struct sip_pvt *p, int seqno, int resp, char *data, int len, int fatal)
907 pkt = malloc(sizeof(struct sip_pkt) + len + 1);
910 memset(pkt, 0, sizeof(struct sip_pkt));
911 memcpy(pkt->data, data, len);
912 pkt->packetlen = len;
913 pkt->next = p->packets;
917 pkt->data[len] = '\0';
919 ast_set_flag(pkt, FLAG_FATAL);
920 /* Schedule retransmission */
921 pkt->retransid = ast_sched_add(sched, DEFAULT_RETRANS, retrans_pkt, pkt);
922 pkt->next = p->packets;
924 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
925 if (!strncasecmp(pkt->data, "INVITE", 6)) {
926 /* Note this is a pending invite */
927 p->pendinginvite = seqno;
932 /*--- __sip_autodestruct: Kill a call (called by scheduler) ---*/
933 static int __sip_autodestruct(void *data)
935 struct sip_pvt *p = data;
937 ast_log(LOG_DEBUG, "Auto destroying call '%s'\n", p->callid);
938 append_history(p, "AutoDestroy", "");
940 ast_log(LOG_WARNING, "Autodestruct on call '%s' with owner in place\n", p->callid);
941 ast_queue_hangup(p->owner);
948 /*--- sip_scheddestroy: Schedule destruction of SIP call ---*/
949 static int sip_scheddestroy(struct sip_pvt *p, int ms)
952 if (sip_debug_test_pvt(p))
953 ast_verbose("Scheduling destruction of call '%s' in %d ms\n", p->callid, ms);
955 snprintf(tmp, sizeof(tmp), "%d ms", ms);
956 append_history(p, "SchedDestroy", tmp);
958 if (p->autokillid > -1)
959 ast_sched_del(sched, p->autokillid);
960 p->autokillid = ast_sched_add(sched, ms, __sip_autodestruct, p);
964 /*--- sip_cancel_destroy: Cancel destruction of SIP call ---*/
965 static int sip_cancel_destroy(struct sip_pvt *p)
967 if (p->autokillid > -1)
968 ast_sched_del(sched, p->autokillid);
969 append_history(p, "CancelDestroy", "");
974 /*--- __sip_ack: Acknowledges receipt of a packet and stops retransmission ---*/
975 static int __sip_ack(struct sip_pvt *p, int seqno, int resp, int sipmethod)
977 struct sip_pkt *cur, *prev = NULL;
980 /* Just in case... */
984 msg = sip_methods[sipmethod].text;
989 if ((cur->seqno == seqno) && ((ast_test_flag(cur, FLAG_RESPONSE)) == resp) &&
990 ((ast_test_flag(cur, FLAG_RESPONSE)) ||
991 (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
992 if (!resp && (seqno == p->pendinginvite)) {
993 ast_log(LOG_DEBUG, "Acked pending invite %d\n", p->pendinginvite);
994 p->pendinginvite = 0;
997 /* this is our baby */
999 prev->next = cur->next;
1001 p->packets = cur->next;
1002 if (cur->retransid > -1)
1003 ast_sched_del(sched, cur->retransid);
1011 ast_log(LOG_DEBUG, "Stopping retransmission on '%s' of %s %d: %s\n", p->callid, resp ? "Response" : "Request", seqno, res ? "Not Found" : "Found");
1015 /* Pretend to ack all packets */
1016 static int __sip_pretend_ack(struct sip_pvt *p)
1020 __sip_ack(p, p->packets->seqno, (ast_test_flag(p->packets, FLAG_RESPONSE)), find_sip_method(p->packets->data));
1025 /*--- __sip_semi_ack: Acks receipt of packet, keep it around (used for provisional responses) ---*/
1026 static int __sip_semi_ack(struct sip_pvt *p, int seqno, int resp, int sipmethod)
1028 struct sip_pkt *cur;
1030 char *msg = sip_methods[sipmethod].text;
1034 if ((cur->seqno == seqno) && ((ast_test_flag(cur, FLAG_RESPONSE)) == resp) &&
1035 ((ast_test_flag(cur, FLAG_RESPONSE)) ||
1036 (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
1037 /* this is our baby */
1038 if (cur->retransid > -1)
1039 ast_sched_del(sched, cur->retransid);
1040 cur->retransid = -1;
1046 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");
1050 static void parse(struct sip_request *req);
1051 static char *get_header(struct sip_request *req, char *name);
1052 static void copy_request(struct sip_request *dst,struct sip_request *src);
1054 static void parse_copy(struct sip_request *dst, struct sip_request *src)
1056 memset(dst, 0, sizeof(*dst));
1057 memcpy(dst->data, src->data, sizeof(dst->data));
1058 dst->len = src->len;
1061 /*--- send_response: Transmit response on SIP request---*/
1062 static int send_response(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
1065 char iabuf[INET_ADDRSTRLEN];
1066 struct sip_request tmp;
1068 if (sip_debug_test_pvt(p)) {
1069 if (ast_test_flag(p, SIP_NAT) & SIP_NAT_ROUTE)
1070 ast_verbose("%sTransmitting (NAT) to %s:%d:\n%s\n---\n", reliable ? "Reliably " : "", ast_inet_ntoa(iabuf, sizeof(iabuf), p->recv.sin_addr), ntohs(p->recv.sin_port), req->data);
1072 ast_verbose("%sTransmitting (no NAT) to %s:%d:\n%s\n---\n", reliable ? "Reliably " : "", ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr), ntohs(p->sa.sin_port), req->data);
1075 if (recordhistory) {
1076 parse_copy(&tmp, req);
1077 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
1078 append_history(p, "TxRespRel", tmpmsg);
1080 res = __sip_reliable_xmit(p, seqno, 1, req->data, req->len, (reliable > 1));
1082 if (recordhistory) {
1083 parse_copy(&tmp, req);
1084 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
1085 append_history(p, "TxResp", tmpmsg);
1087 res = __sip_xmit(p, req->data, req->len);
1094 /*--- send_request: Send SIP Request to the other part of the dialogue ---*/
1095 static int send_request(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
1098 char iabuf[INET_ADDRSTRLEN];
1099 struct sip_request tmp;
1101 if (sip_debug_test_pvt(p)) {
1102 if (ast_test_flag(p, SIP_NAT) & SIP_NAT_ROUTE)
1103 ast_verbose("%sTransmitting (NAT) to %s:%d:\n%s\n---\n", reliable ? "Reliably " : "", ast_inet_ntoa(iabuf, sizeof(iabuf), p->recv.sin_addr), ntohs(p->recv.sin_port), req->data);
1105 ast_verbose("%sTransmitting (no NAT) to %s:%d:\n%s\n---\n", reliable ? "Reliably " : "", ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr), ntohs(p->sa.sin_port), req->data);
1108 if (recordhistory) {
1109 parse_copy(&tmp, req);
1110 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
1111 append_history(p, "TxReqRel", tmpmsg);
1113 res = __sip_reliable_xmit(p, seqno, 0, req->data, req->len, (reliable > 1));
1115 if (recordhistory) {
1116 parse_copy(&tmp, req);
1117 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
1118 append_history(p, "TxReq", tmpmsg);
1120 res = __sip_xmit(p, req->data, req->len);
1125 /*--- url_decode: Decode SIP URL ---*/
1126 static void url_decode(char *s)
1133 if (strlen(s) > 2) {
1134 if (sscanf(s + 1, "%2x", &tmp) == 1) {
1136 s += 2; /* Will be incremented once more when we break out */
1140 /* Fall through if something wasn't right with the formatting */
1150 /*--- ditch_braces: Pick out text in braces from character string ---*/
1151 static char *ditch_braces(char *tmp)
1156 if ((q = strchr(tmp, '"')) ) {
1158 if ((q = strchr(c, '"')) )
1161 ast_log(LOG_WARNING, "No closing quote in '%s'\n", tmp);
1165 if ((n = strchr(c, '<')) ) {
1167 while(*c && *c != '>') c++;
1169 ast_log(LOG_WARNING, "No closing brace in '%s'\n", tmp);
1178 /*--- sip_sendtext: Send SIP MESSAGE text within a call ---*/
1179 /* Called from PBX core text message functions */
1180 static int sip_sendtext(struct ast_channel *ast, const char *text)
1182 struct sip_pvt *p = ast->tech_pvt;
1183 int debug=sip_debug_test_pvt(p);
1186 ast_verbose("Sending text %s on %s\n", text, ast->name);
1189 if (!text || ast_strlen_zero(text))
1192 ast_verbose("Really sending text %s on %s\n", text, ast->name);
1193 transmit_message_with_text(p, text);
1197 /*--- realtime_update_peer: Update peer object in realtime storage ---*/
1198 static void realtime_update_peer(const char *peername, struct sockaddr_in *sin, const char *username, int expirey)
1201 char ipaddr[20] = "";
1202 char regseconds[20] = "0";
1204 if (expirey) { /* Registration */
1208 snprintf(regseconds, sizeof(regseconds), "%ld", nowtime); /* Expiration time */
1209 ast_inet_ntoa(ipaddr, sizeof(ipaddr), sin->sin_addr);
1210 snprintf(port, sizeof(port), "%d", ntohs(sin->sin_port));
1212 ast_update_realtime("sippeers", "name", peername, "ipaddr", ipaddr, "port", port, "regseconds", regseconds, "username", username, NULL);
1215 /*--- register_peer_exten: Automatically add peer extension to dial plan ---*/
1216 static void register_peer_exten(struct sip_peer *peer, int onoff)
1218 unsigned char multi[256]="";
1219 char *stringp, *ext;
1220 if (!ast_strlen_zero(regcontext)) {
1221 strncpy(multi, ast_strlen_zero(peer->regexten) ? peer->name : peer->regexten, sizeof(multi) - 1);
1223 while((ext = strsep(&stringp, "&"))) {
1225 ast_add_extension(regcontext, 1, ext, 1, NULL, NULL, "Noop", strdup(peer->name), free, channeltype);
1227 ast_context_remove_extension(regcontext, ext, 1, NULL);
1232 /*--- sip_destroy_peer: Destroy peer object from memory */
1233 static void sip_destroy_peer(struct sip_peer *peer)
1235 /* Delete it, it needs to disappear */
1237 sip_destroy(peer->call);
1238 if(peer->chanvars) {
1239 ast_variables_destroy(peer->chanvars);
1240 peer->chanvars = NULL;
1242 if (peer->expire > -1)
1243 ast_sched_del(sched, peer->expire);
1244 if (peer->pokeexpire > -1)
1245 ast_sched_del(sched, peer->pokeexpire);
1246 register_peer_exten(peer, 0);
1247 ast_free_ha(peer->ha);
1248 if (ast_test_flag(peer, SIP_SELFDESTRUCT))
1250 else if (ast_test_flag(peer, SIP_REALTIME))
1254 clear_realm_authentication(peer->auth);
1255 peer->auth = (struct sip_auth *) NULL;
1259 /*--- update_peer: Update peer data in database (if used) ---*/
1260 static void update_peer(struct sip_peer *p, int expiry)
1262 if (!ast_test_flag((&global_flags_page2), SIP_PAGE2_RTNOUPDATE) &&
1263 (ast_test_flag(p, SIP_REALTIME) ||
1264 ast_test_flag(&(p->flags_page2), SIP_PAGE2_RTCACHEFRIENDS))) {
1265 if (p->expire == -1)
1266 expiry = 0; /* Unregister realtime peer */
1267 realtime_update_peer(p->name, &p->addr, p->username, expiry);
1272 /*--- realtime_peer: Get peer from realtime storage ---*/
1273 /* Checks the "sippeers" realtime family from extconfig.conf */
1274 static struct sip_peer *realtime_peer(const char *peername, struct sockaddr_in *sin)
1276 struct sip_peer *peer=NULL;
1277 struct ast_variable *var;
1278 struct ast_variable *tmp;
1279 char *newpeername = (char *) peername;
1280 char iabuf[80] = "";
1282 /* First check on peer name */
1284 var = ast_load_realtime("sippeers", "name", peername, NULL);
1285 else if (sin) { /* Then check on IP address */
1286 ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr);
1287 var = ast_load_realtime("sippeers", "ipaddr", iabuf, NULL);
1295 /* If this is type=user, then skip this object. */
1297 if (!strcasecmp(tmp->name, "type") &&
1298 !strcasecmp(tmp->value, "user")) {
1299 ast_variables_destroy(var);
1301 } else if(!newpeername && !strcasecmp(tmp->name, "name")) {
1302 newpeername = tmp->value;
1308 peer = build_peer(newpeername, var, ast_test_flag((&global_flags_page2), SIP_PAGE2_RTCACHEFRIENDS) ? 0 : 1);
1311 if(ast_test_flag((&global_flags_page2), SIP_PAGE2_RTCACHEFRIENDS)) {
1312 ast_copy_flags((&peer->flags_page2),(&global_flags_page2), SIP_PAGE2_RTAUTOCLEAR|SIP_PAGE2_RTCACHEFRIENDS);
1313 if(ast_test_flag((&global_flags_page2), SIP_PAGE2_RTAUTOCLEAR)) {
1314 if (peer->expire > -1) {
1315 ast_sched_del(sched, peer->expire);
1317 peer->expire = ast_sched_add(sched, (global_rtautoclear) * 1000, expire_register, (void *)peer);
1319 ASTOBJ_CONTAINER_LINK(&peerl,peer);
1321 ast_set_flag(peer, SIP_REALTIME);
1325 ast_log(LOG_WARNING, "Cannot Determine peer name ip=%s\n", iabuf);
1328 ast_variables_destroy(var);
1332 /*--- sip_addrcmp: Support routine for find_peer ---*/
1333 static int sip_addrcmp(char *name, struct sockaddr_in *sin)
1335 /* We know name is the first field, so we can cast */
1336 struct sip_peer *p = (struct sip_peer *)name;
1337 return !(!inaddrcmp(&p->addr, sin) ||
1338 (ast_test_flag(p, SIP_INSECURE) &&
1339 (p->addr.sin_addr.s_addr == sin->sin_addr.s_addr)));
1342 /*--- find_peer: Locate peer by name or ip address */
1343 static struct sip_peer *find_peer(const char *peer, struct sockaddr_in *sin, int realtime)
1345 struct sip_peer *p = NULL;
1348 p = ASTOBJ_CONTAINER_FIND(&peerl,peer);
1350 p = ASTOBJ_CONTAINER_FIND_FULL(&peerl,sin,name,sip_addr_hashfunc,1,sip_addrcmp);
1352 if (!p && realtime) {
1353 p = realtime_peer(peer, sin);
1359 /*--- sip_destroy_user: Remove user object from in-memory storage ---*/
1360 static void sip_destroy_user(struct sip_user *user)
1362 ast_free_ha(user->ha);
1363 if(user->chanvars) {
1364 ast_variables_destroy(user->chanvars);
1365 user->chanvars = NULL;
1367 if (ast_test_flag(user, SIP_REALTIME))
1374 /*--- realtime_user: Load user from realtime storage ---*/
1375 /* Loads user from "sipusers" category in realtime (extconfig.conf) */
1376 /* Users are matched on From: user name (the domain in skipped) */
1377 static struct sip_user *realtime_user(const char *username)
1379 struct ast_variable *var;
1380 struct ast_variable *tmp;
1381 struct sip_user *user = NULL;
1383 var = ast_load_realtime("sipusers", "name", username, NULL);
1390 if (!strcasecmp(tmp->name, "type") &&
1391 !strcasecmp(tmp->value, "peer")) {
1392 ast_variables_destroy(var);
1400 user = build_user(username, var, !ast_test_flag((&global_flags_page2), SIP_PAGE2_RTCACHEFRIENDS));
1403 /* Add some finishing touches, addresses, etc */
1404 if(ast_test_flag((&global_flags_page2), SIP_PAGE2_RTCACHEFRIENDS)) {
1407 ASTOBJ_CONTAINER_LINK(&userl,user);
1409 /* Move counter from s to r... */
1412 ast_set_flag(user, SIP_REALTIME);
1415 ast_variables_destroy(var);
1419 /*--- find_user: Locate user by name ---*/
1420 /* Locates user by name (From: sip uri user name part) first
1421 from in-memory list (static configuration) then from
1422 realtime storage (defined in extconfig.conf) */
1423 static struct sip_user *find_user(const char *name, int realtime)
1425 struct sip_user *u = NULL;
1426 u = ASTOBJ_CONTAINER_FIND(&userl,name);
1427 if (!u && realtime) {
1428 u = realtime_user(name);
1433 /*--- create_addr: create address structure from peer definition ---*/
1434 /* Or, if peer not found, find it in the global DNS */
1435 /* returns TRUE on failure, FALSE on success */
1436 static int create_addr(struct sip_pvt *r, char *opeer)
1439 struct ast_hostent ahp;
1445 char host[256], *hostn;
1448 strncpy(peer, opeer, sizeof(peer) - 1);
1449 port = strchr(peer, ':');
1454 r->sa.sin_family = AF_INET;
1455 p = find_peer(peer, NULL, 1);
1459 ast_copy_flags(r, p, SIP_PROMISCREDIR | SIP_USEREQPHONE | SIP_DTMF | SIP_NAT | SIP_REINVITE | SIP_INSECURE);
1460 r->capability = p->capability;
1462 ast_log(LOG_DEBUG, "Setting NAT on RTP to %d\n", (ast_test_flag(r, SIP_NAT) & SIP_NAT_ROUTE));
1463 ast_rtp_setnat(r->rtp, (ast_test_flag(r, SIP_NAT) & SIP_NAT_ROUTE));
1466 ast_log(LOG_DEBUG, "Setting NAT on VRTP to %d\n", (ast_test_flag(r, SIP_NAT) & SIP_NAT_ROUTE));
1467 ast_rtp_setnat(r->vrtp, (ast_test_flag(r, SIP_NAT) & SIP_NAT_ROUTE));
1469 strncpy(r->peername, p->username, sizeof(r->peername)-1);
1470 strncpy(r->authname, p->username, sizeof(r->authname)-1);
1471 strncpy(r->username, p->username, sizeof(r->username)-1);
1472 strncpy(r->peersecret, p->secret, sizeof(r->peersecret)-1);
1473 strncpy(r->peermd5secret, p->md5secret, sizeof(r->peermd5secret)-1);
1474 strncpy(r->tohost, p->tohost, sizeof(r->tohost)-1);
1475 strncpy(r->fullcontact, p->fullcontact, sizeof(r->fullcontact)-1);
1476 if (!r->initreq.headers && !ast_strlen_zero(p->fromdomain)) {
1477 if ((callhost = strchr(r->callid, '@'))) {
1478 strncpy(callhost + 1, p->fromdomain, sizeof(r->callid) - (callhost - r->callid) - 2);
1481 if (ast_strlen_zero(r->tohost)) {
1482 if (p->addr.sin_addr.s_addr)
1483 ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->addr.sin_addr);
1485 ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->defaddr.sin_addr);
1487 if (!ast_strlen_zero(p->fromdomain))
1488 strncpy(r->fromdomain, p->fromdomain, sizeof(r->fromdomain)-1);
1489 if (!ast_strlen_zero(p->fromuser))
1490 strncpy(r->fromuser, p->fromuser, sizeof(r->fromuser)-1);
1491 r->maxtime = p->maxms;
1492 r->callgroup = p->callgroup;
1493 r->pickupgroup = p->pickupgroup;
1494 if (ast_test_flag(r, SIP_DTMF) == SIP_DTMF_RFC2833)
1495 r->noncodeccapability |= AST_RTP_DTMF;
1497 r->noncodeccapability &= ~AST_RTP_DTMF;
1498 strncpy(r->context, p->context,sizeof(r->context)-1);
1499 if ((p->addr.sin_addr.s_addr || p->defaddr.sin_addr.s_addr) &&
1500 (!p->maxms || ((p->lastms >= 0) && (p->lastms <= p->maxms)))) {
1501 if (p->addr.sin_addr.s_addr) {
1502 r->sa.sin_addr = p->addr.sin_addr;
1503 r->sa.sin_port = p->addr.sin_port;
1505 r->sa.sin_addr = p->defaddr.sin_addr;
1506 r->sa.sin_port = p->defaddr.sin_port;
1508 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1510 ASTOBJ_UNREF(p,sip_destroy_peer);
1516 portno = atoi(port);
1518 portno = DEFAULT_SIP_PORT;
1523 snprintf(service, sizeof(service), "_sip._udp.%s", peer);
1524 ret = ast_get_srv(NULL, host, sizeof(host), &tportno, service);
1530 hp = ast_gethostbyname(hostn, &ahp);
1532 strncpy(r->tohost, peer, sizeof(r->tohost) - 1);
1533 memcpy(&r->sa.sin_addr, hp->h_addr, sizeof(r->sa.sin_addr));
1534 r->sa.sin_port = htons(portno);
1535 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1538 ast_log(LOG_WARNING, "No such host: %s\n", peer);
1544 ASTOBJ_UNREF(p,sip_destroy_peer);
1549 /*--- auto_congest: Scheduled congestion on a call ---*/
1550 static int auto_congest(void *nothing)
1552 struct sip_pvt *p = nothing;
1553 ast_mutex_lock(&p->lock);
1556 if (!ast_mutex_trylock(&p->owner->lock)) {
1557 ast_log(LOG_NOTICE, "Auto-congesting %s\n", p->owner->name);
1558 ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
1559 ast_mutex_unlock(&p->owner->lock);
1562 ast_mutex_unlock(&p->lock);
1569 /*--- sip_call: Initiate SIP call from PBX ---*/
1570 /* used from the dial() application */
1571 static int sip_call(struct ast_channel *ast, char *dest, int timeout)
1575 char *vxml_url = NULL;
1576 char *distinctive_ring = NULL;
1577 char *osptoken = NULL;
1579 char *osphandle = NULL;
1581 struct varshead *headp;
1582 struct ast_var_t *current;
1583 int addsipheaders = 0;
1586 if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) {
1587 ast_log(LOG_WARNING, "sip_call called on %s, neither down nor reserved\n", ast->name);
1590 /* Check whether there is vxml_url, distinctive ring variables */
1592 headp=&ast->varshead;
1593 AST_LIST_TRAVERSE(headp,current,entries) {
1594 /* Check whether there is a VXML_URL variable */
1595 if (!vxml_url && !strcasecmp(ast_var_name(current),"VXML_URL")) {
1596 vxml_url = ast_var_value(current);
1597 } else if (!distinctive_ring && !strcasecmp(ast_var_name(current),"ALERT_INFO")) {
1598 /* Check whether there is a ALERT_INFO variable */
1599 distinctive_ring = ast_var_value(current);
1600 } else if (!addsipheaders && !strncasecmp(ast_var_name(current),"SIPADDHEADER",strlen("SIPADDHEADER"))) {
1601 /* Check whether there is a variable with a name starting with SIPADDHEADER */
1607 else if (!osptoken && !strcasecmp(ast_var_name(current), "OSPTOKEN")) {
1608 osptoken = ast_var_value(current);
1609 } else if (!osphandle && !strcasecmp(ast_var_name(current), "OSPHANDLE")) {
1610 osphandle = ast_var_value(current);
1616 ast_set_flag(p, SIP_OUTGOING);
1618 if (!osptoken || !osphandle || (sscanf(osphandle, "%i", &p->osphandle) != 1)) {
1619 /* Force Disable OSP support */
1620 ast_log(LOG_DEBUG, "Disabling OSP support for this call. osptoken = %s, osphandle = %s\n", osptoken, osphandle);
1626 ast_log(LOG_DEBUG, "Outgoing Call for %s\n", p->username);
1627 res = update_user_counter(p,INC_OUT_USE);
1629 p->callingpres = ast->cid.cid_pres;
1630 p->jointcapability = p->capability;
1631 transmit_invite(p, SIP_INVITE, 1, NULL, NULL, vxml_url,distinctive_ring, osptoken, addsipheaders, 1);
1633 /* Initialize auto-congest time */
1634 p->initid = ast_sched_add(sched, p->maxtime * 4, auto_congest, p);
1640 /*--- sip_registry_destroy: Destroy registry object ---*/
1641 /* Objects created with the register= statement in static configuration */
1642 static void sip_registry_destroy(struct sip_registry *reg)
1646 /* Clear registry before destroying to ensure
1647 we don't get reentered trying to grab the registry lock */
1648 reg->call->registry = NULL;
1649 sip_destroy(reg->call);
1651 if (reg->expire > -1)
1652 ast_sched_del(sched, reg->expire);
1653 if (reg->timeout > -1)
1654 ast_sched_del(sched, reg->timeout);
1660 /*--- __sip_destroy: Execute destrucion of call structure, release memory---*/
1661 static void __sip_destroy(struct sip_pvt *p, int lockowner)
1663 struct sip_pvt *cur, *prev = NULL;
1665 struct sip_history *hist;
1667 if (sip_debug_test_pvt(p))
1668 ast_verbose("Destroying call '%s'\n", p->callid);
1669 if (p->stateid > -1)
1670 ast_extension_state_del(p->stateid, NULL);
1672 ast_sched_del(sched, p->initid);
1673 if (p->autokillid > -1)
1674 ast_sched_del(sched, p->autokillid);
1677 ast_rtp_destroy(p->rtp);
1680 ast_rtp_destroy(p->vrtp);
1683 free_old_route(p->route);
1687 if (p->registry->call == p)
1688 p->registry->call = NULL;
1689 ASTOBJ_UNREF(p->registry,sip_registry_destroy);
1691 /* Unlink us from the owner if we have one */
1694 ast_mutex_lock(&p->owner->lock);
1695 ast_log(LOG_DEBUG, "Detaching from %s\n", p->owner->name);
1696 p->owner->tech_pvt = NULL;
1698 ast_mutex_unlock(&p->owner->lock);
1703 p->history = p->history->next;
1710 prev->next = cur->next;
1719 ast_log(LOG_WARNING, "%p is not in list?!?! \n", cur);
1722 ast_sched_del(sched, p->initid);
1723 while((cp = p->packets)) {
1724 p->packets = p->packets->next;
1725 if (cp->retransid > -1)
1726 ast_sched_del(sched, cp->retransid);
1729 ast_mutex_destroy(&p->lock);
1731 ast_variables_destroy(p->chanvars);
1738 /*--- update_user_counter: Handle incominglimit and outgoinglimit for SIP users ---*/
1739 /* Note: This is going to be replaced by app_groupcount */
1740 /* Thought: For realtime, we should propably update storage with inuse counter... */
1741 static int update_user_counter(struct sip_pvt *fup, int event)
1743 char name[256] = "";
1746 int *inuse, *incominglimit;
1748 /* Test if we need to check call limits, in order to avoid
1749 realtime lookups if we do not need it */
1750 if (!ast_test_flag(fup, SIP_CALL_LIMIT))
1753 strncpy(name, fup->username, sizeof(name) - 1);
1755 /* Check the list of users */
1756 u = find_user(name, 1);
1759 incominglimit = &u->incominglimit;
1762 /* Try to find peer */
1763 p = find_peer(fup->peername, NULL, 1);
1766 incominglimit = &p->incominglimit;
1767 strncpy(name, fup->peername, sizeof(name) -1);
1769 ast_log(LOG_DEBUG, "%s is not a local user\n", name);
1774 /* incoming and outgoing affects the inUse counter */
1785 if (*incominglimit > 0 ) {
1786 if (*inuse >= *incominglimit) {
1787 ast_log(LOG_ERROR, "Call from %s '%s' rejected due to usage limit of %d\n", u?"user":"peer", name, *incominglimit);
1788 /* inc inUse as well */
1789 if ( event == INC_OUT_USE ) {
1793 ASTOBJ_UNREF(u,sip_destroy_user);
1795 ASTOBJ_UNREF(p,sip_destroy_peer);
1800 ast_log(LOG_DEBUG, "Call from %s '%s' is %d out of %d\n", u?"user":"peer", name, *inuse, *incominglimit);
1802 #ifdef DISABLED_CODE
1803 /* we don't use these anymore */
1805 if ( u->outUse > 0 ) {
1812 if ( u->outgoinglimit > 0 ) {
1813 if ( u->outUse >= u->outgoinglimit ) {
1814 ast_log(LOG_ERROR, "Outgoing call from user '%s' rejected due to usage limit of %d\n", u->name, u->outgoinglimit);
1815 ast_mutex_unlock(&userl.lock);
1826 ast_log(LOG_ERROR, "update_user_counter(%s,%d) called with no event!\n",name,event);
1829 ASTOBJ_UNREF(u,sip_destroy_user);
1831 ASTOBJ_UNREF(p,sip_destroy_peer);
1835 /*--- sip_destroy: Destroy SIP call structure ---*/
1836 static void sip_destroy(struct sip_pvt *p)
1838 ast_mutex_lock(&iflock);
1839 __sip_destroy(p, 1);
1840 ast_mutex_unlock(&iflock);
1844 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal);
1846 /*--- hangup_sip2cause: Convert SIP hangup causes to Asterisk hangup causes ---*/
1847 static int hangup_sip2cause(int cause)
1849 /* Possible values from causes.h
1850 AST_CAUSE_NOTDEFINED AST_CAUSE_NORMAL AST_CAUSE_BUSY
1851 AST_CAUSE_FAILURE AST_CAUSE_CONGESTION AST_CAUSE_UNALLOCATED
1855 case 404: /* Not found */
1856 return AST_CAUSE_UNALLOCATED;
1857 case 483: /* Too many hops */
1858 return AST_CAUSE_FAILURE;
1860 return AST_CAUSE_BUSY;
1862 return AST_CAUSE_NORMAL;
1868 /*--- hangup_cause2sip: Convert Asterisk hangup causes to SIP codes ---*/
1869 static char *hangup_cause2sip(int cause)
1873 case AST_CAUSE_FAILURE:
1874 return "500 Server internal failure";
1875 case AST_CAUSE_CONGESTION:
1876 return "503 Service Unavailable";
1877 case AST_CAUSE_BUSY:
1886 /*--- sip_hangup: Hangup SIP call ---*/
1887 /* Part of PBX interface */
1888 static int sip_hangup(struct ast_channel *ast)
1890 struct sip_pvt *p = ast->tech_pvt;
1892 struct ast_flags locflags = {0};
1894 ast_log(LOG_DEBUG, "sip_hangup(%s)\n", ast->name);
1896 ast_log(LOG_DEBUG, "Asked to hangup channel not connected\n");
1899 ast_mutex_lock(&p->lock);
1901 if ((p->osphandle > -1) && (ast->_state == AST_STATE_UP)) {
1902 ast_osp_terminate(p->osphandle, AST_CAUSE_NORMAL, p->ospstart, time(NULL) - p->ospstart);
1905 if (ast_test_flag(p, SIP_OUTGOING)) {
1906 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement outUse counter\n", p->username);
1907 update_user_counter(p, DEC_OUT_USE);
1909 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement inUse counter\n", p->username);
1910 update_user_counter(p, DEC_IN_USE);
1912 /* Determine how to disconnect */
1913 if (p->owner != ast) {
1914 ast_log(LOG_WARNING, "Huh? We aren't the owner?\n");
1915 ast_mutex_unlock(&p->lock);
1918 if (ast->_state != AST_STATE_UP)
1923 ast_dsp_free(p->vad);
1926 ast->tech_pvt = NULL;
1928 ast_mutex_lock(&usecnt_lock);
1930 ast_mutex_unlock(&usecnt_lock);
1931 ast_update_use_count();
1933 ast_set_flag(&locflags, SIP_NEEDDESTROY);
1934 /* Start the process if it's not already started */
1935 if (!ast_test_flag(p, SIP_ALREADYGONE) && !ast_strlen_zero(p->initreq.data)) {
1937 if (ast_test_flag(p, SIP_OUTGOING)) {
1938 transmit_request_with_auth(p, SIP_CANCEL, p->ocseq, 1, 0);
1939 /* Actually don't destroy us yet, wait for the 487 on our original
1940 INVITE, but do set an autodestruct just in case we never get it. */
1941 ast_clear_flag(&locflags, SIP_NEEDDESTROY);
1942 sip_scheddestroy(p, 15000);
1943 if ( p->initid != -1 ) {
1944 /* channel still up - reverse dec of inUse counter
1945 only if the channel is not auto-congested */
1946 if (ast_test_flag(p, SIP_OUTGOING)) {
1947 update_user_counter(p, INC_OUT_USE);
1950 update_user_counter(p, INC_IN_USE);
1955 if (ast->hangupcause && ((res = hangup_cause2sip(ast->hangupcause)))) {
1956 transmit_response_reliable(p, res, &p->initreq, 1);
1958 transmit_response_reliable(p, "403 Forbidden", &p->initreq, 1);
1961 if (!p->pendinginvite) {
1963 transmit_request_with_auth(p, SIP_BYE, 0, 1, 1);
1965 /* Note we will need a BYE when this all settles out
1966 but we can't send one while we have "INVITE" outstanding. */
1967 ast_set_flag(p, SIP_PENDINGBYE);
1968 ast_clear_flag(p, SIP_NEEDREINVITE);
1972 ast_copy_flags(p, (&locflags), SIP_NEEDDESTROY);
1973 ast_mutex_unlock(&p->lock);
1977 /*--- sip_answer: Answer SIP call , send 200 OK on Invite ---*/
1978 /* Part of PBX interface */
1979 static int sip_answer(struct ast_channel *ast)
1983 struct sip_pvt *p = ast->tech_pvt;
1985 ast_mutex_lock(&p->lock);
1986 if (ast->_state != AST_STATE_UP) {
1991 codec=pbx_builtin_getvar_helper(p->owner,"SIP_CODEC");
1993 fmt=ast_getformatbyname(codec);
1995 ast_log(LOG_NOTICE, "Changing codec to '%s' for this call because of ${SIP_CODEC) variable\n",codec);
1996 if (p->jointcapability & fmt) {
1997 p->jointcapability &= fmt;
1998 p->capability &= fmt;
2000 ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because it is not shared by both ends.\n");
2001 } else ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because of unrecognized/not configured codec (check allow/disallow in sip.conf): %s\n",codec);
2004 ast_setstate(ast, AST_STATE_UP);
2006 ast_log(LOG_DEBUG, "sip_answer(%s)\n", ast->name);
2007 res = transmit_response_with_sdp(p, "200 OK", &p->initreq, 1);
2009 ast_mutex_unlock(&p->lock);
2013 /*--- sip_write: Send response, support audio media ---*/
2014 static int sip_write(struct ast_channel *ast, struct ast_frame *frame)
2016 struct sip_pvt *p = ast->tech_pvt;
2018 if (frame->frametype == AST_FRAME_VOICE) {
2019 if (!(frame->subclass & ast->nativeformats)) {
2020 ast_log(LOG_WARNING, "Asked to transmit frame type %d, while native formats is %d (read/write = %d/%d)\n",
2021 frame->subclass, ast->nativeformats, ast->readformat, ast->writeformat);
2025 ast_mutex_lock(&p->lock);
2027 if ((ast->_state != AST_STATE_UP) && !ast_test_flag(p, SIP_PROGRESS_SENT) && !ast_test_flag(p, SIP_OUTGOING)) {
2028 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
2029 ast_set_flag(p, SIP_PROGRESS_SENT);
2031 time(&p->lastrtptx);
2032 res = ast_rtp_write(p->rtp, frame);
2034 ast_mutex_unlock(&p->lock);
2036 } else if (frame->frametype == AST_FRAME_VIDEO) {
2038 ast_mutex_lock(&p->lock);
2040 if ((ast->_state != AST_STATE_UP) && !ast_test_flag(p, SIP_PROGRESS_SENT) && !ast_test_flag(p, SIP_OUTGOING)) {
2041 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
2042 ast_set_flag(p, SIP_PROGRESS_SENT);
2044 time(&p->lastrtptx);
2045 res = ast_rtp_write(p->vrtp, frame);
2047 ast_mutex_unlock(&p->lock);
2049 } else if (frame->frametype == AST_FRAME_IMAGE) {
2052 ast_log(LOG_WARNING, "Can't send %d type frames with SIP write\n", frame->frametype);
2059 /*--- sip_fixup: Fix up a channel: If a channel is consumed, this is called.
2060 Basically update any ->owner links ----*/
2061 static int sip_fixup(struct ast_channel *oldchan, struct ast_channel *newchan)
2063 struct sip_pvt *p = newchan->tech_pvt;
2064 ast_mutex_lock(&p->lock);
2065 if (p->owner != oldchan) {
2066 ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, p->owner);
2067 ast_mutex_unlock(&p->lock);
2071 ast_mutex_unlock(&p->lock);
2075 /*--- sip_senddigit: Send DTMF character on SIP channel */
2076 /* within one call, we're able to transmit in many methods simultaneously */
2077 static int sip_senddigit(struct ast_channel *ast, char digit)
2079 struct sip_pvt *p = ast->tech_pvt;
2081 ast_mutex_lock(&p->lock);
2082 switch (ast_test_flag(p, SIP_DTMF)) {
2084 transmit_info_with_digit(p, digit);
2086 case SIP_DTMF_RFC2833:
2088 ast_rtp_senddigit(p->rtp, digit);
2090 case SIP_DTMF_INBAND:
2094 ast_mutex_unlock(&p->lock);
2099 /*--- sip_transfer: Transfer SIP call */
2100 static int sip_transfer(struct ast_channel *ast, const char *dest)
2102 struct sip_pvt *p = ast->tech_pvt;
2105 ast_mutex_lock(&p->lock);
2106 if (ast->_state == AST_STATE_RING)
2107 res = sip_sipredirect(p, dest);
2109 res = transmit_refer(p, dest);
2110 ast_mutex_unlock(&p->lock);
2114 /*--- sip_indicate: Play indication to user */
2115 /* With SIP a lot of indications is sent as messages, letting the device play
2116 the indication - busy signal, congestion etc */
2117 static int sip_indicate(struct ast_channel *ast, int condition)
2119 struct sip_pvt *p = ast->tech_pvt;
2122 ast_mutex_lock(&p->lock);
2124 case AST_CONTROL_RINGING:
2125 if (ast->_state == AST_STATE_RING) {
2126 if (!ast_test_flag(p, SIP_PROGRESS_SENT) ||
2127 (ast_test_flag(p, SIP_PROG_INBAND) == SIP_PROG_INBAND_NEVER)) {
2128 /* Send 180 ringing if out-of-band seems reasonable */
2129 transmit_response(p, "180 Ringing", &p->initreq);
2130 ast_set_flag(p, SIP_RINGING);
2131 if (ast_test_flag(p, SIP_PROG_INBAND) != SIP_PROG_INBAND_YES)
2134 /* Well, if it's not reasonable, just send in-band */
2139 case AST_CONTROL_BUSY:
2140 if (ast->_state != AST_STATE_UP) {
2141 transmit_response(p, "486 Busy Here", &p->initreq);
2142 ast_set_flag(p, SIP_ALREADYGONE);
2143 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
2148 case AST_CONTROL_CONGESTION:
2149 if (ast->_state != AST_STATE_UP) {
2150 transmit_response(p, "503 Service Unavailable", &p->initreq);
2151 ast_set_flag(p, SIP_ALREADYGONE);
2152 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
2157 case AST_CONTROL_PROGRESS:
2158 case AST_CONTROL_PROCEEDING:
2159 if ((ast->_state != AST_STATE_UP) && !ast_test_flag(p, SIP_PROGRESS_SENT) && !ast_test_flag(p, SIP_OUTGOING)) {
2160 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
2161 ast_set_flag(p, SIP_PROGRESS_SENT);
2170 ast_log(LOG_WARNING, "Don't know how to indicate condition %d\n", condition);
2174 ast_mutex_unlock(&p->lock);
2180 /*--- sip_new: Initiate a call in the SIP channel */
2181 /* called from sip_request_call (calls from the pbx ) */
2182 static struct ast_channel *sip_new(struct sip_pvt *i, int state, char *title)
2184 struct ast_channel *tmp;
2185 struct ast_variable *v = NULL;
2188 ast_mutex_unlock(&i->lock);
2189 /* Don't hold a sip pvt lock while we allocate a channel */
2190 tmp = ast_channel_alloc(1);
2191 ast_mutex_lock(&i->lock);
2193 tmp->tech = &sip_tech;
2194 /* Select our native format based on codec preference until we receive
2195 something from another device to the contrary. */
2196 ast_mutex_lock(&i->lock);
2197 if (i->jointcapability)
2198 tmp->nativeformats = ast_codec_choose(&i->prefs, i->jointcapability, 1);
2199 else if (i->capability)
2200 tmp->nativeformats = ast_codec_choose(&i->prefs, i->capability, 1);
2202 tmp->nativeformats = ast_codec_choose(&i->prefs, global_capability, 1);
2203 ast_mutex_unlock(&i->lock);
2204 fmt = ast_best_codec(tmp->nativeformats);
2207 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%04x", title, rand() & 0xffff);
2208 else if (strchr(i->fromdomain,':'))
2209 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", strchr(i->fromdomain,':')+1, (int)(long)(i));
2211 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", i->fromdomain, (int)(long)(i));
2213 tmp->type = channeltype;
2214 if (ast_test_flag(i, SIP_DTMF) == SIP_DTMF_INBAND) {
2215 i->vad = ast_dsp_new();
2216 ast_dsp_set_features(i->vad, DSP_FEATURE_DTMF_DETECT);
2218 ast_dsp_digitmode(i->vad, DSP_DIGITMODE_DTMF | DSP_DIGITMODE_RELAXDTMF);
2220 tmp->fds[0] = ast_rtp_fd(i->rtp);
2221 tmp->fds[1] = ast_rtcp_fd(i->rtp);
2223 tmp->fds[2] = ast_rtp_fd(i->vrtp);
2224 tmp->fds[3] = ast_rtcp_fd(i->vrtp);
2226 if (state == AST_STATE_RING)
2228 tmp->adsicpe = AST_ADSI_UNAVAILABLE;
2229 tmp->writeformat = fmt;
2230 tmp->rawwriteformat = fmt;
2231 tmp->readformat = fmt;
2232 tmp->rawreadformat = fmt;
2235 tmp->callgroup = i->callgroup;
2236 tmp->pickupgroup = i->pickupgroup;
2237 tmp->cid.cid_pres = i->callingpres;
2238 if (!ast_strlen_zero(i->accountcode))
2239 strncpy(tmp->accountcode, i->accountcode, sizeof(tmp->accountcode)-1);
2241 tmp->amaflags = i->amaflags;
2242 if (!ast_strlen_zero(i->language))
2243 strncpy(tmp->language, i->language, sizeof(tmp->language)-1);
2244 if (!ast_strlen_zero(i->musicclass))
2245 strncpy(tmp->musicclass, i->musicclass, sizeof(tmp->musicclass)-1);
2247 ast_mutex_lock(&usecnt_lock);
2249 ast_mutex_unlock(&usecnt_lock);
2250 strncpy(tmp->context, i->context, sizeof(tmp->context)-1);
2251 strncpy(tmp->exten, i->exten, sizeof(tmp->exten)-1);
2252 if (!ast_strlen_zero(i->cid_num))
2253 tmp->cid.cid_num = strdup(i->cid_num);
2254 if (!ast_strlen_zero(i->cid_name))
2255 tmp->cid.cid_name = strdup(i->cid_name);
2256 if (!ast_strlen_zero(i->rdnis))
2257 tmp->cid.cid_rdnis = strdup(i->rdnis);
2258 if (!ast_strlen_zero(i->exten) && strcmp(i->exten, "s"))
2259 tmp->cid.cid_dnid = strdup(i->exten);
2261 if (!ast_strlen_zero(i->uri)) {
2262 pbx_builtin_setvar_helper(tmp, "SIPURI", i->uri);
2264 if (!ast_strlen_zero(i->domain)) {
2265 pbx_builtin_setvar_helper(tmp, "SIPDOMAIN", i->domain);
2267 if (!ast_strlen_zero(i->useragent)) {
2268 pbx_builtin_setvar_helper(tmp, "SIPUSERAGENT", i->useragent);
2270 if (!ast_strlen_zero(i->callid)) {
2271 pbx_builtin_setvar_helper(tmp, "SIPCALLID", i->callid);
2273 ast_setstate(tmp, state);
2274 if (state != AST_STATE_DOWN) {
2275 if (ast_pbx_start(tmp)) {
2276 ast_log(LOG_WARNING, "Unable to start PBX on %s\n", tmp->name);
2281 /* Set channel variables for this call from configuration */
2282 for (v = i->chanvars ; v ; v = v->next)
2283 pbx_builtin_setvar_helper(tmp,v->name,v->value);
2286 ast_log(LOG_WARNING, "Unable to allocate channel structure\n");
2290 /* Structure for conversion between compressed SIP and "normal" SIP */
2291 static struct cfalias {
2295 { "Content-Type", "c" },
2296 { "Content-Encoding", "e" },
2300 { "Content-Length", "l" },
2303 { "Supported", "k" },
2304 { "Refer-To", "r" },
2305 { "Allow-Events", "u" },
2310 /*--- get_sdp_by_line: Reads one line of SIP message body */
2311 static char* get_sdp_by_line(char* line, char *name, int nameLen) {
2312 if (strncasecmp(line, name, nameLen) == 0 && line[nameLen] == '=') {
2313 char* r = line + nameLen + 1;
2314 while (*r && (*r < 33)) ++r;
2321 /*--- get_sdp: Gets all kind of SIP message bodies, including SDP,
2322 but the name wrongly applies _only_ sdp */
2323 static char *get_sdp(struct sip_request *req, char *name) {
2325 int len = strlen(name);
2328 for (x=0; x<req->lines; x++) {
2329 r = get_sdp_by_line(req->line[x], name, len);
2330 if (r[0] != '\0') return r;
2336 static void sdpLineNum_iterator_init(int* iterator) {
2340 static char* get_sdp_iterate(int* iterator,
2341 struct sip_request *req, char *name) {
2342 int len = strlen(name);
2344 while (*iterator < req->lines) {
2345 r = get_sdp_by_line(req->line[(*iterator)++], name, len);
2346 if (r[0] != '\0') return r;
2351 static char *__get_header(struct sip_request *req, char *name, int *start)
2354 int len = strlen(name);
2356 if (pedanticsipchecking) {
2357 /* Technically you can place arbitrary whitespace both before and after the ':' in
2358 a header, although RFC3261 clearly says you shouldn't before, and place just
2359 one afterwards. If you shouldn't do it, what absolute idiot decided it was
2360 a good idea to say you can do it, and if you can do it, why in the hell would
2361 you say you shouldn't. */
2362 for (x=*start;x<req->headers;x++) {
2363 if (!strncasecmp(req->header[x], name, len)) {
2364 r = req->header[x] + len;
2365 while(*r && (*r < 33))
2369 while(*r && (*r < 33))
2377 /* We probably shouldn't even bother counting whitespace afterwards but
2378 I guess for backwards compatibility we will */
2379 for (x=*start;x<req->headers;x++) {
2380 if (!strncasecmp(req->header[x], name, len) &&
2381 (req->header[x][len] == ':')) {
2382 r = req->header[x] + len + 1;
2383 while(*r && (*r < 33))
2391 for (x=0;x<sizeof(aliases) / sizeof(aliases[0]); x++)
2392 if (!strcasecmp(aliases[x].fullname, name))
2393 return __get_header(req, aliases[x].shortname, start);
2395 /* Don't return NULL, so get_header is always a valid pointer */
2399 /*--- get_header: Get header from SIP request ---*/
2400 static char *get_header(struct sip_request *req, char *name)
2403 return __get_header(req, name, &start);
2406 /*--- sip_rtp_read: Read RTP from network ---*/
2407 static struct ast_frame *sip_rtp_read(struct ast_channel *ast, struct sip_pvt *p)
2409 /* Retrieve audio/etc from channel. Assumes p->lock is already held. */
2410 struct ast_frame *f;
2411 static struct ast_frame null_frame = { AST_FRAME_NULL, };
2414 f = ast_rtp_read(p->rtp); /* RTP Audio */
2417 f = ast_rtcp_read(p->rtp); /* RTCP Control Channel */
2420 f = ast_rtp_read(p->vrtp); /* RTP Video */
2423 f = ast_rtcp_read(p->vrtp); /* RTCP Control Channel for video */
2428 /* Don't send RFC2833 if we're not supposed to */
2429 if (f && (f->frametype == AST_FRAME_DTMF) && (ast_test_flag(p, SIP_DTMF) != SIP_DTMF_RFC2833))
2432 /* We already hold the channel lock */
2433 if (f->frametype == AST_FRAME_VOICE) {
2434 if (f->subclass != p->owner->nativeformats) {
2435 ast_log(LOG_DEBUG, "Oooh, format changed to %d\n", f->subclass);
2436 p->owner->nativeformats = f->subclass;
2437 ast_set_read_format(p->owner, p->owner->readformat);
2438 ast_set_write_format(p->owner, p->owner->writeformat);
2440 if ((ast_test_flag(p, SIP_DTMF) == SIP_DTMF_INBAND) && p->vad) {
2441 f = ast_dsp_process(p->owner, p->vad, f);
2442 if (f && (f->frametype == AST_FRAME_DTMF))
2443 ast_log(LOG_DEBUG, "* Detected inband DTMF '%c'\n", f->subclass);
2450 /*--- sip_read: Read SIP RTP from channel */
2451 static struct ast_frame *sip_read(struct ast_channel *ast)
2453 struct ast_frame *fr;
2454 struct sip_pvt *p = ast->tech_pvt;
2455 ast_mutex_lock(&p->lock);
2456 fr = sip_rtp_read(ast, p);
2457 time(&p->lastrtprx);
2458 ast_mutex_unlock(&p->lock);
2462 /*--- build_callid: Build SIP CALLID header ---*/
2463 static void build_callid(char *callid, int len, struct in_addr ourip, char *fromdomain)
2468 char iabuf[INET_ADDRSTRLEN];
2471 res = snprintf(callid, len, "%08x", val);
2475 if (!ast_strlen_zero(fromdomain))
2476 snprintf(callid, len, "@%s", fromdomain);
2478 /* It's not important that we really use our right IP here... */
2479 snprintf(callid, len, "@%s", ast_inet_ntoa(iabuf, sizeof(iabuf), ourip));
2482 /*--- sip_alloc: Allocate SIP_PVT structure and set defaults ---*/
2483 static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useglobal_nat)
2487 p = malloc(sizeof(struct sip_pvt));
2490 /* Keep track of stuff */
2491 memset(p, 0, sizeof(struct sip_pvt));
2492 ast_mutex_init(&p->lock);
2502 memcpy(&p->sa, sin, sizeof(p->sa));
2503 if (ast_sip_ouraddrfor(&p->sa.sin_addr,&p->ourip))
2504 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2506 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2508 p->rtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2510 p->vrtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2514 /* Start with 101 instead of 1 */
2517 ast_log(LOG_WARNING, "Unable to create RTP session: %s\n", strerror(errno));
2518 ast_mutex_destroy(&p->lock);
2520 ast_variables_destroy(p->chanvars);
2526 ast_rtp_settos(p->rtp, tos);
2528 ast_rtp_settos(p->vrtp, tos);
2529 if (useglobal_nat && sin) {
2530 /* Setup NAT structure according to global settings if we have an address */
2531 ast_copy_flags(p, &global_flags, SIP_NAT);
2532 memcpy(&p->recv, sin, sizeof(p->recv));
2533 ast_rtp_setnat(p->rtp, (ast_test_flag(p, SIP_NAT) & SIP_NAT_ROUTE));
2535 ast_rtp_setnat(p->vrtp, (ast_test_flag(p, SIP_NAT) & SIP_NAT_ROUTE));
2538 strncpy(p->fromdomain, default_fromdomain, sizeof(p->fromdomain) - 1);
2539 build_via(p, p->via, sizeof(p->via));
2541 build_callid(p->callid, sizeof(p->callid), p->ourip, p->fromdomain);
2543 strncpy(p->callid, callid, sizeof(p->callid) - 1);
2544 ast_copy_flags(p, (&global_flags), SIP_PROMISCREDIR | SIP_TRUSTRPID | SIP_DTMF | SIP_REINVITE | SIP_PROG_INBAND | SIP_OSPAUTH);
2545 /* Assign default music on hold class */
2546 strncpy(p->musicclass, global_musicclass, sizeof(p->musicclass) - 1);
2547 p->rtptimeout = global_rtptimeout;
2548 p->rtpholdtimeout = global_rtpholdtimeout;
2549 p->rtpkeepalive = global_rtpkeepalive;
2550 p->capability = global_capability;
2551 if (ast_test_flag(p, SIP_DTMF) == SIP_DTMF_RFC2833)
2552 p->noncodeccapability |= AST_RTP_DTMF;
2553 strncpy(p->context, default_context, sizeof(p->context) - 1);
2555 ast_mutex_lock(&iflock);
2558 ast_mutex_unlock(&iflock);
2560 ast_log(LOG_DEBUG, "Allocating new SIP call for %s\n", callid);
2564 /*--- find_call: Connect incoming SIP message to current call or create new call structure */
2565 /* Called by handle_request ,sipsock_read */
2566 static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *sin)
2571 char iabuf[INET_ADDRSTRLEN];
2575 callid = get_header(req, "Call-ID");
2577 if (pedanticsipchecking) {
2578 /* In principle Call-ID's uniquely identify a call, however some vendors
2579 (i.e. Pingtel) send multiple calls with the same Call-ID and different
2580 tags in order to simplify billing. The RFC does state that we have to
2581 compare tags in addition to the call-id, but this generate substantially
2582 more overhead which is totally unnecessary for the vast majority of sane
2583 SIP implementations, and thus Asterisk does not enable this behavior
2584 by default. Short version: You'll need this option to support conferencing
2586 strncpy(tmp, req->header[0], sizeof(tmp) - 1);
2588 c = strchr(tmp, ' ');
2591 if (!strcasecmp(cmd, "SIP/2.0"))
2592 strncpy(tmp, get_header(req, "To"), sizeof(tmp) - 1);
2594 strncpy(tmp, get_header(req, "From"), sizeof(tmp) - 1);
2595 tag = ast_strcasestr(tmp, "tag=");
2598 c = strchr(tag, ';');
2605 if (ast_strlen_zero(callid)) {
2606 ast_log(LOG_WARNING, "Call missing call ID from '%s'\n", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr));
2609 ast_mutex_lock(&iflock);
2612 if (!strcmp(p->callid, callid) &&
2613 (!pedanticsipchecking || !tag || ast_strlen_zero(p->theirtag) || !strcmp(p->theirtag, tag))) {
2614 /* Found the call */
2615 ast_mutex_lock(&p->lock);
2616 ast_mutex_unlock(&iflock);
2621 ast_mutex_unlock(&iflock);
2622 p = sip_alloc(callid, sin, 1);
2624 ast_mutex_lock(&p->lock);
2628 /*--- sip_register: Parse register=> line in sip.conf and add to registry */
2629 static int sip_register(char *value, int lineno)
2631 struct sip_registry *reg;
2632 char copy[256] = "";
2633 char *username=NULL, *hostname=NULL, *secret=NULL, *authuser=NULL;
2640 strncpy(copy, value, sizeof(copy)-1);
2643 hostname = strrchr(stringp, '@');
2648 if (!username || ast_strlen_zero(username) || !hostname || ast_strlen_zero(hostname)) {
2649 ast_log(LOG_WARNING, "Format for registration is user[:secret[:authuser]]@host[:port][/contact] at line %d\n", lineno);
2653 username = strsep(&stringp, ":");
2655 secret = strsep(&stringp, ":");
2657 authuser = strsep(&stringp, ":");
2660 hostname = strsep(&stringp, "/");
2662 contact = strsep(&stringp, "/");
2663 if (!contact || ast_strlen_zero(contact))
2666 hostname = strsep(&stringp, ":");
2667 porta = strsep(&stringp, ":");
2669 if (porta && !atoi(porta)) {
2670 ast_log(LOG_WARNING, "%s is not a valid port number at line %d\n", porta, lineno);
2673 reg = malloc(sizeof(struct sip_registry));
2675 memset(reg, 0, sizeof(struct sip_registry));
2678 strncpy(reg->contact, contact, sizeof(reg->contact) - 1);
2680 strncpy(reg->username, username, sizeof(reg->username)-1);
2682 strncpy(reg->hostname, hostname, sizeof(reg->hostname)-1);
2684 strncpy(reg->authuser, authuser, sizeof(reg->authuser)-1);
2686 strncpy(reg->secret, secret, sizeof(reg->secret)-1);
2689 reg->refresh = default_expiry;
2690 reg->portno = porta ? atoi(porta) : 0;
2691 reg->callid_valid = 0;
2693 ASTOBJ_CONTAINER_LINK(®l, reg);
2694 ASTOBJ_UNREF(reg,sip_registry_destroy);
2696 ast_log(LOG_ERROR, "Out of memory\n");
2702 /*--- lws2sws: Parse multiline SIP headers into one header */
2703 /* This is enabled if pedanticsipchecking is enabled */
2704 static int lws2sws(char *msgbuf, int len)
2710 /* Eliminate all CRs */
2711 if (msgbuf[h] == '\r') {
2715 /* Check for end-of-line */
2716 if (msgbuf[h] == '\n') {
2717 /* Check for end-of-message */
2720 /* Check for a continuation line */
2721 if (msgbuf[h + 1] == ' ' || msgbuf[h + 1] == '\t') {
2722 /* Merge continuation line */
2726 /* Propagate LF and start new line */
2727 msgbuf[t++] = msgbuf[h++];
2731 if (msgbuf[h] == ' ' || msgbuf[h] == '\t') {
2736 msgbuf[t++] = msgbuf[h++];
2740 msgbuf[t++] = msgbuf[h++];
2748 /*--- parse: Parse a SIP message ----*/
2749 static void parse(struct sip_request *req)
2751 /* Divide fields by NULL's */
2756 /* First header starts immediately */
2760 /* We've got a new header */
2764 printf("Header: %s (%d)\n", req->header[f], strlen(req->header[f]));
2766 if (ast_strlen_zero(req->header[f])) {
2767 /* Line by itself means we're now in content */
2771 if (f >= SIP_MAX_HEADERS - 1) {
2772 ast_log(LOG_WARNING, "Too many SIP headers...\n");
2775 req->header[f] = c + 1;
2776 } else if (*c == '\r') {
2777 /* Ignore but eliminate \r's */
2782 /* Check for last header */
2783 if (!ast_strlen_zero(req->header[f]))
2786 /* Now we process any mime content */
2791 /* We've got a new line */
2794 printf("Line: %s (%d)\n", req->line[f], strlen(req->line[f]));
2796 if (f >= SIP_MAX_LINES - 1) {
2797 ast_log(LOG_WARNING, "Too many SDP lines...\n");
2800 req->line[f] = c + 1;
2801 } else if (*c == '\r') {
2802 /* Ignore and eliminate \r's */
2807 /* Check for last line */
2808 if (!ast_strlen_zero(req->line[f]))
2812 ast_log(LOG_WARNING, "Odd content, extra stuff left over ('%s')\n", c);
2815 /*--- process_sdp: Process SIP SDP ---*/
2816 static int process_sdp(struct sip_pvt *p, struct sip_request *req)
2822 char iabuf[INET_ADDRSTRLEN];
2826 int peercapability, peernoncodeccapability;
2827 int vpeercapability=0, vpeernoncodeccapability=0;
2828 struct sockaddr_in sin;
2831 struct ast_hostent ahp;
2833 int destiterator = 0;
2837 int debug=sip_debug_test_pvt(p);
2839 /* Update our last rtprx when we receive an SDP, too */
2840 time(&p->lastrtprx);
2841 time(&p->lastrtptx);
2843 /* Get codec and RTP info from SDP */
2844 if (strcasecmp(get_header(req, "Content-Type"), "application/sdp")) {
2845 ast_log(LOG_NOTICE, "Content is '%s', not 'application/sdp'\n", get_header(req, "Content-Type"));
2848 m = get_sdp(req, "m");
2849 sdpLineNum_iterator_init(&destiterator);
2850 c = get_sdp_iterate(&destiterator, req, "c");
2851 if (ast_strlen_zero(m) || ast_strlen_zero(c)) {
2852 ast_log(LOG_WARNING, "Insufficient information for SDP (m = '%s', c = '%s')\n", m, c);
2855 if (sscanf(c, "IN IP4 %256s", host) != 1) {
2856 ast_log(LOG_WARNING, "Invalid host in c= line, '%s'\n", c);
2859 /* XXX This could block for a long time, and block the main thread! XXX */
2860 hp = ast_gethostbyname(host, &ahp);
2862 ast_log(LOG_WARNING, "Unable to lookup host in c= line, '%s'\n", c);
2865 sdpLineNum_iterator_init(&iterator);
2866 ast_set_flag(p, SIP_NOVIDEO);
2867 while ((m = get_sdp_iterate(&iterator, req, "m"))[0] != '\0') {
2869 if ((sscanf(m, "audio %d RTP/AVP %n", &x, &len) == 1) ||
2870 (sscanf(m, "audio %d/%d RTP/AVP %n", &x, &y, &len) == 2)) {
2873 /* Scan through the RTP payload types specified in a "m=" line: */
2874 ast_rtp_pt_clear(p->rtp);
2876 while(!ast_strlen_zero(codecs)) {
2877 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2878 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2882 ast_verbose("Found RTP audio format %d\n", codec);
2883 ast_rtp_set_m_type(p->rtp, codec);
2885 /* Skip over any whitespace */
2886 while(*codecs && (*codecs < 33)) codecs++;
2890 ast_rtp_pt_clear(p->vrtp); /* Must be cleared in case no m=video line exists */
2892 if (p->vrtp && (sscanf(m, "video %d RTP/AVP %n", &x, &len) == 1)) {
2894 ast_clear_flag(p, SIP_NOVIDEO);
2896 /* Scan through the RTP payload types specified in a "m=" line: */
2898 while(!ast_strlen_zero(codecs)) {
2899 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2900 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2904 ast_verbose("Found video format %s\n", ast_getformatname(codec));
2905 ast_rtp_set_m_type(p->vrtp, codec);
2907 /* Skip over any whitespace */
2908 while(*codecs && (*codecs < 33)) codecs++;
2912 ast_log(LOG_WARNING, "Unknown SDP media type in offer: %s\n", m);
2914 if (portno == -1 && vportno == -1) {
2915 /* No acceptable offer found in SDP */
2918 /* Check for Media-description-level-address for audio */
2919 if (pedanticsipchecking) {
2920 c = get_sdp_iterate(&destiterator, req, "c");
2921 if (!ast_strlen_zero(c)) {
2922 if (sscanf(c, "IN IP4 %256s", host) != 1) {
2923 ast_log(LOG_WARNING, "Invalid secondary host in c= line, '%s'\n", c);
2925 /* XXX This could block for a long time, and block the main thread! XXX */
2926 hp = ast_gethostbyname(host, &ahp);
2928 ast_log(LOG_WARNING, "Unable to lookup host in secondary c= line, '%s'\n", c);
2933 /* RTP addresses and ports for audio and video */
2934 sin.sin_family = AF_INET;
2935 memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
2937 /* Setup audio port number */
2938 sin.sin_port = htons(portno);
2939 if (p->rtp && sin.sin_port) {
2940 ast_rtp_set_peer(p->rtp, &sin);
2942 ast_verbose("Peer audio RTP is at port %s:%d\n", ast_inet_ntoa(iabuf,sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2943 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));
2946 /* Check for Media-description-level-address for video */
2947 if (pedanticsipchecking) {
2948 c = get_sdp_iterate(&destiterator, req, "c");
2949 if (!ast_strlen_zero(c)) {
2950 if (sscanf(c, "IN IP4 %256s", host) != 1) {
2951 ast_log(LOG_WARNING, "Invalid secondary host in c= line, '%s'\n", c);
2953 /* XXX This could block for a long time, and block the main thread! XXX */
2954 hp = ast_gethostbyname(host, &ahp);
2956 ast_log(LOG_WARNING, "Unable to lookup host in secondary c= line, '%s'\n", c);
2961 /* Setup video port number */
2962 sin.sin_port = htons(vportno);
2963 if (p->vrtp && sin.sin_port) {
2964 ast_rtp_set_peer(p->vrtp, &sin);
2966 ast_verbose("Peer video RTP is at port %s:%d\n", ast_inet_ntoa(iabuf,sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2967 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));
2971 /* Next, scan through each "a=rtpmap:" line, noting each
2972 * specified RTP payload type (with corresponding MIME subtype):
2974 sdpLineNum_iterator_init(&iterator);
2975 while ((a = get_sdp_iterate(&iterator, req, "a"))[0] != '\0') {
2976 char* mimeSubtype = ast_strdupa(a); /* ensures we have enough space */
2977 if (!strcasecmp(a, "sendonly")) {
2981 if (!strcasecmp(a, "sendrecv")) {
2984 if (sscanf(a, "rtpmap: %u %[^/]/", &codec, mimeSubtype) != 2) continue;
2986 ast_verbose("Found description format %s\n", mimeSubtype);
2987 /* Note: should really look at the 'freq' and '#chans' params too */
2988 ast_rtp_set_rtpmap_type(p->rtp, codec, "audio", mimeSubtype);
2990 ast_rtp_set_rtpmap_type(p->vrtp, codec, "video", mimeSubtype);
2993 /* Now gather all of the codecs that were asked for: */
2994 ast_rtp_get_current_formats(p->rtp,
2995 &peercapability, &peernoncodeccapability);
2997 ast_rtp_get_current_formats(p->vrtp,
2998 &vpeercapability, &vpeernoncodeccapability);
2999 p->jointcapability = p->capability & (peercapability | vpeercapability);
3000 p->peercapability = (peercapability | vpeercapability);
3001 p->noncodeccapability = noncodeccapability & peernoncodeccapability;
3004 /* shame on whoever coded this.... */
3005 const unsigned slen=512;
3006 char s1[slen], s2[slen], s3[slen], s4[slen];
3008 ast_verbose("Capabilities: us - %s, peer - audio=%s/video=%s, combined - %s\n",
3009 ast_getformatname_multiple(s1, slen, p->capability),
3010 ast_getformatname_multiple(s2, slen, peercapability),
3011 ast_getformatname_multiple(s3, slen, vpeercapability),
3012 ast_getformatname_multiple(s4, slen, p->jointcapability));
3014 ast_verbose("Non-codec capabilities: us - %s, peer - %s, combined - %s\n",
3015 ast_getformatname_multiple(s1, slen, noncodeccapability),
3016 ast_getformatname_multiple(s2, slen, peernoncodeccapability),
3017 ast_getformatname_multiple(s3, slen, p->noncodeccapability));
3019 if (!p->jointcapability) {
3020 ast_log(LOG_NOTICE, "No compatible codecs!\n");
3024 if (!(p->owner->nativeformats & p->jointcapability))&nb