2 * Asterisk -- A telephony toolkit for Linux.
4 * Implementation of Session Initiation Protocol
6 * Copyright (C) 2004, Digium, Inc.
8 * Mark Spencer <markster@digium.com>
10 * This program is free software, distributed under the terms of
11 * the GNU General Public License
18 #include <asterisk/lock.h>
19 #include <asterisk/channel.h>
20 #include <asterisk/channel_pvt.h>
21 #include <asterisk/config_pvt.h>
22 #include <asterisk/config.h>
23 #include <asterisk/logger.h>
24 #include <asterisk/module.h>
25 #include <asterisk/pbx.h>
26 #include <asterisk/options.h>
27 #include <asterisk/lock.h>
28 #include <asterisk/sched.h>
29 #include <asterisk/io.h>
30 #include <asterisk/rtp.h>
31 #include <asterisk/acl.h>
32 #include <asterisk/manager.h>
33 #include <asterisk/callerid.h>
34 #include <asterisk/cli.h>
35 #include <asterisk/md5.h>
36 #include <asterisk/app.h>
37 #include <asterisk/musiconhold.h>
38 #include <asterisk/dsp.h>
39 #include <asterisk/features.h>
40 #include <asterisk/acl.h>
41 #include <asterisk/srv.h>
42 #include <asterisk/astdb.h>
43 #include <asterisk/causes.h>
44 #include <asterisk/utils.h>
45 #include <asterisk/file.h>
47 #include <asterisk/astosp.h>
49 #include <sys/socket.h>
50 #include <sys/ioctl.h>
57 #include <arpa/inet.h>
59 #include <sys/signal.h>
60 #include <netinet/in_systm.h>
61 #include <netinet/ip.h>
63 #ifndef DEFAULT_USERAGENT
64 #define DEFAULT_USERAGENT "Asterisk PBX"
67 #define VIDEO_CODEC_MASK 0x1fc0000 /* Video codecs from H.261 thru AST_FORMAT_MAX_VIDEO */
69 #define IPTOS_MINCOST 0x02
72 /* #define VOCAL_DATA_HACK */
75 #define DEFAULT_DEFAULT_EXPIRY 120
76 #define DEFAULT_MAX_EXPIRY 3600
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"
99 /* --- Choices for DTMF support in SIP channel */
100 #define SIP_DTMF_RFC2833 (1 << 0) /* RTP DTMF */
101 #define SIP_DTMF_INBAND (1 << 1) /* Inband audio, only for ULAW/ALAW */
102 #define SIP_DTMF_INFO (1 << 2) /* SIP Info messages */
105 #define DEFAULT_MAXMS 2000 /* Must be faster than 2 seconds by default */
106 #define DEFAULT_FREQ_OK 60 * 1000 /* How often to check for the host to be up */
107 #define DEFAULT_FREQ_NOTOK 10 * 1000 /* How often to check, if the host is down... */
109 #define DEFAULT_RETRANS 1000 /* How frequently to retransmit */
110 #define MAX_RETRANS 5 /* Try only 5 times for retransmissions */
113 #define DEBUG_READ 0 /* Recieved data */
114 #define DEBUG_SEND 1 /* Transmit data */
116 static char *desc = "Session Initiation Protocol (SIP)";
117 static char *channeltype = "SIP";
118 static char *tdesc = "Session Initiation Protocol (SIP)";
119 static char *config = "sip.conf";
121 #define DEFAULT_SIP_PORT 5060 /* From RFC 2543 */
122 #define SIP_MAX_PACKET 4096 /* Also from RFC 2543, should sub headers tho */
124 #define ALLOWED_METHODS "INVITE, ACK, CANCEL, OPTIONS, BYE, REFER"
126 static char default_useragent[AST_MAX_EXTENSION] = DEFAULT_USERAGENT;
128 #define DEFAULT_CONTEXT "default"
129 static char default_context[AST_MAX_EXTENSION] = DEFAULT_CONTEXT;
131 static char default_language[MAX_LANGUAGE] = "";
133 #define DEFAULT_CALLERID "asterisk"
134 static char default_callerid[AST_MAX_EXTENSION] = DEFAULT_CALLERID;
136 static char default_fromdomain[AST_MAX_EXTENSION] = "";
138 #define DEFAULT_NOTIFYMIME "application/simple-message-summary"
139 static char default_notifymime[AST_MAX_EXTENSION] = DEFAULT_NOTIFYMIME;
141 static int srvlookup = 0; /* SRV Lookup on or off. Default is off, RFC behavior is on */
143 static int pedanticsipchecking = 0; /* Extra checking ? Default off */
145 static int autocreatepeer = 0; /* Auto creation of peers at registration? Default off. */
147 static int relaxdtmf = 0;
149 static int global_rtptimeout = 0;
151 static int global_rtpholdtimeout = 0;
153 static int global_trustrpid = 0; /* Trust RPID headers? Default off. */
155 static int global_progressinband = 0;
158 static int global_ospauth = 0; /* OSP = Open Settlement Protocol */
161 #define DEFAULT_MWITIME 10
162 static int global_mwitime = DEFAULT_MWITIME; /* Time between MWI checks for peers */
164 static int usecnt =0;
165 AST_MUTEX_DEFINE_STATIC(usecnt_lock);
168 /* Protect the interface list (of sip_pvt's) */
169 AST_MUTEX_DEFINE_STATIC(iflock);
171 /* Protect the monitoring thread, so only one process can kill or start it, and not
172 when it's doing something critical. */
173 AST_MUTEX_DEFINE_STATIC(netlock);
175 AST_MUTEX_DEFINE_STATIC(monlock);
177 /* This is the thread for the monitor which checks for input on the channels
178 which are not currently in use. */
179 static pthread_t monitor_thread = AST_PTHREADT_NULL;
181 static int restart_monitor(void);
183 /* Codecs that we support by default: */
184 static int global_capability = AST_FORMAT_ULAW | AST_FORMAT_ALAW | AST_FORMAT_GSM | AST_FORMAT_H263;
185 static int noncodeccapability = AST_RTP_DTMF;
187 static char ourhost[256];
188 static struct in_addr __ourip;
189 static struct sockaddr_in outboundproxyip;
192 static int sipdebug = 0;
193 static struct sockaddr_in debugaddr;
197 static int videosupport = 0;
199 static int compactheaders = 0; /* send compact sip headers */
201 static int global_dtmfmode = SIP_DTMF_RFC2833; /* DTMF mode default */
202 static int recordhistory = 0; /* Record SIP history. Off by default */
203 static int global_promiscredir; /* Support of 302 REDIR - Default off */
204 static int global_usereqphone; /* User=phone support, default 0 */
206 static char global_musicclass[MAX_LANGUAGE] = ""; /* Global music on hold class */
207 static char global_realm[AST_MAX_EXTENSION] = "asterisk"; /* Default realm */
208 static char regcontext[AST_MAX_EXTENSION] = ""; /* Context for auto-extensions */
211 #define DEFAULT_EXPIRY 900
212 static int expiry = DEFAULT_EXPIRY;
214 static struct sched_context *sched;
215 static struct io_context *io;
216 /* The private structures of the sip channels are linked for
217 selecting outgoing channels */
219 #define SIP_MAX_HEADERS 64
220 #define SIP_MAX_LINES 64
224 #define DEC_OUT_USE 2
225 #define INC_OUT_USE 3
227 static struct ast_codec_pref prefs;
230 /* sip_request: The data grabbed from the UDP socket */
232 char *rlPart1; /* SIP Method Name or "SIP/2.0" protocol version */
233 char *rlPart2; /* The Request URI or Response Status */
234 int len; /* Length */
235 int headers; /* # of SIP Headers */
236 char *header[SIP_MAX_HEADERS];
237 int lines; /* SDP Content */
238 char *line[SIP_MAX_LINES];
239 char data[SIP_MAX_PACKET];
245 struct sip_route *next;
251 struct sip_history *next;
254 /* sip_pvt: PVT structures are used for each SIP conversation, ie. a call */
255 static struct sip_pvt {
256 ast_mutex_t lock; /* Channel private lock */
257 char callid[80]; /* Global CallID */
258 char randdata[80]; /* Random data */
259 struct ast_codec_pref prefs; /* codec prefs */
260 unsigned int ocseq; /* Current outgoing seqno */
261 unsigned int icseq; /* Current incoming seqno */
262 unsigned int callgroup; /* Call group */
263 unsigned int pickupgroup; /* Pickup group */
264 int lastinvite; /* Last Cseq of invite */
265 int alreadygone; /* Whether or not we've already been destroyed by or peer */
266 int needdestroy; /* if we need to be destroyed */
267 int capability; /* Special capability (codec) */
268 int novideo; /* Didn't get video in invite, don't offer */
269 int jointcapability; /* Supported capability at both ends (codecs ) */
270 int peercapability; /* Supported peer capability */
271 int prefcodec; /* Preferred codec (outbound only) */
272 int noncodeccapability;
273 int callingpres; /* Calling presentation */
274 int outgoing; /* Outgoing or incoming call? */
275 int authtries; /* Times we've tried to authenticate */
276 int insecure; /* Don't check source port/ip */
277 int expiry; /* How long we take to expire */
278 int branch; /* One random number */
279 int canreinvite; /* Do we support reinvite */
280 int ringing; /* Have sent 180 ringing */
281 int progress; /* Have sent 183 message progress */
282 int useclientcode; /* Trust X-ClientCode info message */
283 int tag; /* Another random number */
284 int nat; /* Whether to try to support NAT */
285 int sessionid; /* SDP Session ID */
286 int sessionversion; /* SDP Session Version */
287 struct sockaddr_in sa; /* Our peer */
288 struct sockaddr_in redirip; /* Where our RTP should be going if not to us */
289 struct sockaddr_in vredirip; /* Where our Video RTP should be going if not to us */
290 int redircodecs; /* Redirect codecs */
291 struct sockaddr_in recv; /* Received as */
292 struct in_addr ourip; /* Our IP */
293 struct ast_channel *owner; /* Who owns us */
294 char exten[AST_MAX_EXTENSION]; /* Extension where to start */
295 char refer_to[AST_MAX_EXTENSION]; /* Place to store REFER-TO extension */
296 char referred_by[AST_MAX_EXTENSION]; /* Place to store REFERRED-BY extension */
297 char refer_contact[AST_MAX_EXTENSION]; /* Place to store Contact info from a REFER extension */
298 struct sip_pvt *refer_call; /* Call we are referring */
299 struct sip_route *route; /* Head of linked list of routing steps (fm Record-Route) */
300 int route_persistant; /* Is this the "real" route? */
301 char from[256]; /* The From: header */
302 char useragent[256]; /* User agent in SIP request */
303 char context[AST_MAX_EXTENSION]; /* Context for this call */
304 char fromdomain[AST_MAX_EXTENSION]; /* Domain to show in the from field */
305 char fromuser[AST_MAX_EXTENSION]; /* Domain to show in the user field */
306 char tohost[AST_MAX_EXTENSION]; /* Host we should put in the "to" field */
307 char language[MAX_LANGUAGE]; /* Default language for this call */
308 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
309 char rdnis[256]; /* Referring DNIS */
310 char theirtag[256]; /* Their tag */
313 char authname[256]; /* Who we use for authentication */
314 char uri[256]; /* Original requested URI */
315 char peersecret[256]; /* Password */
316 char peermd5secret[256];
317 char cid_num[256]; /* Caller*ID */
318 char cid_name[256]; /* Caller*ID */
319 char via[256]; /* Via: header */
320 char fullcontact[128]; /* The Contact: that the UA registers with us */
321 char accountcode[20]; /* Account code */
322 char our_contact[256]; /* Our contact header */
323 char realm[256]; /* Authorization realm */
324 char nonce[256]; /* Authorization nonce */
325 char opaque[256]; /* Opaque nonsense */
326 char qop[80]; /* Quality of Protection, since SIP wasn't complicated enough yet. */
327 char domain[256]; /* Authorization nonce */
328 char lastmsg[256]; /* Last Message sent/received */
329 int amaflags; /* AMA Flags */
330 int pendinginvite; /* Any pending invite */
331 int needreinvite; /* Do we need to send another reinvite? */
332 int pendingbye; /* Need to send bye after we ack? */
333 int gotrefer; /* Got a refer? */
335 int ospauth; /* Allow OSP Authentication */
336 int osphandle; /* OSP Handle for call */
337 time_t ospstart; /* OSP Start time */
339 struct sip_request initreq; /* Initial request */
341 int maxtime; /* Max time for first response */
342 int initid; /* Auto-congest ID if appropriate */
343 int autokillid; /* Auto-kill ID */
344 time_t lastrtprx; /* Last RTP received */
345 int rtptimeout; /* RTP timeout time */
346 int rtpholdtimeout; /* RTP timeout when on hold */
348 int subscribed; /* Is this call a subscription? */
351 int promiscredir; /* Promiscuous redirection */
352 int usereqphone; /* Add user=phone to numeric URI. Default off */
354 int trustrpid; /* Trust RPID headers? */
357 int dtmfmode; /* DTMF to use for this call */
360 struct sip_peer *peerpoke; /* If this calls is to poke a peer, which one */
361 struct sip_registry *registry; /* If this is a REGISTER call, to which registry */
362 struct ast_rtp *rtp; /* RTP Session */
363 struct ast_rtp *vrtp; /* Video RTP session */
364 struct sip_pkt *packets; /* Packets scheduled for re-transmission */
365 struct sip_history *history; /* History of this SIP dialog */
366 struct ast_variable *vars;
367 struct sip_pvt *next; /* Next call in chain */
370 #define FLAG_RESPONSE (1 << 0)
371 #define FLAG_FATAL (1 << 1)
373 /* sip packet - read in sipsock_read, transmitted in send_request */
375 struct sip_pkt *next; /* Next packet */
376 int retrans; /* Retransmission number */
377 int seqno; /* Sequence number */
378 int flags; /* non-zero if this is a response packet (e.g. 200 OK) */
379 struct sip_pvt *owner; /* Owner call */
380 int retransid; /* Retransmission ID */
381 int packetlen; /* Length of packet */
385 /* Structure for SIP user data. User's place calls to us */
387 /* Users who can access various contexts */
388 char name[80]; /* The name in sip.conf */
389 char secret[80]; /* Password */
390 char md5secret[80]; /* Password in md5 */
391 char context[80]; /* Default context for incoming calls */
392 char cid_num[80]; /* Caller ID num */
393 char cid_name[80]; /* Caller ID name */
394 char accountcode[20]; /* Account code */
395 char language[MAX_LANGUAGE]; /* Default language for this user */
396 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
397 char useragent[256]; /* User agent in SIP request */
398 struct ast_codec_pref prefs; /* codec prefs */
399 unsigned int callgroup; /* Call group */
400 unsigned int pickupgroup; /* Pickup Group */
401 int nat; /* NAT setting */
402 int amaflags; /* AMA flags for billing */
403 int callingpres; /* Calling id presentation */
404 int insecure; /* Insecure means don't check password */
405 int canreinvite; /* Do we support re-invites ? */
406 int capability; /* Codec capability */
408 int ospauth; /* Allow OSP Authentication */
410 int dtmfmode; /* DTMF setting */
415 int promiscredir; /* Support of 302 redirect */
416 int useclientcode; /* SNOM clientcode support */
417 int trustrpid; /* Trust remote party ID from this UA */
419 struct ast_ha *ha; /* ACL setting */
420 int temponly; /* Flag for temporary users (realtime) */
421 struct ast_variable *vars;
422 struct sip_user *next;
425 /* Structure for SIP peer data, we place calls to peers if registred or fixed IP address (host) */
427 char name[80]; /* Peer name in sip.conf */
428 char secret[80]; /* Password */
429 char md5secret[80]; /* Password in MD5 */
430 char context[80]; /* Default context for incoming calls */
431 char username[80]; /* Temporary username until registration */
432 char tohost[80]; /* If not dynamic, IP address */
433 char regexten[AST_MAX_EXTENSION]; /* Extension to register (if regcontext is used) */
434 char fromuser[80]; /* From: user when calling this peer */
435 char fromdomain[80]; /* From: domain when calling this peer */
436 char fullcontact[128]; /* Contact registred with us (not in sip.conf) */
437 char cid_num[80]; /* Caller ID num */
438 char cid_name[80]; /* Caller ID name */
439 char mailbox[AST_MAX_EXTENSION]; /* Mailbox setting for MWI checks */
440 char language[MAX_LANGUAGE]; /* Default language for prompts */
441 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
442 char useragent[256]; /* User agent in SIP request (saved from registration) */
443 struct ast_codec_pref prefs; /* codec prefs */
445 time_t lastmsgcheck; /* Last time we checked for MWI */
446 int dynamic; /* Dynamic? Yes or no. Dynamic hosts register with us */
447 int expire; /* Registration expiration */
449 int capability; /* Codec capability */
452 int insecure; /* Do we want to authenticate this peer? */
454 int ospauth; /* Allow OSP Authentication */
456 int nat; /* NAT support needed? */
457 int canreinvite; /* Does the peer support re-invites? */
458 unsigned int callgroup; /* Call group */
459 unsigned int pickupgroup; /* Pickup group */
460 int promiscredir; /* Support of 302 redirect? */
461 int dtmfmode; /* DTMF mode */
462 int trustrpid; /* Trust Remote Party ID headers? */
463 int useclientcode; /* SNOM clientcode support */
465 int usereqphone; /* Add user=phone to URI. Default off */
466 struct sockaddr_in addr; /* IP address of peer */
470 struct sip_pvt *call; /* Call pointer */
471 int pokeexpire; /* When to expire poke (qualify= checking) */
472 int lastms; /* How long last response took (in ms), or -1 for no response */
473 int maxms; /* Max ms we will accept for the host to be up, 0 to not monitor */
474 struct timeval ps; /* Ping send time */
476 struct sockaddr_in defaddr; /* Default IP address, used until registration */
477 struct ast_ha *ha; /* Access control list */
482 struct sip_peer *next;
485 AST_MUTEX_DEFINE_STATIC(sip_reload_lock);
486 static int sip_reloading = 0;
488 /* States for outbound registrations (with register= lines in sip.conf */
489 #define REG_STATE_UNREGISTERED 0
490 #define REG_STATE_REGSENT 1
491 #define REG_STATE_AUTHSENT 2
492 #define REG_STATE_REGISTERED 3
493 #define REG_STATE_REJECTED 4
494 #define REG_STATE_TIMEOUT 5
495 #define REG_STATE_NOAUTH 6
498 #define SIP_NAT_NEVER 0 /* No nat support */
499 #define SIP_NAT_RFC3581 (1 << 0)
500 #define SIP_NAT_ROUTE (1 << 2)
501 #define SIP_NAT_ALWAYS (SIP_NAT_ROUTE | SIP_NAT_RFC3581)
503 /* sip_registry: Registrations with other SIP proxies */
504 struct sip_registry {
505 int portno; /* Optional port override */
506 char username[80]; /* Who we are registering as */
507 char authuser[80]; /* Who we *authenticate* as */
508 char hostname[80]; /* Domain or host we register to */
509 char secret[80]; /* Password or key name in []'s */
511 char contact[80]; /* Contact extension */
513 int expire; /* Sched ID of expiration */
514 int timeout; /* sched id of sip_reg_timeout */
515 int refresh; /* How often to refresh */
516 struct sip_pvt *call; /* create a sip_pvt structure for each outbound "registration call" in progress */
517 int regstate; /* Registration state (see above) */
518 int callid_valid; /* 0 means we haven't chosen callid for this registry yet. */
519 char callid[80]; /* Global CallID for this registry */
520 unsigned int ocseq; /* Sequence number we got to for REGISTERs for this registry */
521 struct sockaddr_in us; /* Who the server thinks we are */
522 struct sip_registry *next;
525 /*--- The user list: Users and friends ---*/
526 static struct ast_user_list {
527 struct sip_user *users;
531 /*--- The peer list: Peers and Friends ---*/
532 static struct ast_peer_list {
533 struct sip_peer *peers;
537 /*--- The register list: Other SIP proxys we register with and call ---*/
538 static struct ast_register_list {
539 struct sip_registry *registrations;
545 #define REINVITE_INVITE 1
546 #define REINVITE_UPDATE 2
548 static int __sip_do_register(struct sip_registry *r);
550 static int sipsock = -1;
551 static int global_nat = SIP_NAT_RFC3581;
552 static int global_canreinvite = REINVITE_INVITE;
555 static struct sockaddr_in bindaddr;
556 static struct sockaddr_in externip;
557 static struct ast_ha *localaddr;
559 static struct ast_frame *sip_read(struct ast_channel *ast);
560 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req);
561 static int transmit_response_with_sdp(struct sip_pvt *p, char *msg, struct sip_request *req, int retrans);
562 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *rand, int reliable, char *header);
563 static int transmit_request(struct sip_pvt *p, char *msg, int inc, int reliable, int newbranch);
564 static int transmit_request_with_auth(struct sip_pvt *p, char *msg, int inc, int reliable, int newbranch);
565 static int transmit_invite(struct sip_pvt *p, char *msg, int sendsdp, char *auth, char *authheader, char *vxml_url, char *distinctive_ring, char *osptoken, int addsipheaders, int init);
566 static int transmit_reinvite_with_sdp(struct sip_pvt *p);
567 static int transmit_info_with_digit(struct sip_pvt *p, char digit);
568 static int transmit_message_with_text(struct sip_pvt *p, char *text);
569 static int transmit_refer(struct sip_pvt *p, char *dest);
570 static struct sip_peer *temp_peer(char *name);
571 static int do_proxy_auth(struct sip_pvt *p, struct sip_request *req, char *header, char *respheader, char *msg, int init);
572 static void free_old_route(struct sip_route *route);
573 static int build_reply_digest(struct sip_pvt *p, char *orig_header, char *digest, int digest_len);
574 static int update_user_counter(struct sip_pvt *fup, int event);
575 static void prune_peers(void);
576 static int sip_do_reload(void);
579 /*--- sip_debug_test_addr: See if we pass debug IP filter */
580 static inline int sip_debug_test_addr(struct sockaddr_in *addr)
584 if (debugaddr.sin_addr.s_addr) {
585 if (((ntohs(debugaddr.sin_port) != 0)
586 && (debugaddr.sin_port != addr->sin_port))
587 || (debugaddr.sin_addr.s_addr != addr->sin_addr.s_addr))
593 static inline int sip_debug_test_pvt(struct sip_pvt *p)
597 return sip_debug_test_addr(((p->nat & SIP_NAT_ROUTE) ? &p->recv : &p->sa));
601 /*--- __sip_xmit: Transmit SIP message ---*/
602 static int __sip_xmit(struct sip_pvt *p, char *data, int len)
605 char iabuf[INET_ADDRSTRLEN];
606 if (p->nat & SIP_NAT_ROUTE)
607 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->recv, sizeof(struct sockaddr_in));
609 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->sa, sizeof(struct sockaddr_in));
611 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));
616 static void sip_destroy(struct sip_pvt *p);
618 /*--- ast_sip_ouraddrfor: NAT fix - decide which IP address to use for ASterisk server? ---*/
619 /* Only used for outbound registrations */
620 static int ast_sip_ouraddrfor(struct in_addr *them, struct in_addr *us)
623 * Using the localaddr structure built up with localnet statements
624 * apply it to their address to see if we need to substitute our
625 * externip or can get away with our internal bindaddr
627 struct sockaddr_in theirs;
628 theirs.sin_addr = *them;
629 if (localaddr && externip.sin_addr.s_addr &&
630 ast_apply_ha(localaddr, &theirs)) {
631 char iabuf[INET_ADDRSTRLEN];
632 memcpy(us, &externip.sin_addr, sizeof(struct in_addr));
633 ast_inet_ntoa(iabuf, sizeof(iabuf), *(struct in_addr *)&them->s_addr);
634 ast_log(LOG_DEBUG, "Target address %s is not local, substituting externip\n", iabuf);
636 else if (bindaddr.sin_addr.s_addr)
637 memcpy(us, &bindaddr.sin_addr, sizeof(struct in_addr));
639 return ast_ouraddrfor(them, us);
643 static int append_history(struct sip_pvt *p, char *event, char *data)
645 struct sip_history *hist, *prev;
649 hist = malloc(sizeof(struct sip_history));
651 memset(hist, 0, sizeof(struct sip_history));
652 snprintf(hist->event, sizeof(hist->event), "%-15s %s", event, data);
656 if ((*c == '\r') || (*c == '\n')) {
662 /* Enqueue into history */
675 /*--- retrans_pkt: Retransmit SIP message if no answer ---*/
676 static int retrans_pkt(void *data)
678 struct sip_pkt *pkt=data, *prev, *cur;
680 char iabuf[INET_ADDRSTRLEN];
681 ast_mutex_lock(&pkt->owner->lock);
682 if (pkt->retrans < MAX_RETRANS) {
684 if (sip_debug_test_pvt(pkt->owner)) {
685 if (pkt->owner->nat & SIP_NAT_ROUTE)
686 ast_verbose("Retransmitting #%d (NAT):\n%s\n to %s:%d\n", pkt->retrans, pkt->data, ast_inet_ntoa(iabuf, sizeof(iabuf), pkt->owner->recv.sin_addr), ntohs(pkt->owner->recv.sin_port));
688 ast_verbose("Retransmitting #%d (no NAT):\n%s\n to %s:%d\n", pkt->retrans, pkt->data, ast_inet_ntoa(iabuf, sizeof(iabuf), pkt->owner->sa.sin_addr), ntohs(pkt->owner->sa.sin_port));
690 append_history(pkt->owner, "ReTx", pkt->data);
691 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
694 ast_log(LOG_WARNING, "Maximum retries exceeded on call %s for seqno %d (%s %s)\n", pkt->owner->callid, pkt->seqno, (pkt->flags & FLAG_FATAL) ? "Critical" : "Non-critical", (pkt->flags & FLAG_RESPONSE) ? "Response" : "Request");
695 append_history(pkt->owner, "MaxRetries", pkt->flags & FLAG_FATAL ? "(Critical)" : "(Non-critical)");
697 if (pkt->flags & FLAG_FATAL) {
698 while(pkt->owner->owner && ast_mutex_trylock(&pkt->owner->owner->lock)) {
699 ast_mutex_unlock(&pkt->owner->lock);
701 ast_mutex_lock(&pkt->owner->lock);
703 if (pkt->owner->owner) {
704 pkt->owner->alreadygone=1;
705 ast_queue_hangup(pkt->owner->owner);
706 ast_mutex_unlock(&pkt->owner->owner->lock);
708 /* If no owner, destroy now */
709 pkt->owner->needdestroy = 1;
712 /* In any case, go ahead and remove the packet */
714 cur = pkt->owner->packets;
723 prev->next = cur->next;
725 pkt->owner->packets = cur->next;
726 ast_mutex_unlock(&pkt->owner->lock);
730 ast_log(LOG_WARNING, "Weird, couldn't find packet owner!\n");
733 ast_mutex_unlock(&pkt->owner->lock);
737 /*--- __sip_reliable_xmit: transmit packet with retransmits ---*/
738 static int __sip_reliable_xmit(struct sip_pvt *p, int seqno, int resp, char *data, int len, int fatal)
741 pkt = malloc(sizeof(struct sip_pkt) + len + 1);
744 memset(pkt, 0, sizeof(struct sip_pkt));
745 memcpy(pkt->data, data, len);
746 pkt->packetlen = len;
747 pkt->next = p->packets;
751 pkt->data[len] = '\0';
753 pkt->flags |= FLAG_FATAL;
754 /* Schedule retransmission */
755 pkt->retransid = ast_sched_add(sched, DEFAULT_RETRANS, retrans_pkt, pkt);
756 pkt->next = p->packets;
758 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
759 if (!strncasecmp(pkt->data, "INVITE", 6)) {
760 /* Note this is a pending invite */
761 p->pendinginvite = seqno;
766 /*--- __sip_autodestruct: Kill a call (called by scheduler) ---*/
767 static int __sip_autodestruct(void *data)
769 struct sip_pvt *p = data;
771 ast_log(LOG_DEBUG, "Auto destroying call '%s'\n", p->callid);
772 append_history(p, "AutoDestroy", "");
774 ast_log(LOG_WARNING, "Autodestruct on call '%s' with owner in place\n", p->callid);
775 ast_queue_hangup(p->owner);
782 /*--- sip_scheddestroy: Schedule destruction of SIP call ---*/
783 static int sip_scheddestroy(struct sip_pvt *p, int ms)
786 if (sip_debug_test_pvt(p))
787 ast_verbose("Scheduling destruction of call '%s' in %d ms\n", p->callid, ms);
789 snprintf(tmp, sizeof(tmp), "%d ms", ms);
790 append_history(p, "SchedDestroy", tmp);
792 if (p->autokillid > -1)
793 ast_sched_del(sched, p->autokillid);
794 p->autokillid = ast_sched_add(sched, ms, __sip_autodestruct, p);
798 /*--- sip_cancel_destroy: Cancel destruction of SIP call ---*/
799 static int sip_cancel_destroy(struct sip_pvt *p)
801 if (p->autokillid > -1)
802 ast_sched_del(sched, p->autokillid);
803 append_history(p, "CancelDestroy", "");
808 /*--- __sip_ack: Acknowledges receipt of a packet and stops retransmission ---*/
809 static int __sip_ack(struct sip_pvt *p, int seqno, int resp, const char *msg)
811 struct sip_pkt *cur, *prev = NULL;
814 /* Just in case... */
815 if (!msg) msg = "___NEVER___";
818 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp) &&
819 ((cur->flags & FLAG_RESPONSE) ||
820 (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
821 if (!resp && (seqno == p->pendinginvite)) {
822 ast_log(LOG_DEBUG, "Acked pending invite %d\n", p->pendinginvite);
823 p->pendinginvite = 0;
826 /* this is our baby */
828 prev->next = cur->next;
830 p->packets = cur->next;
831 if (cur->retransid > -1)
832 ast_sched_del(sched, cur->retransid);
840 ast_log(LOG_DEBUG, "Stopping retransmission on '%s' of %s %d: %s\n", p->callid, resp ? "Response" : "Request", seqno, res ? "Not Found" : "Found");
844 /* Pretend to ack all packets */
845 static int __sip_pretend_ack(struct sip_pvt *p)
848 __sip_ack(p, p->packets->seqno, (p->packets->flags & FLAG_RESPONSE), p->packets->data);
853 /*--- __sip_semi_ack: Acks receipt of packet, keep it around (used for provisional responses) ---*/
854 static int __sip_semi_ack(struct sip_pvt *p, int seqno, int resp, const char *msg)
860 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp) &&
861 ((cur->flags & FLAG_RESPONSE) ||
862 (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
863 /* this is our baby */
864 if (cur->retransid > -1)
865 ast_sched_del(sched, cur->retransid);
872 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");
876 static void parse(struct sip_request *req);
877 static char *get_header(struct sip_request *req, char *name);
878 static void copy_request(struct sip_request *dst,struct sip_request *src);
880 static void parse_copy(struct sip_request *dst, struct sip_request *src)
882 memset(dst, 0, sizeof(*dst));
883 memcpy(dst->data, src->data, sizeof(dst->data));
887 /*--- send_response: Transmit response on SIP request---*/
888 static int send_response(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
891 char iabuf[INET_ADDRSTRLEN];
892 struct sip_request tmp;
894 if (sip_debug_test_pvt(p)) {
895 if (p->nat & SIP_NAT_ROUTE)
896 ast_verbose("%sTransmitting (NAT):\n%s\n to %s:%d\n", reliable ? "Reliably " : "", req->data, ast_inet_ntoa(iabuf, sizeof(iabuf), p->recv.sin_addr), ntohs(p->recv.sin_port));
898 ast_verbose("%sTransmitting (no NAT):\n%s\n to %s:%d\n", reliable ? "Reliably " : "", req->data, ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr), ntohs(p->sa.sin_port));
902 parse_copy(&tmp, req);
903 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
904 append_history(p, "TxRespRel", tmpmsg);
906 res = __sip_reliable_xmit(p, seqno, 1, req->data, req->len, (reliable > 1));
909 parse_copy(&tmp, req);
910 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
911 append_history(p, "TxResp", tmpmsg);
913 res = __sip_xmit(p, req->data, req->len);
920 /*--- send_request: Send SIP Request to the other part of the dialogue ---*/
921 static int send_request(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
924 char iabuf[INET_ADDRSTRLEN];
925 struct sip_request tmp;
927 if (sip_debug_test_pvt(p)) {
928 if (p->nat & SIP_NAT_ROUTE)
929 ast_verbose("%sTransmitting:\n%s (NAT) to %s:%d\n", reliable ? "Reliably " : "", req->data, ast_inet_ntoa(iabuf, sizeof(iabuf), p->recv.sin_addr), ntohs(p->recv.sin_port));
931 ast_verbose("%sTransmitting:\n%s (no NAT) to %s:%d\n", reliable ? "Reliably " : "", req->data, ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr), ntohs(p->sa.sin_port));
935 parse_copy(&tmp, req);
936 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
937 append_history(p, "TxReqRel", tmpmsg);
939 res = __sip_reliable_xmit(p, seqno, 0, req->data, req->len, (reliable > 1));
942 parse_copy(&tmp, req);
943 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
944 append_history(p, "TxReq", tmpmsg);
946 res = __sip_xmit(p, req->data, req->len);
951 /*--- url_decode: Decode SIP URL ---*/
952 static void url_decode(char *s)
960 if (sscanf(s + 1, "%2x", &tmp) == 1) {
962 s += 2; /* Will be incremented once more when we break out */
966 /* Fall through if something wasn't right with the formatting */
976 /*--- ditch_braces: Pick out text in braces from character string ---*/
977 static char *ditch_braces(char *tmp)
982 if ((q = strchr(tmp, '"')) ) {
984 if ((q = strchr(c, '"')) )
987 ast_log(LOG_WARNING, "No closing quote in '%s'\n", tmp);
991 if ((n = strchr(c, '<')) ) {
993 while(*c && *c != '>') c++;
995 ast_log(LOG_WARNING, "No closing brace in '%s'\n", tmp);
1004 /*--- sip_sendtext: Send SIP MESSAGE text within a call ---*/
1005 /* Called from PBX core text message functions */
1006 static int sip_sendtext(struct ast_channel *ast, char *text)
1008 struct sip_pvt *p = ast->pvt->pvt;
1009 int debug=sip_debug_test_pvt(p);
1012 ast_verbose("Sending text %s on %s\n", text, ast->name);
1015 if (!text || ast_strlen_zero(text))
1018 ast_verbose("Really sending text %s on %s\n", text, ast->name);
1019 transmit_message_with_text(p, text);
1023 static void realtime_update_peer(const char *peername, struct sockaddr_in *sin, const char *username, int expirey)
1027 char regseconds[20];
1032 snprintf(regseconds, sizeof(regseconds), "%ld", nowtime);
1033 ast_inet_ntoa(ipaddr, sizeof(ipaddr), sin->sin_addr);
1034 snprintf(port, sizeof(port), "%d", ntohs(sin->sin_port));
1035 ast_update_realtime("sipfriends", "name", peername, "ipaddr", ipaddr, "port", port, "regseconds", regseconds, "username", username, NULL);
1038 static void register_peer_exten(struct sip_peer *peer, int onoff)
1040 unsigned char multi[256]="";
1041 char *stringp, *ext;
1042 if (!ast_strlen_zero(regcontext)) {
1043 strncpy(multi, ast_strlen_zero(peer->regexten) ? peer->name : peer->regexten, sizeof(multi) - 1);
1045 while((ext = strsep(&stringp, "&"))) {
1047 ast_add_extension(regcontext, 1, ext, 1, NULL, NULL, "Noop", strdup(peer->name), free, channeltype);
1049 ast_context_remove_extension(regcontext, ext, 1, NULL);
1054 static void destroy_peer(struct sip_peer *peer)
1056 /* Delete it, it needs to disappear */
1058 sip_destroy(peer->call);
1059 if (peer->expire > -1)
1060 ast_sched_del(sched, peer->expire);
1061 if (peer->pokeexpire > -1)
1062 ast_sched_del(sched, peer->pokeexpire);
1063 register_peer_exten(peer, 0);
1064 ast_free_ha(peer->ha);
1068 /*--- update_peer: Update peer data in database (if used) ---*/
1069 static void update_peer(struct sip_peer *p, int expiry)
1072 realtime_update_peer(p->name, &p->addr, p->username, expiry);
1075 static struct sip_peer *build_peer(const char *name, struct ast_variable *v, int temponly);
1077 static struct sip_peer *realtime_peer(const char *peername, struct sockaddr_in *sin)
1079 struct ast_variable *var, *tmp=NULL;
1081 struct sip_peer *peer=NULL;
1082 time_t nowtime, regseconds;
1086 ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr);
1088 var = ast_load_realtime("sipfriends", "name", peername, NULL);
1090 var = ast_load_realtime("sipfriends", "ipaddr", iabuf, NULL);
1092 /* Make sure it's not a user only... */
1093 peer = build_peer(peername, var, 1);
1095 /* Add some finishing touches, addresses, etc */
1099 if (!strcasecmp(tmp->name, "type")) {
1100 if (strcasecmp(tmp->value, "friend") &&
1101 strcasecmp(tmp->value, "peer")) {
1102 /* Whoops, we weren't supposed to exist! */
1107 } else if (!strcasecmp(tmp->name, "regseconds")) {
1108 if (sscanf(tmp->value, "%li", ®seconds) != 1)
1110 } else if (!strcasecmp(tmp->name, "ipaddr")) {
1111 inet_aton(tmp->value, &(peer->addr.sin_addr));
1112 } else if (!strcasecmp(tmp->name, "port")) {
1113 peer->addr.sin_port = htons(atoi(tmp->value));
1114 } else if (!strcasecmp(tmp->name, "host")) {
1115 if (!strcasecmp(tmp->value, "dynamic"))
1120 if (peer && dynamic) {
1122 if ((nowtime - regseconds) > 0) {
1123 memset(&peer->addr, 0, sizeof(peer->addr));
1125 ast_log(LOG_DEBUG, "Bah, we're expired (%ld/%ld/%ld)!\n", nowtime - regseconds, regseconds, nowtime);
1129 ast_destroy_realtime(var);
1134 /*--- find_peer: Locate peer by name or ip address */
1135 static struct sip_peer *find_peer(const char *peer, struct sockaddr_in *sin)
1137 struct sip_peer *p = NULL;
1141 /* Find by peer name */
1143 if (!strcasecmp(p->name, peer)) {
1152 if (!inaddrcmp(&p->addr, sin) ||
1154 (p->addr.sin_addr.s_addr == sin->sin_addr.s_addr))) {
1162 p = realtime_peer(peer, sin);
1168 static void destroy_user(struct sip_user *user)
1170 ast_free_ha(user->ha);
1172 ast_destroy_realtime(user->vars);
1178 static struct sip_user *build_user(const char *name, struct ast_variable *v);
1179 static struct sip_user *realtime_user(const char *username)
1181 struct ast_variable *var;
1182 struct ast_variable *tmp;
1183 struct sip_user *user=NULL;
1184 var = ast_load_realtime("sipfriends", "name", username, NULL);
1186 /* Make sure it's not a user only... */
1187 user = build_user(username, var);
1189 /* Add some finishing touches, addresses, etc */
1193 if (!strcasecmp(tmp->name, "type")) {
1194 if (strcasecmp(tmp->value, "friend") &&
1195 strcasecmp(tmp->value, "user")) {
1196 /* Whoops, we weren't supposed to exist! */
1205 ast_destroy_realtime(var);
1210 /*--- find_user: Locate user by name */
1211 static struct sip_user *find_user(char *name)
1213 struct sip_user *u = NULL;
1217 if (!strcasecmp(u->name, name)) {
1223 u = realtime_user(name);
1228 /*--- create_addr: create address structure from peer definition ---*/
1229 /* Or, if peer not found, find it in the global DNS */
1230 /* returns TRUE on failure, FALSE on success */
1231 static int create_addr(struct sip_pvt *r, char *opeer)
1234 struct ast_hostent ahp;
1240 char host[256], *hostn;
1243 strncpy(peer, opeer, sizeof(peer) - 1);
1244 port = strchr(peer, ':');
1249 r->sa.sin_family = AF_INET;
1250 ast_mutex_lock(&peerl.lock);
1251 p = find_peer(peer, NULL);
1255 r->capability = p->capability;
1258 ast_log(LOG_DEBUG, "Setting NAT on RTP to %d\n", (r->nat & SIP_NAT_ROUTE));
1259 ast_rtp_setnat(r->rtp, (r->nat & SIP_NAT_ROUTE));
1262 ast_log(LOG_DEBUG, "Setting NAT on VRTP to %d\n", (r->nat & SIP_NAT_ROUTE));
1263 ast_rtp_setnat(r->vrtp, (r->nat & SIP_NAT_ROUTE));
1265 strncpy(r->peername, p->username, sizeof(r->peername)-1);
1266 strncpy(r->authname, p->username, sizeof(r->authname)-1);
1267 strncpy(r->peersecret, p->secret, sizeof(r->peersecret)-1);
1268 strncpy(r->peermd5secret, p->md5secret, sizeof(r->peermd5secret)-1);
1269 strncpy(r->username, p->username, sizeof(r->username)-1);
1270 strncpy(r->tohost, p->tohost, sizeof(r->tohost)-1);
1271 strncpy(r->fullcontact, p->fullcontact, sizeof(r->fullcontact)-1);
1272 if (!r->initreq.headers && !ast_strlen_zero(p->fromdomain)) {
1273 if ((callhost = strchr(r->callid, '@'))) {
1274 strncpy(callhost + 1, p->fromdomain, sizeof(r->callid) - (callhost - r->callid) - 2);
1277 if (ast_strlen_zero(r->tohost)) {
1278 if (p->addr.sin_addr.s_addr)
1279 ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->addr.sin_addr);
1281 ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->defaddr.sin_addr);
1283 if (!ast_strlen_zero(p->fromdomain))
1284 strncpy(r->fromdomain, p->fromdomain, sizeof(r->fromdomain)-1);
1285 if (!ast_strlen_zero(p->fromuser))
1286 strncpy(r->fromuser, p->fromuser, sizeof(r->fromuser)-1);
1287 r->insecure = p->insecure;
1288 r->canreinvite = p->canreinvite;
1289 r->maxtime = p->maxms;
1290 r->callgroup = p->callgroup;
1291 r->pickupgroup = p->pickupgroup;
1293 r->dtmfmode = p->dtmfmode;
1294 if (r->dtmfmode & SIP_DTMF_RFC2833)
1295 r->noncodeccapability |= AST_RTP_DTMF;
1297 r->noncodeccapability &= ~AST_RTP_DTMF;
1299 r->promiscredir = p->promiscredir;
1300 r->usereqphone = p->usereqphone;
1301 strncpy(r->context, p->context,sizeof(r->context)-1);
1302 if ((p->addr.sin_addr.s_addr || p->defaddr.sin_addr.s_addr) &&
1303 (!p->maxms || ((p->lastms >= 0) && (p->lastms <= p->maxms)))) {
1304 if (p->addr.sin_addr.s_addr) {
1305 r->sa.sin_addr = p->addr.sin_addr;
1306 r->sa.sin_port = p->addr.sin_port;
1308 r->sa.sin_addr = p->defaddr.sin_addr;
1309 r->sa.sin_port = p->defaddr.sin_port;
1311 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1319 ast_mutex_unlock(&peerl.lock);
1323 portno = atoi(port);
1325 portno = DEFAULT_SIP_PORT;
1330 snprintf(service, sizeof(service), "_sip._udp.%s", peer);
1331 ret = ast_get_srv(NULL, host, sizeof(host), &tportno, service);
1337 hp = ast_gethostbyname(hostn, &ahp);
1339 strncpy(r->tohost, peer, sizeof(r->tohost) - 1);
1340 memcpy(&r->sa.sin_addr, hp->h_addr, sizeof(r->sa.sin_addr));
1341 r->sa.sin_port = htons(portno);
1342 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1345 ast_log(LOG_WARNING, "No such host: %s\n", peer);
1358 /*--- auto_congest: Scheduled congestion on a call ---*/
1359 static int auto_congest(void *nothing)
1361 struct sip_pvt *p = nothing;
1362 ast_mutex_lock(&p->lock);
1365 if (!ast_mutex_trylock(&p->owner->lock)) {
1366 ast_log(LOG_NOTICE, "Auto-congesting %s\n", p->owner->name);
1367 ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
1368 ast_mutex_unlock(&p->owner->lock);
1371 ast_mutex_unlock(&p->lock);
1378 /*--- sip_call: Initiate SIP call from PBX ---*/
1379 /* used from the dial() application */
1380 static int sip_call(struct ast_channel *ast, char *dest, int timeout)
1384 char *vxml_url = NULL;
1385 char *distinctive_ring = NULL;
1386 char *osptoken = NULL;
1388 char *osphandle = NULL;
1390 struct varshead *headp;
1391 struct ast_var_t *current;
1392 int addsipheaders = 0;
1395 if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) {
1396 ast_log(LOG_WARNING, "sip_call called on %s, neither down nor reserved\n", ast->name);
1399 /* Check whether there is vxml_url, distinctive ring variables */
1401 headp=&ast->varshead;
1402 AST_LIST_TRAVERSE(headp,current,entries) {
1403 /* Check whether there is a VXML_URL variable */
1404 if (!vxml_url && !strcasecmp(ast_var_name(current),"VXML_URL")) {
1405 vxml_url = ast_var_value(current);
1406 } else if (!distinctive_ring && !strcasecmp(ast_var_name(current),"ALERT_INFO")) {
1407 /* Check whether there is a ALERT_INFO variable */
1408 distinctive_ring = ast_var_value(current);
1409 } else if (!addsipheaders && !strncasecmp(ast_var_name(current),"SIPADDHEADER",strlen("SIPADDHEADER"))) {
1410 /* Check whether there is a variable with a name starting with SIPADDHEADER */
1416 else if (!osptoken && !strcasecmp(ast_var_name(current), "OSPTOKEN")) {
1417 osptoken = ast_var_value(current);
1418 } else if (!osphandle && !strcasecmp(ast_var_name(current), "OSPHANDLE")) {
1419 osphandle = ast_var_value(current);
1427 if (!osptoken || !osphandle || (sscanf(osphandle, "%i", &p->osphandle) != 1)) {
1428 /* Force Disable OSP support */
1434 ast_log(LOG_DEBUG, "Outgoing Call for %s\n", p->username);
1435 res = update_user_counter(p,INC_OUT_USE);
1437 p->callingpres = ast->cid.cid_pres;
1438 p->jointcapability = p->capability;
1439 transmit_invite(p, "INVITE", 1, NULL, NULL, vxml_url,distinctive_ring, osptoken, addsipheaders, 1);
1441 /* Initialize auto-congest time */
1442 p->initid = ast_sched_add(sched, p->maxtime * 4, auto_congest, p);
1448 /*--- __sip_destroy: Execute destrucion of call structure, release memory---*/
1449 static void __sip_destroy(struct sip_pvt *p, int lockowner)
1451 struct sip_pvt *cur, *prev = NULL;
1453 struct sip_history *hist;
1455 if (sip_debug_test_pvt(p))
1456 ast_verbose("Destroying call '%s'\n", p->callid);
1457 if (p->stateid > -1)
1458 ast_extension_state_del(p->stateid, NULL);
1460 ast_sched_del(sched, p->initid);
1461 if (p->autokillid > -1)
1462 ast_sched_del(sched, p->autokillid);
1465 ast_rtp_destroy(p->rtp);
1468 ast_rtp_destroy(p->vrtp);
1471 free_old_route(p->route);
1475 /* Carefully unlink from registry */
1476 struct sip_registry *reg;
1477 ast_mutex_lock(®l.lock);
1478 reg = regl.registrations;
1480 if ((reg == p->registry) && (p->registry->call == p))
1481 p->registry->call=NULL;
1484 ast_mutex_unlock(®l.lock);
1486 /* Unlink us from the owner if we have one */
1489 ast_mutex_lock(&p->owner->lock);
1490 ast_log(LOG_DEBUG, "Detaching from %s\n", p->owner->name);
1491 p->owner->pvt->pvt = NULL;
1493 ast_mutex_unlock(&p->owner->lock);
1498 p->history = p->history->next;
1505 prev->next = cur->next;
1514 ast_log(LOG_WARNING, "%p is not in list?!?! \n", cur);
1517 ast_sched_del(sched, p->initid);
1518 while((cp = p->packets)) {
1519 p->packets = p->packets->next;
1520 if (cp->retransid > -1)
1521 ast_sched_del(sched, cp->retransid);
1524 ast_mutex_destroy(&p->lock);
1526 ast_destroy_realtime(p->vars);
1533 /*--- update_user_counter: Handle incominglimit and outgoinglimit for SIP users ---*/
1534 /* Note: This is going to be replaced by app_groupcount */
1535 static int update_user_counter(struct sip_pvt *fup, int event)
1537 char name[256] = "";
1539 strncpy(name, fup->username, sizeof(name) - 1);
1540 ast_mutex_lock(&userl.lock);
1541 u = find_user(name);
1543 ast_log(LOG_DEBUG, "%s is not a local user\n", name);
1544 ast_mutex_unlock(&userl.lock);
1548 /* incoming and outgoing affects the inUse counter */
1551 if ( u->inUse > 0 ) {
1559 if (u->incominglimit > 0 ) {
1560 if (u->inUse >= u->incominglimit) {
1561 ast_log(LOG_ERROR, "Call from user '%s' rejected due to usage limit of %d\n", u->name, u->incominglimit);
1562 /* inc inUse as well */
1563 if ( event == INC_OUT_USE ) {
1566 ast_mutex_unlock(&userl.lock);
1574 ast_log(LOG_DEBUG, "Call from user '%s' is %d out of %d\n", u->name, u->inUse, u->incominglimit);
1576 /* we don't use these anymore
1578 if ( u->outUse > 0 ) {
1585 if ( u->outgoinglimit > 0 ) {
1586 if ( u->outUse >= u->outgoinglimit ) {
1587 ast_log(LOG_ERROR, "Outgoing call from user '%s' rejected due to usage limit of %d\n", u->name, u->outgoinglimit);
1588 ast_mutex_unlock(&userl.lock);
1599 ast_log(LOG_ERROR, "update_user_counter(%s,%d) called with no event!\n",u->name,event);
1601 ast_mutex_unlock(&userl.lock);
1608 /*--- sip_destroy: Destroy SIP call structure ---*/
1609 static void sip_destroy(struct sip_pvt *p)
1611 ast_mutex_lock(&iflock);
1612 __sip_destroy(p, 1);
1613 ast_mutex_unlock(&iflock);
1617 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal);
1619 static int hangup_sip2cause(int cause)
1621 /* Possible values from causes.h
1622 AST_CAUSE_NOTDEFINED AST_CAUSE_NORMAL AST_CAUSE_BUSY
1623 AST_CAUSE_FAILURE AST_CAUSE_CONGESTION AST_CAUSE_UNALLOCATED
1627 case 404: /* Not found */
1628 return AST_CAUSE_UNALLOCATED;
1629 case 483: /* Too many hops */
1630 return AST_CAUSE_FAILURE;
1632 return AST_CAUSE_BUSY;
1634 return AST_CAUSE_NORMAL;
1640 static char *hangup_cause2sip(int cause)
1644 case AST_CAUSE_FAILURE:
1645 return "500 Server internal failure";
1646 case AST_CAUSE_CONGESTION:
1647 return "503 Service Unavailable";
1648 case AST_CAUSE_BUSY:
1657 /*--- sip_hangup: Hangup SIP call */
1658 static int sip_hangup(struct ast_channel *ast)
1660 struct sip_pvt *p = ast->pvt->pvt;
1662 int needdestroy = 0;
1664 ast_log(LOG_DEBUG, "sip_hangup(%s)\n", ast->name);
1665 if (!ast->pvt->pvt) {
1666 ast_log(LOG_DEBUG, "Asked to hangup channel not connected\n");
1669 ast_mutex_lock(&p->lock);
1671 if ((p->osphandle > -1) && (ast->_state == AST_STATE_UP)) {
1672 ast_osp_terminate(p->osphandle, AST_CAUSE_NORMAL, p->ospstart, time(NULL) - p->ospstart);
1675 if ( p->outgoing ) {
1676 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement outUse counter\n", p->username);
1677 update_user_counter(p, DEC_OUT_USE);
1679 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement inUse counter\n", p->username);
1680 update_user_counter(p, DEC_IN_USE);
1682 /* Determine how to disconnect */
1683 if (p->owner != ast) {
1684 ast_log(LOG_WARNING, "Huh? We aren't the owner?\n");
1685 ast_mutex_unlock(&p->lock);
1688 if (!ast || (ast->_state != AST_STATE_UP))
1693 ast_dsp_free(p->vad);
1696 ast->pvt->pvt = NULL;
1698 ast_mutex_lock(&usecnt_lock);
1700 ast_mutex_unlock(&usecnt_lock);
1701 ast_update_use_count();
1704 /* Start the process if it's not already started */
1705 if (!p->alreadygone && !ast_strlen_zero(p->initreq.data)) {
1708 transmit_request_with_auth(p, "CANCEL", p->ocseq, 1, 0);
1709 /* Actually don't destroy us yet, wait for the 487 on our original
1710 INVITE, but do set an autodestruct just in case we never get it. */
1712 sip_scheddestroy(p, 15000);
1713 if ( p->initid != -1 ) {
1714 /* channel still up - reverse dec of inUse counter
1715 only if the channel is not auto-congested */
1716 if ( p->outgoing ) {
1717 update_user_counter(p, INC_OUT_USE);
1720 update_user_counter(p, INC_IN_USE);
1725 if (ast->hangupcause && ((res = hangup_cause2sip(ast->hangupcause)))) {
1726 transmit_response_reliable(p, res, &p->initreq, 1);
1728 transmit_response_reliable(p, "403 Forbidden", &p->initreq, 1);
1731 if (!p->pendinginvite) {
1733 transmit_request_with_auth(p, "BYE", 0, 1, 1);
1735 /* Note we will need a BYE when this all settles out
1736 but we can't send one while we have "INVITE" outstanding. */
1738 p->needreinvite = 0;
1742 p->needdestroy = needdestroy;
1743 ast_mutex_unlock(&p->lock);
1747 /*--- sip_answer: Answer SIP call , send 200 OK on Invite */
1748 static int sip_answer(struct ast_channel *ast)
1752 struct sip_pvt *p = ast->pvt->pvt;
1754 ast_mutex_lock(&p->lock);
1755 if (ast->_state != AST_STATE_UP) {
1760 codec=pbx_builtin_getvar_helper(p->owner,"SIP_CODEC");
1762 fmt=ast_getformatbyname(codec);
1764 ast_log(LOG_NOTICE, "Changing codec to '%s' for this call because of ${SIP_CODEC) variable\n",codec);
1765 if (p->jointcapability & fmt) {
1766 p->jointcapability &= fmt;
1767 p->capability &= fmt;
1769 ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because it is not shared by both ends.\n");
1770 } else ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because of unrecognized/not configured codec (check allow/disallow in sip.conf): %s\n",codec);
1773 ast_setstate(ast, AST_STATE_UP);
1775 ast_log(LOG_DEBUG, "sip_answer(%s)\n", ast->name);
1776 res = transmit_response_with_sdp(p, "200 OK", &p->initreq, 1);
1778 ast_mutex_unlock(&p->lock);
1782 /*--- sip_write: Send response, support audio media ---*/
1783 static int sip_write(struct ast_channel *ast, struct ast_frame *frame)
1785 struct sip_pvt *p = ast->pvt->pvt;
1787 if (frame->frametype == AST_FRAME_VOICE) {
1788 if (!(frame->subclass & ast->nativeformats)) {
1789 ast_log(LOG_WARNING, "Asked to transmit frame type %d, while native formats is %d (read/write = %d/%d)\n",
1790 frame->subclass, ast->nativeformats, ast->readformat, ast->writeformat);
1794 ast_mutex_lock(&p->lock);
1796 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1797 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1800 res = ast_rtp_write(p->rtp, frame);
1802 ast_mutex_unlock(&p->lock);
1804 } else if (frame->frametype == AST_FRAME_VIDEO) {
1806 ast_mutex_lock(&p->lock);
1808 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1809 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1812 res = ast_rtp_write(p->vrtp, frame);
1814 ast_mutex_unlock(&p->lock);
1816 } else if (frame->frametype == AST_FRAME_IMAGE) {
1819 ast_log(LOG_WARNING, "Can't send %d type frames with SIP write\n", frame->frametype);
1826 /*--- sip_fixup: Fix up a channel: If a channel is consumed, this is called.
1827 Basically update any ->owner links ----*/
1828 static int sip_fixup(struct ast_channel *oldchan, struct ast_channel *newchan)
1830 struct sip_pvt *p = newchan->pvt->pvt;
1831 ast_mutex_lock(&p->lock);
1832 if (p->owner != oldchan) {
1833 ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, p->owner);
1834 ast_mutex_unlock(&p->lock);
1838 ast_mutex_unlock(&p->lock);
1842 /*--- sip_senddigit: Send DTMF character on SIP channel */
1843 /* within one call, we're able to transmit in many methods simultaneously */
1844 static int sip_senddigit(struct ast_channel *ast, char digit)
1846 struct sip_pvt *p = ast->pvt->pvt;
1847 if (p && (p->dtmfmode & SIP_DTMF_INFO)) {
1848 transmit_info_with_digit(p, digit);
1850 if (p && p->rtp && (p->dtmfmode & SIP_DTMF_RFC2833)) {
1851 ast_rtp_senddigit(p->rtp, digit);
1853 /* If in-band DTMF is desired, send that */
1854 if (p->dtmfmode & SIP_DTMF_INBAND)
1860 /*--- sip_transfer: Transfer SIP call */
1861 static int sip_transfer(struct ast_channel *ast, char *dest)
1863 struct sip_pvt *p = ast->pvt->pvt;
1865 res = transmit_refer(p, dest);
1869 /*--- sip_indicate: Play indication to user */
1870 /* With SIP a lot of indications is sent as messages, letting the device play
1871 the indication - busy signal, congestion etc */
1872 static int sip_indicate(struct ast_channel *ast, int condition)
1874 struct sip_pvt *p = ast->pvt->pvt;
1876 case AST_CONTROL_RINGING:
1877 if (ast->_state == AST_STATE_RING) {
1878 if (!p->progress || !p->progressinband) {
1879 /* Send 180 ringing if out-of-band seems reasonable */
1880 transmit_response(p, "180 Ringing", &p->initreq);
1882 if (p->progressinband < 2)
1885 /* Well, if it's not reasonable, just send in-band */
1889 case AST_CONTROL_BUSY:
1890 if (ast->_state != AST_STATE_UP) {
1891 transmit_response(p, "486 Busy Here", &p->initreq);
1893 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1897 case AST_CONTROL_CONGESTION:
1898 if (ast->_state != AST_STATE_UP) {
1899 transmit_response(p, "503 Service Unavailable", &p->initreq);
1901 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1905 case AST_CONTROL_PROGRESS:
1906 case AST_CONTROL_PROCEEDING:
1907 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1908 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1916 ast_log(LOG_WARNING, "Don't know how to indicate condition %d\n", condition);
1924 /*--- sip_new: Initiate a call in the SIP channel */
1925 /* called from sip_request_call (calls from the pbx ) */
1926 static struct ast_channel *sip_new(struct sip_pvt *i, int state, char *title)
1928 struct ast_channel *tmp;
1929 struct ast_variable *v = NULL;
1932 ast_mutex_unlock(&i->lock);
1933 /* Don't hold a sip pvt lock while we allocate a channel */
1934 tmp = ast_channel_alloc(1);
1935 ast_mutex_lock(&i->lock);
1937 /* Select our native format based on codec preference until we receive
1938 something from another device to the contrary. */
1939 ast_mutex_lock(&i->lock);
1940 if (i->jointcapability)
1941 tmp->nativeformats = ast_codec_choose(&i->prefs, i->jointcapability, 1);
1942 else if (i->capability)
1943 tmp->nativeformats = ast_codec_choose(&i->prefs, i->capability, 1);
1945 tmp->nativeformats = ast_codec_choose(&i->prefs, global_capability, 1);
1946 ast_mutex_unlock(&i->lock);
1947 fmt = ast_best_codec(tmp->nativeformats);
1949 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%04x", title, rand() & 0xffff);
1951 if (strchr(i->fromdomain,':'))
1953 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", strchr(i->fromdomain,':')+1, (int)(long)(i));
1957 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", i->fromdomain, (int)(long)(i));
1959 tmp->type = channeltype;
1960 if (i->dtmfmode & SIP_DTMF_INBAND) {
1961 i->vad = ast_dsp_new();
1962 ast_dsp_set_features(i->vad, DSP_FEATURE_DTMF_DETECT);
1964 ast_dsp_digitmode(i->vad, DSP_DIGITMODE_DTMF | DSP_DIGITMODE_RELAXDTMF);
1966 tmp->fds[0] = ast_rtp_fd(i->rtp);
1967 tmp->fds[1] = ast_rtcp_fd(i->rtp);
1969 tmp->fds[2] = ast_rtp_fd(i->vrtp);
1970 tmp->fds[3] = ast_rtcp_fd(i->vrtp);
1972 if (state == AST_STATE_RING)
1974 tmp->adsicpe = AST_ADSI_UNAVAILABLE;
1975 tmp->writeformat = fmt;
1976 tmp->pvt->rawwriteformat = fmt;
1977 tmp->readformat = fmt;
1978 tmp->pvt->rawreadformat = fmt;
1980 tmp->pvt->send_text = sip_sendtext;
1981 tmp->pvt->call = sip_call;
1982 tmp->pvt->hangup = sip_hangup;
1983 tmp->pvt->answer = sip_answer;
1984 tmp->pvt->read = sip_read;
1985 tmp->pvt->write = sip_write;
1986 tmp->pvt->write_video = sip_write;
1987 tmp->pvt->indicate = sip_indicate;
1988 tmp->pvt->transfer = sip_transfer;
1989 tmp->pvt->fixup = sip_fixup;
1990 tmp->pvt->send_digit = sip_senddigit;
1992 tmp->pvt->bridge = ast_rtp_bridge;
1994 tmp->callgroup = i->callgroup;
1995 tmp->pickupgroup = i->pickupgroup;
1996 tmp->cid.cid_pres = i->callingpres;
1997 if (!ast_strlen_zero(i->accountcode))
1998 strncpy(tmp->accountcode, i->accountcode, sizeof(tmp->accountcode)-1);
2000 tmp->amaflags = i->amaflags;
2001 if (!ast_strlen_zero(i->language))
2002 strncpy(tmp->language, i->language, sizeof(tmp->language)-1);
2003 if (!ast_strlen_zero(i->musicclass))
2004 strncpy(tmp->musicclass, i->musicclass, sizeof(tmp->musicclass)-1);
2006 ast_mutex_lock(&usecnt_lock);
2008 ast_mutex_unlock(&usecnt_lock);
2009 strncpy(tmp->context, i->context, sizeof(tmp->context)-1);
2010 strncpy(tmp->exten, i->exten, sizeof(tmp->exten)-1);
2011 if (!ast_strlen_zero(i->cid_num))
2012 tmp->cid.cid_num = strdup(i->cid_num);
2013 if (!ast_strlen_zero(i->cid_name))
2014 tmp->cid.cid_name = strdup(i->cid_name);
2015 if (!ast_strlen_zero(i->rdnis))
2016 tmp->cid.cid_rdnis = strdup(i->rdnis);
2017 if (!ast_strlen_zero(i->exten) && strcmp(i->exten, "s"))
2018 tmp->cid.cid_dnid = strdup(i->exten);
2020 if (!ast_strlen_zero(i->domain)) {
2021 pbx_builtin_setvar_helper(tmp, "SIPDOMAIN", i->domain);
2023 if (!ast_strlen_zero(i->useragent)) {
2024 pbx_builtin_setvar_helper(tmp, "SIPUSERAGENT", i->useragent);
2026 if (!ast_strlen_zero(i->callid)) {
2027 pbx_builtin_setvar_helper(tmp, "SIPCALLID", i->callid);
2029 ast_setstate(tmp, state);
2030 if (state != AST_STATE_DOWN) {
2031 if (ast_pbx_start(tmp)) {
2032 ast_log(LOG_WARNING, "Unable to start PBX on %s\n", tmp->name);
2037 for (v = i->vars ; v ; v = v->next)
2038 pbx_builtin_setvar_helper(tmp,v->name,v->value);
2041 ast_log(LOG_WARNING, "Unable to allocate channel structure\n");
2045 static struct cfalias {
2049 { "Content-Type", "c" },
2050 { "Content-Encoding", "e" },
2054 { "Content-Length", "l" },
2057 { "Supported", "k" },
2058 { "Refer-To", "r" },
2059 { "Allow-Events", "u" },
2064 /*--- get_sdp_by_line: Reads one line of SIP message body */
2065 static char* get_sdp_by_line(char* line, char *name, int nameLen) {
2066 if (strncasecmp(line, name, nameLen) == 0 && line[nameLen] == '=') {
2067 char* r = line + nameLen + 1;
2068 while (*r && (*r < 33)) ++r;
2075 /*--- get_sdp: Gets all kind of SIP message bodies, including SDP,
2076 but the name wrongly applies _only_ sdp */
2077 static char *get_sdp(struct sip_request *req, char *name) {
2079 int len = strlen(name);
2082 for (x=0; x<req->lines; x++) {
2083 r = get_sdp_by_line(req->line[x], name, len);
2084 if (r[0] != '\0') return r;
2090 static void sdpLineNum_iterator_init(int* iterator) {
2094 static char* get_sdp_iterate(int* iterator,
2095 struct sip_request *req, char *name) {
2096 int len = strlen(name);
2098 while (*iterator < req->lines) {
2099 r = get_sdp_by_line(req->line[(*iterator)++], name, len);
2100 if (r[0] != '\0') return r;
2105 static char *__get_header(struct sip_request *req, char *name, int *start)
2108 int len = strlen(name);
2110 if (pedanticsipchecking) {
2111 /* Technically you can place arbitrary whitespace both before and after the ':' in
2112 a header, although RFC3261 clearly says you shouldn't before, and place just
2113 one afterwards. If you shouldn't do it, what absolute idiot decided it was
2114 a good idea to say you can do it, and if you can do it, why in the hell would
2115 you say you shouldn't. */
2116 for (x=*start;x<req->headers;x++) {
2117 if (!strncasecmp(req->header[x], name, len)) {
2118 r = req->header[x] + len;
2119 while(*r && (*r < 33))
2123 while(*r && (*r < 33))
2131 /* We probably shouldn't even bother counting whitespace afterwards but
2132 I guess for backwards compatibility we will */
2133 for (x=*start;x<req->headers;x++) {
2134 if (!strncasecmp(req->header[x], name, len) &&
2135 (req->header[x][len] == ':')) {
2136 r = req->header[x] + len + 1;
2137 while(*r && (*r < 33))
2145 for (x=0;x<sizeof(aliases) / sizeof(aliases[0]); x++)
2146 if (!strcasecmp(aliases[x].fullname, name))
2147 return __get_header(req, aliases[x].shortname, start);
2149 /* Don't return NULL, so get_header is always a valid pointer */
2153 /*--- get_header: Get header from SIP request ---*/
2154 static char *get_header(struct sip_request *req, char *name)
2157 return __get_header(req, name, &start);
2160 /*--- sip_rtp_read: Read RTP from network ---*/
2161 static struct ast_frame *sip_rtp_read(struct ast_channel *ast, struct sip_pvt *p)
2163 /* Retrieve audio/etc from channel. Assumes p->lock is already held. */
2164 struct ast_frame *f;
2165 static struct ast_frame null_frame = { AST_FRAME_NULL, };
2168 f = ast_rtp_read(p->rtp); /* RTP Audio */
2171 f = ast_rtcp_read(p->rtp); /* RTCP Control Channel */
2174 f = ast_rtp_read(p->vrtp); /* RTP Video */
2177 f = ast_rtcp_read(p->vrtp); /* RTCP Control Channel for video */
2182 /* Don't send RFC2833 if we're not supposed to */
2183 if (f && (f->frametype == AST_FRAME_DTMF) && !(p->dtmfmode & SIP_DTMF_RFC2833))
2186 /* We already hold the channel lock */
2187 if (f->frametype == AST_FRAME_VOICE) {
2188 if (f->subclass != p->owner->nativeformats) {
2189 ast_log(LOG_DEBUG, "Oooh, format changed to %d\n", f->subclass);
2190 p->owner->nativeformats = f->subclass;
2191 ast_set_read_format(p->owner, p->owner->readformat);
2192 ast_set_write_format(p->owner, p->owner->writeformat);
2194 if ((p->dtmfmode & SIP_DTMF_INBAND) && p->vad) {
2195 f = ast_dsp_process(p->owner,p->vad,f);
2196 if (f && (f->frametype == AST_FRAME_DTMF))
2197 ast_log(LOG_DEBUG, "Detected DTMF '%c'\n", f->subclass);
2204 /*--- sip_read: Read SIP RTP from channel */
2205 static struct ast_frame *sip_read(struct ast_channel *ast)
2207 struct ast_frame *fr;
2208 struct sip_pvt *p = ast->pvt->pvt;
2209 ast_mutex_lock(&p->lock);
2210 fr = sip_rtp_read(ast, p);
2211 time(&p->lastrtprx);
2212 ast_mutex_unlock(&p->lock);
2216 /*--- build_callid: Build SIP CALLID header ---*/
2217 static void build_callid(char *callid, int len, struct in_addr ourip, char *fromdomain)
2222 char iabuf[INET_ADDRSTRLEN];
2225 res = snprintf(callid, len, "%08x", val);
2229 if (!ast_strlen_zero(fromdomain))
2230 snprintf(callid, len, "@%s", fromdomain);
2232 /* It's not important that we really use our right IP here... */
2233 snprintf(callid, len, "@%s", ast_inet_ntoa(iabuf, sizeof(iabuf), ourip));
2236 /*--- sip_alloc: Allocate SIP_PVT structure and set defaults ---*/
2237 static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useglobal_nat)
2240 char iabuf[INET_ADDRSTRLEN];
2242 p = malloc(sizeof(struct sip_pvt));
2245 /* Keep track of stuff */
2246 memset(p, 0, sizeof(struct sip_pvt));
2247 ast_mutex_init(&p->lock);
2257 memcpy(&p->sa, sin, sizeof(p->sa));
2258 if (ast_sip_ouraddrfor(&p->sa.sin_addr,&p->ourip))
2259 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2261 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2263 p->rtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2265 p->vrtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2269 /* Start with 101 instead of 1 */
2272 ast_log(LOG_WARNING, "Unable to create RTP session: %s\n", strerror(errno));
2273 ast_mutex_destroy(&p->lock);
2275 ast_destroy_realtime(p->vars);
2281 ast_rtp_settos(p->rtp, tos);
2283 ast_rtp_settos(p->vrtp, tos);
2284 if (useglobal_nat && sin) {
2285 /* Setup NAT structure according to global settings if we have an address */
2286 p->nat = global_nat;
2287 memcpy(&p->recv, sin, sizeof(p->recv));
2288 ast_rtp_setnat(p->rtp, (p->nat & SIP_NAT_ROUTE));
2290 ast_rtp_setnat(p->vrtp, (p->nat & SIP_NAT_ROUTE));
2293 strncpy(p->fromdomain, default_fromdomain, sizeof(p->fromdomain) - 1);
2294 /* z9hG4bK is a magic cookie. See RFC 3261 section 8.1.1.7 */
2295 if (p->nat != SIP_NAT_NEVER)
2296 snprintf(p->via, sizeof(p->via), "SIP/2.0/UDP %s:%d;branch=z9hG4bK%08x;rport", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ourport, p->branch);
2298 snprintf(p->via, sizeof(p->via), "SIP/2.0/UDP %s:%d;branch=z9hG4bK%08x", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ourport, p->branch);
2300 build_callid(p->callid, sizeof(p->callid), p->ourip, p->fromdomain);
2302 strncpy(p->callid, callid, sizeof(p->callid) - 1);
2303 /* Assume reinvite OK and via INVITE */
2304 p->canreinvite = global_canreinvite;
2305 /* Assign default music on hold class */
2306 strncpy(p->musicclass, global_musicclass, sizeof(p->musicclass) - 1);
2307 p->dtmfmode = global_dtmfmode;
2308 p->promiscredir = global_promiscredir;
2309 p->trustrpid = global_trustrpid;
2310 p->progressinband = global_progressinband;
2312 p->ospauth = global_ospauth;
2314 p->rtptimeout = global_rtptimeout;
2315 p->rtpholdtimeout = global_rtpholdtimeout;
2316 p->capability = global_capability;
2317 if (p->dtmfmode & SIP_DTMF_RFC2833)
2318 p->noncodeccapability |= AST_RTP_DTMF;
2319 strncpy(p->context, default_context, sizeof(p->context) - 1);
2321 ast_mutex_lock(&iflock);
2324 ast_mutex_unlock(&iflock);
2326 ast_log(LOG_DEBUG, "Allocating new SIP call for %s\n", callid);
2330 /*--- find_call: Connect incoming SIP message to current call or create new call structure */
2331 /* Called by handle_request ,sipsock_read */
2332 static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *sin)
2337 char iabuf[INET_ADDRSTRLEN];
2341 callid = get_header(req, "Call-ID");
2343 if (pedanticsipchecking) {
2344 /* In principle Call-ID's uniquely identify a call, however some vendors
2345 (i.e. Pingtel) send multiple calls with the same Call-ID and different
2346 tags in order to simplify billing. The RFC does state that we have to
2347 compare tags in addition to the call-id, but this generate substantially
2348 more overhead which is totally unnecessary for the vast majority of sane
2349 SIP implementations, and thus Asterisk does not enable this behavior
2350 by default. Short version: You'll need this option to support conferencing
2352 strncpy(tmp, req->header[0], sizeof(tmp) - 1);
2354 c = strchr(tmp, ' ');
2357 if (!strcasecmp(cmd, "SIP/2.0"))
2358 strncpy(tmp, get_header(req, "To"), sizeof(tmp) - 1);
2360 strncpy(tmp, get_header(req, "From"), sizeof(tmp) - 1);
2361 tag = strstr(tmp, "tag=");
2364 c = strchr(tag, ';');
2371 if (ast_strlen_zero(callid)) {
2372 ast_log(LOG_WARNING, "Call missing call ID from '%s'\n", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr));
2375 ast_mutex_lock(&iflock);
2378 if (!strcmp(p->callid, callid) &&
2379 (!pedanticsipchecking || !tag || ast_strlen_zero(p->theirtag) || !strcmp(p->theirtag, tag))) {
2380 /* Found the call */
2381 ast_mutex_lock(&p->lock);
2382 ast_mutex_unlock(&iflock);
2387 ast_mutex_unlock(&iflock);
2388 p = sip_alloc(callid, sin, 1);
2390 ast_mutex_lock(&p->lock);
2394 /*--- sip_register: Parse register=> line in sip.conf and add to registry */
2395 static int sip_register(char *value, int lineno)
2397 struct sip_registry *reg;
2398 char copy[256] = "";
2399 char *username=NULL, *hostname=NULL, *secret=NULL, *authuser=NULL;
2406 strncpy(copy, value, sizeof(copy)-1);
2409 hostname = strrchr(stringp, '@');
2414 if (!username || ast_strlen_zero(username) || !hostname || ast_strlen_zero(hostname)) {
2415 ast_log(LOG_WARNING, "Format for registration is user[:secret[:authuser]]@host[:port][/contact] at line %d", lineno);
2419 username = strsep(&stringp, ":");
2421 secret = strsep(&stringp, ":");
2423 authuser = strsep(&stringp, ":");
2426 hostname = strsep(&stringp, "/");
2428 contact = strsep(&stringp, "/");
2429 if (!contact || ast_strlen_zero(contact))
2432 hostname = strsep(&stringp, ":");
2433 porta = strsep(&stringp, ":");
2435 if (porta && !atoi(porta)) {
2436 ast_log(LOG_WARNING, "%s is not a valid port number at line %d\n", porta, lineno);
2439 reg = malloc(sizeof(struct sip_registry));
2441 memset(reg, 0, sizeof(struct sip_registry));
2442 strncpy(reg->contact, contact, sizeof(reg->contact) - 1);
2444 strncpy(reg->username, username, sizeof(reg->username)-1);
2446 strncpy(reg->hostname, hostname, sizeof(reg->hostname)-1);
2448 strncpy(reg->authuser, authuser, sizeof(reg->authuser)-1);
2450 strncpy(reg->secret, secret, sizeof(reg->secret)-1);
2453 reg->refresh = default_expiry;
2454 reg->portno = porta ? atoi(porta) : 0;
2455 reg->callid_valid = 0;
2457 ast_mutex_lock(®l.lock);
2458 reg->next = regl.registrations;
2459 regl.registrations = reg;
2460 ast_mutex_unlock(®l.lock);
2462 ast_log(LOG_ERROR, "Out of memory\n");
2468 /*--- lws2sws: Parse multiline SIP headers into one header */
2469 /* This is enabled if pedanticsipchecking is enabled */
2470 static int lws2sws(char *msgbuf, int len)
2476 /* Eliminate all CRs */
2477 if (msgbuf[h] == '\r') {
2481 /* Check for end-of-line */
2482 if (msgbuf[h] == '\n') {
2483 /* Check for end-of-message */
2486 /* Check for a continuation line */
2487 if (msgbuf[h + 1] == ' ' || msgbuf[h + 1] == '\t') {
2488 /* Merge continuation line */
2492 /* Propagate LF and start new line */
2493 msgbuf[t++] = msgbuf[h++];
2497 if (msgbuf[h] == ' ' || msgbuf[h] == '\t') {
2502 msgbuf[t++] = msgbuf[h++];
2506 msgbuf[t++] = msgbuf[h++];
2514 /*--- parse: Parse a SIP message ----*/
2515 static void parse(struct sip_request *req)
2517 /* Divide fields by NULL's */
2522 /* First header starts immediately */
2526 /* We've got a new header */
2530 printf("Header: %s (%d)\n", req->header[f], strlen(req->header[f]));
2532 if (ast_strlen_zero(req->header[f])) {
2533 /* Line by itself means we're now in content */
2537 if (f >= SIP_MAX_HEADERS - 1) {
2538 ast_log(LOG_WARNING, "Too many SIP headers...\n");
2541 req->header[f] = c + 1;
2542 } else if (*c == '\r') {
2543 /* Ignore but eliminate \r's */
2548 /* Check for last header */
2549 if (!ast_strlen_zero(req->header[f]))
2552 /* Now we process any mime content */
2557 /* We've got a new line */
2560 printf("Line: %s (%d)\n", req->line[f], strlen(req->line[f]));
2562 if (f >= SIP_MAX_LINES - 1) {
2563 ast_log(LOG_WARNING, "Too many SDP lines...\n");
2566 req->line[f] = c + 1;
2567 } else if (*c == '\r') {
2568 /* Ignore and eliminate \r's */
2573 /* Check for last line */
2574 if (!ast_strlen_zero(req->line[f]))
2578 ast_log(LOG_WARNING, "Odd content, extra stuff left over ('%s')\n", c);
2581 /*--- process_sdp: Process SIP SDP ---*/
2582 static int process_sdp(struct sip_pvt *p, struct sip_request *req)
2588 char iabuf[INET_ADDRSTRLEN];
2592 int peercapability, peernoncodeccapability;
2593 int vpeercapability=0, vpeernoncodeccapability=0;
2594 struct sockaddr_in sin;
2597 struct ast_hostent ahp;
2602 int debug=sip_debug_test_pvt(p);
2604 /* Update our last rtprx when we receive an SDP, too */
2605 time(&p->lastrtprx);
2607 /* Get codec and RTP info from SDP */
2608 if (strcasecmp(get_header(req, "Content-Type"), "application/sdp")) {
2609 ast_log(LOG_NOTICE, "Content is '%s', not 'application/sdp'\n", get_header(req, "Content-Type"));
2612 m = get_sdp(req, "m");
2613 c = get_sdp(req, "c");
2614 if (ast_strlen_zero(m) || ast_strlen_zero(c)) {
2615 ast_log(LOG_WARNING, "Insufficient information for SDP (m = '%s', c = '%s')\n", m, c);
2618 if (sscanf(c, "IN IP4 %256s", host) != 1) {
2619 ast_log(LOG_WARNING, "Invalid host in c= line, '%s'\n", c);
2622 /* XXX This could block for a long time, and block the main thread! XXX */
2623 hp = ast_gethostbyname(host, &ahp);
2625 ast_log(LOG_WARNING, "Unable to lookup host in c= line, '%s'\n", c);
2628 sdpLineNum_iterator_init(&iterator);
2630 while ((m = get_sdp_iterate(&iterator, req, "m"))[0] != '\0') {
2631 if ((sscanf(m, "audio %d RTP/AVP %n", &x, &len) == 1) ||
2632 (sscanf(m, "audio %d/%d RTP/AVP %n", &x, &y, &len) == 2)) {
2634 /* Scan through the RTP payload types specified in a "m=" line: */
2635 ast_rtp_pt_clear(p->rtp);
2637 while(!ast_strlen_zero(codecs)) {
2638 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2639 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2643 ast_verbose("Found RTP audio format %d\n", codec);
2644 ast_rtp_set_m_type(p->rtp, codec);
2646 /* Skip over any whitespace */
2647 while(*codecs && (*codecs < 33)) codecs++;
2651 ast_rtp_pt_clear(p->vrtp); /* Must be cleared in case no m=video line exists */
2653 if (p->vrtp && (sscanf(m, "video %d RTP/AVP %n", &x, &len) == 1)) {
2656 /* Scan through the RTP payload types specified in a "m=" line: */
2658 while(!ast_strlen_zero(codecs)) {
2659 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2660 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2664 ast_verbose("Found video format %s\n", ast_getformatname(codec));
2665 ast_rtp_set_m_type(p->vrtp, codec);
2667 /* Skip over any whitespace */
2668 while(*codecs && (*codecs < 33)) codecs++;
2673 /* RTP addresses and ports for audio and video */
2674 sin.sin_family = AF_INET;
2675 memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
2677 /* Setup audio port number */
2678 sin.sin_port = htons(portno);
2679 if (p->rtp && sin.sin_port) {
2680 ast_rtp_set_peer(p->rtp, &sin);
2682 ast_verbose("Peer audio RTP is at port %s:%d\n", ast_inet_ntoa(iabuf,sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2683 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));
2686 /* Setup video port number */
2687 sin.sin_port = htons(vportno);
2688 if (p->vrtp && sin.sin_port) {
2689 ast_rtp_set_peer(p->vrtp, &sin);
2691 ast_verbose("Peer video RTP is at port %s:%d\n", ast_inet_ntoa(iabuf,sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2692 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));
2696 /* Next, scan through each "a=rtpmap:" line, noting each
2697 * specified RTP payload type (with corresponding MIME subtype):
2699 sdpLineNum_iterator_init(&iterator);
2700 while ((a = get_sdp_iterate(&iterator, req, "a"))[0] != '\0') {
2701 char* mimeSubtype = ast_strdupa(a); /* ensures we have enough space */
2702 if (!strcasecmp(a, "sendonly")) {
2706 if (!strcasecmp(a, "sendrecv")) {
2709 if (sscanf(a, "rtpmap: %u %[^/]/", &codec, mimeSubtype) != 2) continue;
2711 ast_verbose("Found description format %s\n", mimeSubtype);
2712 /* Note: should really look at the 'freq' and '#chans' params too */
2713 ast_rtp_set_rtpmap_type(p->rtp, codec, "audio", mimeSubtype);
2715 ast_rtp_set_rtpmap_type(p->vrtp, codec, "video", mimeSubtype);
2718 /* Now gather all of the codecs that were asked for: */
2719 ast_rtp_get_current_formats(p->rtp,
2720 &peercapability, &peernoncodeccapability);
2722 ast_rtp_get_current_formats(p->vrtp,
2723 &vpeercapability, &vpeernoncodeccapability);
2724 p->jointcapability = p->capability & (peercapability | vpeercapability);
2725 p->peercapability = (peercapability | vpeercapability);
2726 p->noncodeccapability = noncodeccapability & peernoncodeccapability;
2729 /* shame on whoever coded this.... */
2730 const unsigned slen=512;
2731 char s1[slen], s2[slen], s3[slen], s4[slen];
2733 ast_verbose("Capabilities: us - %s, peer - audio=%s/video=%s, combined - %s\n",
2734 ast_getformatname_multiple(s1, slen, p->capability),
2735 ast_getformatname_multiple(s2, slen, peercapability),
2736 ast_getformatname_multiple(s3, slen, vpeercapability),
2737 ast_getformatname_multiple(s4, slen, p->jointcapability));
2739 ast_verbose("Non-codec capabilities: us - %s, peer - %s, combined - %s\n",
2740 ast_getformatname_multiple(s1, slen, noncodeccapability),
2741 ast_getformatname_multiple(s2, slen, peernoncodeccapability),
2742 ast_getformatname_multiple(s3, slen, p->noncodeccapability));
2744 if (!p->jointcapability) {
2745 ast_log(LOG_WARNING, "No compatible codecs!\n");
2749 if (!(p->owner->nativeformats & p->jointcapability)) {
2750 const unsigned slen=512;
2751 char s1[slen], s2[slen];
2752 ast_log(LOG_DEBUG, "Oooh, we need to change our formats since our peer supports only %s and not %s\n",
2753 ast_getformatname_multiple(s1, slen, p->jointcapability),
2754 ast_getformatname_multiple(s2, slen, p->owner->nativeformats));
2755 p->owner->nativeformats = ast_codec_choose(&p->prefs, p->jointcapability, 1);
2756 ast_set_read_format(p->owner, p->owner->readformat);
2757 ast_set_write_format(p->owner, p->owner->writeformat);
2759 if (ast_bridged_channel(p->owner)) {
2760 /* Turn on/off music on hold if we are holding/unholding */
2761 if (sin.sin_addr.s_addr && !sendonly) {
2762 ast_moh_stop(ast_bridged_channel(p->owner));
2764 ast_moh_start(ast_bridged_channel(p->owner), NULL);
2772 /*--- add_header: Add header to SIP message */
2773 static int add_header(struct sip_request *req, char *var, char *value)
2776 char *shortname = "";
2777 if (req->len >= sizeof(req->data) - 4) {
2778 ast_log(LOG_WARNING, "Out of space, can't add anymore (%s:%s)\n", var, value);
2782 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2786 req->header[req->headers] = req->data + req->len;
2787 if (compactheaders) {
2788 for (x=0;x<sizeof(aliases) / sizeof(aliases[0]); x++)
2789 if (!strcasecmp(aliases[x].fullname, var))
2790 shortname = aliases[x].shortname;
2792 if(!ast_strlen_zero(shortname)) {
2793 snprintf(req->header[req->headers], sizeof(req->data) - req->len - 4, "%s: %s\r\n", shortname, value);
2795 snprintf(req->header[req->headers], sizeof(req->data) - req->len - 4, "%s: %s\r\n", var, value);
2797 req->len += strlen(req->header[req->headers]);
2798 if (req->headers < SIP_MAX_HEADERS)
2801 ast_log(LOG_WARNING, "Out of header space\n");
2807 /*--- add_blank_header: Add blank header to SIP message */
2808 static int add_blank_header(struct sip_request *req)
2810 if (req->len >= sizeof(req->data) - 4) {
2811 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2815 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2818 req->header[req->headers] = req->data + req->len;
2819 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "\r\n");
2820 req->len += strlen(req->header[req->headers]);
2821 if (req->headers < SIP_MAX_HEADERS)
2824 ast_log(LOG_WARNING, "Out of header space\n");
2830 /*--- add_line: Add content (not header) to SIP message */
2831 static int add_line(struct sip_request *req, char *line)
2833 if (req->len >= sizeof(req->data) - 4) {
2834 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2838 /* Add extra empty return */
2839 snprintf(req->data + req->len, sizeof(req->data) - req->len, "\r\n");
2840 req->len += strlen(req->data + req->len);
2842 req->line[req->lines] = req->data + req->len;
2843 snprintf(req->line[req->lines], sizeof(req->data) - req->len, "%s", line);
2844 req->len += strlen(req->line[req->lines]);
2845 if (req->lines < SIP_MAX_LINES)
2848 ast_log(LOG_WARNING, "Out of line space\n");
2854 /*--- copy_header: Copy one header field from one request to another */
2855 static int copy_header(struct sip_request *req, struct sip_request *orig, char *field)
2858 tmp = get_header(orig, field);
2859 if (!ast_strlen_zero(tmp)) {
2860 /* Add what we're responding to */
2861 return add_header(req, field, tmp);
2863 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2867 /*--- copy_all_header: Copy all headers from one request to another ---*/
2868 static int copy_all_header(struct sip_request *req, struct sip_request *orig, char *field)
2874 tmp = __get_header(orig, field, &start);
2875 if (!ast_strlen_zero(tmp)) {
2876 /* Add what we're responding to */
2877 add_header(req, field, tmp);
2882 return copied ? 0 : -1;
2885 /*--- copy_via_headers: Copy SIP VIA Headers from one request to another ---*/
2886 static int copy_via_headers(struct sip_pvt *p, struct sip_request *req, struct sip_request *orig, char *field)
2888 char tmp[256]="", *oh, *end;
2892 char iabuf[INET_ADDRSTRLEN];
2894 oh = __get_header(orig, field, &start);
2895 if (!ast_strlen_zero(oh)) {
2897 strncpy(tmp, oh, sizeof(tmp) - 1);
2898 oh = strstr(tmp, ";rport");
2900 end = strchr(oh + 1, ';');
2902 memmove(oh, end, strlen(end) + 1);
2906 if (!copied && (p->nat == SIP_NAT_ALWAYS)) {
2907 /* Whoo hoo! Now we can indicate port address translation too! Just
2908 another RFC (RFC3581). I'll leave the original comments in for
2910 snprintf(new, sizeof(new), "%s;received=%s;rport=%d", tmp, ast_inet_ntoa(iabuf, sizeof(iabuf), p->recv.sin_addr), ntohs(p->recv.sin_port));
2911 add_header(req, field, new);
2913 /* Add what we're responding to */
2914 add_header(req, field, tmp);
2921 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2927 /*--- add_route: Add route header into request per learned route ---*/
2928 static void add_route(struct sip_request *req, struct sip_route *route)
2931 int n, rem = 255; /* sizeof(r)-1: Room for terminating 0 */
2937 n = strlen(route->hop);
2938 if ((n+3)>rem) break;
2944 strncpy(p, route->hop, rem); p += n;
2947 route = route->next;
2950 add_header(req, "Route", r);
2953 /*--- set_destination: Set destination from SIP URI ---*/
2954 static void set_destination(struct sip_pvt *p, char *uri)
2956 char *h, *maddr, hostname[256] = "";
2957 char iabuf[INET_ADDRSTRLEN];
2960 struct ast_hostent ahp;
2961 int debug=sip_debug_test_pvt(p);
2963 /* Parse uri to h (host) and port - uri is already just the part inside the <> */
2964 /* general form we are expecting is sip[s]:username[:password]@host[:port][;...] */
2967 ast_verbose("set_destination: Parsing <%s> for address/port to send to\n", uri);
2969 /* Find and parse hostname */
2970 h = strchr(uri, '@');
2975 if (strncmp(h, "sip:", 4) == 0)
2977 else if (strncmp(h, "sips:", 5) == 0)
2980 hn = strcspn(h, ":;>");
2981 if (hn > (sizeof(hostname) - 1)) hn = sizeof(hostname) - 1;
2982 strncpy(hostname, h, hn); hostname[hn] = '\0'; /* safe */
2985 /* Is "port" present? if not default to 5060 */
2989 port = strtol(h, &h, 10);
2994 /* Got the hostname:port - but maybe there's a "maddr=" to override address? */
2995 maddr = strstr(h, "maddr=");