Cleanup/performance improve chan_sip slightly (bug #2823)
[asterisk/asterisk.git] / channels / chan_sip.c
1 /*
2  * Asterisk -- A telephony toolkit for Linux.
3  *
4  * Implementation of Session Initiation Protocol
5  * 
6  * Copyright (C) 2004, Digium, Inc.
7  *
8  * Mark Spencer <markster@digium.com>
9  *
10  * This program is free software, distributed under the terms of
11  * the GNU General Public License
12  */
13
14
15 #include <stdio.h>
16 #include <ctype.h>
17 #include <string.h>
18 #include <asterisk/lock.h>
19 #include <asterisk/channel.h>
20 #include <asterisk/channel_pvt.h>
21 #include <asterisk/config.h>
22 #include <asterisk/logger.h>
23 #include <asterisk/module.h>
24 #include <asterisk/pbx.h>
25 #include <asterisk/options.h>
26 #include <asterisk/lock.h>
27 #include <asterisk/sched.h>
28 #include <asterisk/io.h>
29 #include <asterisk/rtp.h>
30 #include <asterisk/acl.h>
31 #include <asterisk/manager.h>
32 #include <asterisk/callerid.h>
33 #include <asterisk/cli.h>
34 #include <asterisk/md5.h>
35 #include <asterisk/app.h>
36 #include <asterisk/musiconhold.h>
37 #include <asterisk/dsp.h>
38 #include <asterisk/features.h>
39 #include <asterisk/acl.h>
40 #include <asterisk/srv.h>
41 #include <asterisk/astdb.h>
42 #include <asterisk/causes.h>
43 #include <asterisk/utils.h>
44 #ifdef OSP_SUPPORT
45 #include <asterisk/astosp.h>
46 #endif
47 #include <sys/socket.h>
48 #include <sys/ioctl.h>
49 #include <net/if.h>
50 #include <errno.h>
51 #include <unistd.h>
52 #include <stdlib.h>
53 #include <fcntl.h>
54 #include <netdb.h>
55 #include <arpa/inet.h>
56 #include <signal.h>
57 #include <sys/signal.h>
58 #include <netinet/in_systm.h>
59 #include <netinet/ip.h>
60
61 #ifndef DEFAULT_USERAGENT
62 #define DEFAULT_USERAGENT "Asterisk PBX"
63 #endif
64  
65 #define VIDEO_CODEC_MASK        0x1fc0000 /* Video codecs from H.261 thru AST_FORMAT_MAX_VIDEO */
66 #ifndef IPTOS_MINCOST
67 #define IPTOS_MINCOST 0x02
68 #endif
69
70 /* #define VOCAL_DATA_HACK */
71
72 #define SIPDUMPER
73 #define DEFAULT_DEFAULT_EXPIRY  120
74 #define DEFAULT_MAX_EXPIRY      3600
75
76 /* guard limit must be larger than guard secs */
77 /* guard min must be < 1000, and should be >= 250 */
78 #define EXPIRY_GUARD_SECS       15      /* How long before expiry do we reregister */
79 #define EXPIRY_GUARD_LIMIT      30      /* Below here, we use EXPIRY_GUARD_PCT instead of EXPIRY_GUARD_SECS */
80 #define EXPIRY_GUARD_MIN        500     /* This is the minimum guard time applied. If GUARD_PCT turns out
81                                         to be lower than this, it will use this time instead. This is in
82                                         milliseconds. */
83 #define EXPIRY_GUARD_PCT        0.20    /* Percentage of expires timeout to use when below EXPIRY_GUARD_LIMIT */
84
85 #ifndef MAX
86 #define MAX(a,b) ((a) > (b) ? (a) : (b))
87 #endif
88
89 #define CALLERID_UNKNOWN        "Unknown"
90
91 /* --- Choices for DTMF support in SIP channel */
92 #define SIP_DTMF_RFC2833        (1 << 0)
93 #define SIP_DTMF_INBAND         (1 << 1)
94 #define SIP_DTMF_INFO           (1 << 2)
95
96 static int max_expiry = DEFAULT_MAX_EXPIRY;
97 static int default_expiry = DEFAULT_DEFAULT_EXPIRY;
98
99 #define DEFAULT_MAXMS           2000            /* Must be faster than 2 seconds by default */
100 #define DEFAULT_FREQ_OK         60 * 1000               /* How often to check for the host to be up */
101 #define DEFAULT_FREQ_NOTOK      10 * 1000               /* How often to check, if the host is down... */
102
103 #define DEFAULT_RETRANS         1000                    /* How frequently to retransmit */
104 #define MAX_RETRANS             5                       /* Try only 5 times for retransmissions */
105
106                                                         /* SIP Debug            */
107 #define DEBUG_READ      0                               /* Recieved data        */
108 #define DEBUG_SEND      1                               /* Transmit data        */
109
110 static char *desc = "Session Initiation Protocol (SIP)";
111 static char *type = "SIP";
112 static char *tdesc = "Session Initiation Protocol (SIP)";
113 static char *config = "sip.conf";
114
115 #define DEFAULT_SIP_PORT        5060    /* From RFC 2543 */
116 #define SIP_MAX_PACKET  4096            /* Also from RFC 2543, should sub headers tho */
117
118 #define ALLOWED_METHODS "INVITE, ACK, CANCEL, OPTIONS, BYE, REFER"
119
120 static char default_useragent[AST_MAX_EXTENSION] = DEFAULT_USERAGENT;
121
122 static char default_context[AST_MAX_EXTENSION] = "default";
123
124 static char default_language[MAX_LANGUAGE] = "";
125
126 static char default_callerid[AST_MAX_EXTENSION] = "asterisk";
127
128 static char default_fromdomain[AST_MAX_EXTENSION] = "";
129
130 static char notifymime[AST_MAX_EXTENSION] = "application/simple-message-summary";
131
132 static int srvlookup = 0;
133
134 static int pedanticsipchecking = 0;
135
136 static int autocreatepeer = 0;          
137
138 static int relaxdtmf = 0;
139
140 static int global_rtptimeout = 0;
141
142 static int global_rtpholdtimeout = 0;
143
144 static int global_trustrpid = 0;
145
146 static int global_progressinband = 0;
147
148 #ifdef OSP_SUPPORT
149 static int global_ospauth = 0;
150 #endif
151
152 static int usecnt =0;
153 AST_MUTEX_DEFINE_STATIC(usecnt_lock);
154
155 /* Protect the interface list (of sip_pvt's) */
156 AST_MUTEX_DEFINE_STATIC(iflock);
157
158 /* Protect the monitoring thread, so only one process can kill or start it, and not
159    when it's doing something critical. */
160 AST_MUTEX_DEFINE_STATIC(netlock);
161
162 AST_MUTEX_DEFINE_STATIC(monlock);
163
164 /* This is the thread for the monitor which checks for input on the channels
165    which are not currently in use.  */
166 static pthread_t monitor_thread = AST_PTHREADT_NULL;
167
168 static int restart_monitor(void);
169
170 /* Codecs that we support by default: */
171 static int global_capability = AST_FORMAT_ULAW | AST_FORMAT_ALAW | AST_FORMAT_GSM | AST_FORMAT_H263;
172 static int noncodeccapability = AST_RTP_DTMF;
173
174 static char ourhost[256];
175 static struct in_addr __ourip;
176 static int ourport;
177
178 static int sipdebug = 0;
179 static struct sockaddr_in debugaddr;
180
181 static int tos = 0;
182
183 static int videosupport = 0;
184
185 static int global_dtmfmode = SIP_DTMF_RFC2833;          /* DTMF mode default */
186 static int recordhistory = 0;
187 static int global_promiscredir;
188
189 static char global_musicclass[MAX_LANGUAGE] = "";       /* Global music on hold class */
190 static char global_realm[AST_MAX_EXTENSION] = "asterisk";       /* Default realm */
191 static char regcontext[AST_MAX_EXTENSION] = "";
192
193 /* Expire slowly */
194 static int expiry = 900;
195
196 static struct sched_context *sched;
197 static struct io_context *io;
198 /* The private structures of the  sip channels are linked for
199    selecting outgoing channels */
200    
201 #define SIP_MAX_HEADERS         64
202 #define SIP_MAX_LINES           64
203
204 #define DEC_IN_USE      0
205 #define INC_IN_USE      1
206 #define DEC_OUT_USE     2
207 #define INC_OUT_USE     3
208
209 static struct sip_codec_pref {
210         int codec;
211         struct sip_codec_pref *next;
212 } *prefs;
213
214 /* sip_request: The data grabbed from the UDP socket */
215 struct sip_request {
216   char *rlPart1; /* SIP Method Name or "SIP/2.0" protocol version */
217   char *rlPart2; /* The Request URI or Response Status */
218         int len;
219         int headers;                                    /* SIP Headers */
220         char *header[SIP_MAX_HEADERS];
221         int lines;                                              /* SDP Content */
222         char *line[SIP_MAX_LINES];
223         char data[SIP_MAX_PACKET];
224 };
225
226 struct sip_pkt;
227
228 struct sip_route {
229         struct sip_route *next;
230         char hop[0];
231 };
232
233 struct sip_history {
234         char event[80];
235         struct sip_history *next;
236 };
237
238 /* sip_pvt: PVT structures are used for each SIP conversation, ie. a call  */
239 static struct sip_pvt {
240         ast_mutex_t lock;                       /* Channel private lock */
241         char callid[80];                        /* Global CallID */
242         char randdata[80];                      /* Random data */
243         unsigned int ocseq;                     /* Current outgoing seqno */
244         unsigned int icseq;                     /* Current incoming seqno */
245         unsigned int callgroup;                 /* Call group */
246         unsigned int pickupgroup;               /* Pickup group */
247         int lastinvite;                         /* Last Cseq of invite */
248         int alreadygone;                        /* Whether or not we've already been destroyed by or peer */
249         int needdestroy;                        /* if we need to be destroyed */
250         int capability;                         /* Special capability (codec) */
251         int novideo;                            /* Didn't get video in invite, don't offer */
252         int jointcapability;                    /* Supported capability at both ends (codecs ) */
253         int peercapability;                     /* Supported peer capability */
254         int prefcodec;                          /* Preferred codec (outbound only) */
255         int noncodeccapability;
256         int callingpres;                        /* Calling presentation */
257         int outgoing;                           /* Outgoing or incoming call? */
258         int authtries;                          /* Times we've tried to authenticate */
259         int insecure;                           /* Don't check source port/ip */
260         int expiry;                             /* How long we take to expire */
261         int branch;                             /* One random number */
262         int canreinvite;                        /* Do we support reinvite */
263         int ringing;                            /* Have sent 180 ringing */
264         int progress;                           /* Have sent 183 message progress */
265         int useclientcode;                      /* Trust X-ClientCode info message */
266         int tag;                                /* Another random number */
267         int nat;                                /* Whether to try to support NAT */
268         int sessionid;                          /* SDP Session ID */
269         int sessionversion;                     /* SDP Session Version */
270         struct sockaddr_in sa;                  /* Our peer */
271         struct sockaddr_in redirip;             /* Where our RTP should be going if not to us */
272         struct sockaddr_in vredirip;            /* Where our Video RTP should be going if not to us */
273         int redircodecs;                                /* Redirect codecs */
274         struct sockaddr_in recv;                /* Received as */
275         struct in_addr ourip;                   /* Our IP */
276         struct ast_channel *owner;              /* Who owns us */
277         char exten[AST_MAX_EXTENSION];          /* Extension where to start */
278         char refer_to[AST_MAX_EXTENSION];       /* Place to store REFER-TO extension */
279         char referred_by[AST_MAX_EXTENSION];    /* Place to store REFERRED-BY extension */
280         char refer_contact[AST_MAX_EXTENSION];  /* Place to store Contact info from a REFER extension */
281         struct sip_pvt *refer_call;             /* Call we are referring */
282         struct sip_route *route;                /* Head of linked list of routing steps (fm Record-Route) */
283         int route_persistant;                   /* Is this the "real" route? */
284         char from[256];                         /* The From: header */
285         char useragent[256];                    /* User agent in SIP request */
286         char context[AST_MAX_EXTENSION];        /* Context for this call */
287         char fromdomain[AST_MAX_EXTENSION];     /* Domain to show in the from field */
288         char fromuser[AST_MAX_EXTENSION];       /* Domain to show in the user field */
289         char tohost[AST_MAX_EXTENSION];         /* Host we should put in the "to" field */
290         char language[MAX_LANGUAGE];            /* Default language for this call */
291         char musicclass[MAX_LANGUAGE];          /* Music on Hold class */
292         char rdnis[256];                        /* Referring DNIS */
293         char theirtag[256];                     /* Their tag */
294         char username[256];
295         char peername[256];
296         char authname[256];                     /* Who we use for authentication */
297         char uri[256];                          /* Original requested URI */
298         char peersecret[256];
299         char peermd5secret[256];
300         char cid_num[256];                      /* Caller*ID */
301         char cid_name[256];                     /* Caller*ID */
302         char via[256];
303         char fullcontact[128];          /* Extra parameters to go in the "To" header */
304         char accountcode[20];                   /* Account code */
305         char our_contact[256];                  /* Our contact header */
306         char realm[256];                        /* Authorization realm */
307         char nonce[256];                        /* Authorization nonce */
308         char opaque[256];                       /* Opaque nonsense */
309         char qop[80];                           /* Quality of Protection, since SIP wasn't complicated enough yet. */
310         char domain[256];                       /* Authorization nonce */
311         char lastmsg[256];                      /* Last Message sent/received */
312         int amaflags;                           /* AMA Flags */
313         int pendinginvite;                      /* Any pending invite */
314         int needreinvite;                       /* Do we need to send another reinvite? */
315         int pendingbye;                         /* Need to send bye after we ack? */
316         int gotrefer;                           /* Got a refer? */
317 #ifdef OSP_SUPPORT
318         int ospauth;                            /* Allow OSP Authentication */
319         int osphandle;                          /* OSP Handle for call */
320         time_t ospstart;                        /* OSP Start time */
321 #endif
322         struct sip_request initreq;             /* Initial request */
323         
324         int maxtime;                            /* Max time for first response */
325         int initid;                             /* Auto-congest ID if appropriate */
326         int autokillid;                         /* Auto-kill ID */
327         time_t lastrtprx;                       /* Last RTP received */
328         int rtptimeout;                         /* RTP timeout time */
329         int rtpholdtimeout;                     /* RTP timeout when on hold */
330
331         int subscribed;
332         int stateid;
333         int dialogver;
334         int promiscredir;                       /* Promiscuous redirection */
335         
336         int trustrpid;
337         int progressinband;
338         
339         int dtmfmode;
340         struct ast_dsp *vad;
341         
342         struct sip_peer *peerpoke;              /* If this calls is to poke a peer, which one */
343         struct sip_registry *registry;          /* If this is a REGISTER call, to which registry */
344         struct ast_rtp *rtp;                    /* RTP Session */
345         struct ast_rtp *vrtp;                   /* Video RTP session */
346         struct sip_pkt *packets;                /* Packets scheduled for re-transmission */
347         struct sip_history *history;    /* History of this SIP dialog */
348         struct sip_pvt *next;                   /* Next call in chain */
349 } *iflist = NULL;
350
351 #define FLAG_RESPONSE (1 << 0)
352 #define FLAG_FATAL (1 << 1)
353
354 /* sip packet - read in sipsock_read, transmitted in send_request */
355 struct sip_pkt {
356         struct sip_pkt *next;                           /* Next packet */
357         int retrans;                                            /* Retransmission number */
358         int seqno;                                                      /* Sequence number */
359         int flags;                                                      /* non-zero if this is a response packet (e.g. 200 OK) */
360         struct sip_pvt *owner;                          /* Owner call */
361         int retransid;                                          /* Retransmission ID */
362         int packetlen;                                          /* Length of packet */
363         char data[0];
364 };      
365
366 /* Structure for SIP user data. User's place calls to us */
367 struct sip_user {
368         /* Users who can access various contexts */
369         char name[80];
370         char secret[80];
371         char md5secret[80];
372         char context[80];
373         char cid_num[80];
374         char cid_name[80];
375         char accountcode[20];
376         char language[MAX_LANGUAGE];
377         char musicclass[MAX_LANGUAGE];  /* Music on Hold class */
378         char useragent[256];            /* User agent in SIP request */
379         unsigned int callgroup;
380         unsigned int pickupgroup;
381         int nat;
382         int amaflags;
383         int callingpres;
384         int insecure;
385         int canreinvite;
386         int capability;
387 #ifdef OSP_SUPPORT
388         int ospauth;                            /* Allow OSP Authentication */
389 #endif
390         int dtmfmode;
391         int inUse;
392         int incominglimit;
393         int outUse;
394         int outgoinglimit;
395         int promiscredir;
396         int useclientcode;
397         int trustrpid;
398         int progressinband;
399         struct ast_ha *ha;
400         int temponly;
401         struct sip_user *next;
402 };
403
404 /* Structure for SIP peer data, we place calls to peers if registred  or fixed IP address (host) */
405 struct sip_peer {
406         char name[80];
407         char secret[80];
408         char md5secret[80];
409         char context[80];               /* JK02: peers need context too to allow parking etc */
410         char username[80];
411         char tohost[80];
412         char regexten[AST_MAX_EXTENSION];       /* Extension to register (if regcontext is used) */
413         char fromuser[80];
414         char fromdomain[80];
415         char fullcontact[128];
416         char cid_num[80];
417         char cid_name[80];
418         char mailbox[AST_MAX_EXTENSION];
419         char language[MAX_LANGUAGE];
420         char musicclass[MAX_LANGUAGE];  /* Music on Hold class */
421         char useragent[256];            /* User agent in SIP request */
422         int lastmsgssent;
423         time_t  lastmsgcheck;
424         int dynamic;
425         int expire;
426         int expiry;
427         int capability;
428         int rtptimeout;
429         int rtpholdtimeout;
430         int insecure;
431 #ifdef OSP_SUPPORT
432         int ospauth;                            /* Allow OSP Authentication */
433 #endif  
434         int nat;
435         int canreinvite;
436         unsigned int callgroup;
437         unsigned int pickupgroup;
438         int promiscredir;
439         int dtmfmode;
440         int trustrpid;
441         int useclientcode;
442         int progressinband;
443         struct sockaddr_in addr;
444         struct in_addr mask;
445
446         /* Qualification */
447         struct sip_pvt *call;           /* Call pointer */
448         int pokeexpire;                         /* When to expire poke */
449         int lastms;                                     /* How long last response took (in ms), or -1 for no response */
450         int maxms;                                      /* Max ms we will accept for the host to be up, 0 to not monitor */
451         struct timeval ps;                      /* Ping send time */
452         
453         struct sockaddr_in defaddr;
454         struct ast_ha *ha;
455         int delme;
456         int selfdestruct;
457         int lastmsg;
458         int temponly;
459         struct sip_peer *next;
460 };
461
462 AST_MUTEX_DEFINE_STATIC(sip_reload_lock);
463 static int sip_reloading = 0;
464
465 #define REG_STATE_UNREGISTERED 0
466 #define REG_STATE_REGSENT          1
467 #define REG_STATE_AUTHSENT         2
468 #define REG_STATE_REGISTERED   3
469 #define REG_STATE_REJECTED         4
470 #define REG_STATE_TIMEOUT          5
471 #define REG_STATE_NOAUTH           6
472
473 #define SIP_NAT_NEVER           0
474 #define SIP_NAT_RFC3581         (1 << 0)
475 #define SIP_NAT_ROUTE           (1 << 2)
476 #define SIP_NAT_ALWAYS          (SIP_NAT_ROUTE | SIP_NAT_RFC3581)
477
478 /* sip_registry: Registrations with other SIP proxies */
479 struct sip_registry {
480         int portno;                             /* Optional port override */
481         char username[80];              /* Who we are registering as */
482         char authuser[80];              /* Who we *authenticate* as */
483         char hostname[80];
484         char secret[80];                /* Password or key name in []'s */      
485         char md5secret[80];
486         char contact[80];               /* Contact extension */
487         char random[80];
488         int expire;                     /* Sched ID of expiration */
489         int timeout;                    /* sched id of sip_reg_timeout */
490         int refresh;                    /* How often to refresh */
491         struct sip_pvt *call;           /* create a sip_pvt structure for each outbound "registration call" in progress */
492         int regstate;
493         int callid_valid;               /* 0 means we haven't chosen callid for this registry yet. */
494         char callid[80];                /* Global CallID for this registry */
495         unsigned int ocseq;             /* Sequence number we got to for REGISTERs for this registry */
496         struct sockaddr_in us;          /* Who the server thinks we are */
497         struct sip_registry *next;
498 };
499
500 /*--- The user list: Users and friends ---*/
501 static struct ast_user_list {
502         struct sip_user *users;
503         ast_mutex_t lock;
504 } userl;
505
506 /*--- The peer list: Peers and Friends ---*/
507 static struct ast_peer_list {
508         struct sip_peer *peers;
509         ast_mutex_t lock;
510 } peerl;
511
512 /*--- The register list: Other SIP proxys we register with and call ---*/
513 static struct ast_register_list {
514         struct sip_registry *registrations;
515         ast_mutex_t lock;
516         int recheck;
517 } regl;
518
519
520 #define REINVITE_INVITE         1
521 #define REINVITE_UPDATE         2
522
523 static int __sip_do_register(struct sip_registry *r);
524
525 static int sipsock  = -1;
526 static int global_nat = SIP_NAT_RFC3581;
527 static int global_canreinvite = REINVITE_INVITE;
528
529
530 static struct sockaddr_in bindaddr;
531 static struct sockaddr_in externip;
532 static struct ast_ha *localaddr;
533
534 static struct ast_frame  *sip_read(struct ast_channel *ast);
535 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req);
536 static int transmit_response_with_sdp(struct sip_pvt *p, char *msg, struct sip_request *req, int retrans);
537 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *rand, int reliable, char *header);
538 static int transmit_request(struct sip_pvt *p, char *msg, int inc, int reliable, int newbranch);
539 static int transmit_request_with_auth(struct sip_pvt *p, char *msg, int inc, int reliable, int newbranch);
540 static int transmit_invite(struct sip_pvt *p, char *msg, int sendsdp, char *auth, char *authheader, char *vxml_url,char *distinctive_ring, char *osptoken,int init);
541 static int transmit_reinvite_with_sdp(struct sip_pvt *p);
542 static int transmit_info_with_digit(struct sip_pvt *p, char digit);
543 static int transmit_message_with_text(struct sip_pvt *p, char *text);
544 static int transmit_refer(struct sip_pvt *p, char *dest);
545 static struct sip_peer *temp_peer(char *name);
546 static int do_proxy_auth(struct sip_pvt *p, struct sip_request *req, char *header, char *respheader, char *msg, int init);
547 static void free_old_route(struct sip_route *route);
548 static int build_reply_digest(struct sip_pvt *p, char *orig_header, char *digest, int digest_len);
549 static int update_user_counter(struct sip_pvt *fup, int event);
550 static void prune_peers(void);
551 static int sip_do_reload(void);
552
553
554 /*--- sip_debug_test_addr: See if we pass debug IP filter */
555 static inline int sip_debug_test_addr(struct sockaddr_in *addr) 
556 {
557         if (sipdebug == 0)
558                 return 0;
559         if (debugaddr.sin_addr.s_addr) {
560                 if (((ntohs(debugaddr.sin_port) != 0)
561                         && (debugaddr.sin_port != addr->sin_port))
562                         || (debugaddr.sin_addr.s_addr != addr->sin_addr.s_addr))
563                         return 0;
564         }
565         return 1;
566 }
567
568 static inline int sip_debug_test_pvt(struct sip_pvt *p) 
569 {
570         if (sipdebug == 0)
571                 return 0;
572         return sip_debug_test_addr(((p->nat & SIP_NAT_ROUTE) ? &p->recv : &p->sa));
573 }
574
575
576 /*--- __sip_xmit: Transmit SIP message ---*/
577 static int __sip_xmit(struct sip_pvt *p, char *data, int len)
578 {
579         int res;
580         char iabuf[INET_ADDRSTRLEN];
581         if (p->nat & SIP_NAT_ROUTE)
582             res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->recv, sizeof(struct sockaddr_in));
583         else
584             res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->sa, sizeof(struct sockaddr_in));
585         if (res != len) {
586                 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));
587         }
588         return res;
589 }
590
591 static void sip_destroy(struct sip_pvt *p);
592
593 /*--- ast_sip_ouraddrfor: NAT fix - decide which IP address to use for ASterisk server? ---*/
594 /* Only used for outbound registrations */
595 static int ast_sip_ouraddrfor(struct in_addr *them, struct in_addr *us)
596 {
597         /*
598          * Using the localaddr structure built up with localnet statements
599          * apply it to their address to see if we need to substitute our
600          * externip or can get away with our internal bindaddr
601          */
602         struct sockaddr_in theirs;
603         theirs.sin_addr = *them;
604         if (localaddr && externip.sin_addr.s_addr &&
605            ast_apply_ha(localaddr, &theirs)) {
606                 char iabuf[INET_ADDRSTRLEN];
607                 memcpy(us, &externip.sin_addr, sizeof(struct in_addr));
608                 ast_inet_ntoa(iabuf, sizeof(iabuf), *(struct in_addr *)&them->s_addr);
609                 ast_log(LOG_DEBUG, "Target address %s is not local, substituting externip\n", iabuf);
610         }
611         else if (bindaddr.sin_addr.s_addr)
612                 memcpy(us, &bindaddr.sin_addr, sizeof(struct in_addr));
613         else
614                 return ast_ouraddrfor(them, us);
615         return 0;
616 }
617
618 static int append_history(struct sip_pvt *p, char *event, char *data)
619 {
620         struct sip_history *hist, *prev;
621         char *c;
622         if (!recordhistory)
623                 return 0;
624         hist = malloc(sizeof(struct sip_history));
625         if (hist) {
626                 memset(hist, 0, sizeof(struct sip_history));
627                 snprintf(hist->event, sizeof(hist->event), "%-15s %s", event, data);
628                 /* Trim up nicely */
629                 c = hist->event;
630                 while(*c) {
631                         if ((*c == '\r') || (*c == '\n')) {
632                                 *c = '\0';
633                                 break;
634                         }
635                         c++;
636                 }
637                 /* Enqueue into history */
638                 prev = p->history;
639                 if (prev) {
640                         while(prev->next)
641                                 prev = prev->next;
642                         prev->next = hist;
643                 } else {
644                         p->history = hist;
645                 }
646         }
647         return 0;
648 }
649
650 /*--- retrans_pkt: Retransmit SIP message if no answer ---*/
651 static int retrans_pkt(void *data)
652 {
653         struct sip_pkt *pkt=data, *prev, *cur;
654         int res = 0;
655         char iabuf[INET_ADDRSTRLEN];
656         ast_mutex_lock(&pkt->owner->lock);
657         if (pkt->retrans < MAX_RETRANS) {
658                 pkt->retrans++;
659                 if (sip_debug_test_pvt(pkt->owner)) {
660                         if (pkt->owner->nat & SIP_NAT_ROUTE)
661                                 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));
662                         else
663                                 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));
664                 }
665                 append_history(pkt->owner, "ReTx", pkt->data);
666                 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
667                 res = 1;
668         } else {
669                 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");
670                 append_history(pkt->owner, "MaxRetries", pkt->flags & FLAG_FATAL ? "(Critical)" : "(Non-critical)");
671                 pkt->retransid = -1;
672                 if (pkt->flags & FLAG_FATAL) {
673                         while(pkt->owner->owner && ast_mutex_trylock(&pkt->owner->owner->lock)) {
674                                 ast_mutex_unlock(&pkt->owner->lock);
675                                 usleep(1);
676                                 ast_mutex_lock(&pkt->owner->lock);
677                         }
678                         if (pkt->owner->owner) {
679                                 ast_queue_hangup(pkt->owner->owner);
680                                 ast_mutex_unlock(&pkt->owner->owner->lock);
681                         } else {
682                                 /* If no owner, destroy now */
683                                 pkt->owner->needdestroy = 1;
684                         }
685                 }
686                 /* In any case, go ahead and remove the packet */
687                 prev = NULL;
688                 cur = pkt->owner->packets;
689                 while(cur) {
690                         if (cur == pkt)
691                                 break;
692                         prev = cur;
693                         cur = cur->next;
694                 }
695                 if (cur) {
696                         if (prev)
697                                 prev->next = cur->next;
698                         else
699                                 pkt->owner->packets = cur->next;
700                         ast_mutex_unlock(&pkt->owner->lock);
701                         free(cur);
702                         pkt = NULL;
703                 } else
704                         ast_log(LOG_WARNING, "Weird, couldn't find packet owner!\n");
705         }
706         if (pkt)
707                 ast_mutex_unlock(&pkt->owner->lock);
708         return res;
709 }
710
711 /*--- __sip_reliable_xmit: transmit packet with retransmits ---*/
712 static int __sip_reliable_xmit(struct sip_pvt *p, int seqno, int resp, char *data, int len, int fatal)
713 {
714         struct sip_pkt *pkt;
715         pkt = malloc(sizeof(struct sip_pkt) + len + 1);
716         if (!pkt)
717                 return -1;
718         memset(pkt, 0, sizeof(struct sip_pkt));
719         memcpy(pkt->data, data, len);
720         pkt->packetlen = len;
721         pkt->next = p->packets;
722         pkt->owner = p;
723         pkt->seqno = seqno;
724         pkt->flags = resp;
725         pkt->data[len] = '\0';
726         if (fatal)
727                 pkt->flags |= FLAG_FATAL;
728         /* Schedule retransmission */
729         pkt->retransid = ast_sched_add(sched, DEFAULT_RETRANS, retrans_pkt, pkt);
730         pkt->next = p->packets;
731         p->packets = pkt;
732         __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
733         if (!strncasecmp(pkt->data, "INVITE", 6)) {
734                 /* Note this is a pending invite */
735                 p->pendinginvite = seqno;
736         }
737         return 0;
738 }
739
740 /*--- __sip_autodestruct: Kill a call (called by scheduler) ---*/
741 static int __sip_autodestruct(void *data)
742 {
743         struct sip_pvt *p = data;
744         p->autokillid = -1;
745         ast_log(LOG_DEBUG, "Auto destroying call '%s'\n", p->callid);
746         append_history(p, "AutoDestroy", "");
747         if (p->owner) {
748                 ast_log(LOG_WARNING, "Autodestruct on call '%s' with owner in place\n", p->callid);
749                 ast_queue_hangup(p->owner);
750         } else {
751                 sip_destroy(p);
752         }
753         return 0;
754 }
755
756 /*--- sip_scheddestroy: Schedule destruction of SIP call ---*/
757 static int sip_scheddestroy(struct sip_pvt *p, int ms)
758 {
759         char tmp[80];
760         if (sip_debug_test_pvt(p))
761                 ast_verbose("Scheduling destruction of call '%s' in %d ms\n", p->callid, ms);
762         if (recordhistory) {
763                 snprintf(tmp, sizeof(tmp), "%d ms", ms);
764                 append_history(p, "SchedDestroy", tmp);
765         }
766         if (p->autokillid > -1)
767                 ast_sched_del(sched, p->autokillid);
768         p->autokillid = ast_sched_add(sched, ms, __sip_autodestruct, p);
769         return 0;
770 }
771
772 /*--- sip_cancel_destroy: Cancel destruction of SIP call ---*/
773 static int sip_cancel_destroy(struct sip_pvt *p)
774 {
775         if (p->autokillid > -1)
776                 ast_sched_del(sched, p->autokillid);
777         append_history(p, "CancelDestroy", "");
778         p->autokillid = -1;
779         return 0;
780 }
781
782 /*--- __sip_ack: Acknowledges receipt of a packet and stops retransmission ---*/
783 static int __sip_ack(struct sip_pvt *p, int seqno, int resp, const char *msg)
784 {
785         struct sip_pkt *cur, *prev = NULL;
786         int res = -1;
787         int resetinvite = 0;
788         /* Just in case... */
789         if (!msg) msg = "___NEVER___";
790         cur = p->packets;
791         while(cur) {
792                 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp) &&
793                         ((cur->flags & FLAG_RESPONSE) || 
794                          (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
795                         if (!resp && (seqno == p->pendinginvite)) {
796                                 ast_log(LOG_DEBUG, "Acked pending invite %d\n", p->pendinginvite);
797                                 p->pendinginvite = 0;
798                                 resetinvite = 1;
799                         }
800                         /* this is our baby */
801                         if (prev)
802                                 prev->next = cur->next;
803                         else
804                                 p->packets = cur->next;
805                         if (cur->retransid > -1)
806                                 ast_sched_del(sched, cur->retransid);
807                         free(cur);
808                         res = 0;
809                         break;
810                 }
811                 prev = cur;
812                 cur = cur->next;
813         }
814         ast_log(LOG_DEBUG, "Stopping retransmission on '%s' of %s %d: %s\n", p->callid, resp ? "Response" : "Request", seqno, res ? "Not Found" : "Found");
815         return res;
816 }
817
818 /* Pretend to ack all packets */
819 static int __sip_pretend_ack(struct sip_pvt *p)
820 {
821         while(p->packets) {
822                 __sip_ack(p, p->packets->seqno, (p->packets->flags & FLAG_RESPONSE), p->packets->data);
823         }
824         return 0;
825 }
826
827 /*--- __sip_semi_ack: Acks receipt of packet, keep it around (used for provisional responses) ---*/
828 static int __sip_semi_ack(struct sip_pvt *p, int seqno, int resp, const char *msg)
829 {
830         struct sip_pkt *cur;
831         int res = -1;
832         cur = p->packets;
833         while(cur) {
834                 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp) &&
835                         ((cur->flags & FLAG_RESPONSE) || 
836                          (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
837                         /* this is our baby */
838                         if (cur->retransid > -1)
839                                 ast_sched_del(sched, cur->retransid);
840                         cur->retransid = -1;
841                         res = 0;
842                         break;
843                 }
844                 cur = cur->next;
845         }
846         ast_log(LOG_DEBUG, "(Provisional) Stopping retransmission (but retaining packet) on '%s' %s %d: %s\n", p->callid, resp ? "Response" : "Request", seqno, res ? "Not Found" : "Found");
847         return res;
848 }
849
850 static void parse(struct sip_request *req);
851 static char *get_header(struct sip_request *req, char *name);
852 static void copy_request(struct sip_request *dst,struct sip_request *src);
853
854 static void parse_copy(struct sip_request *dst, struct sip_request *src)
855 {
856         memset(dst, 0, sizeof(*dst));
857         memcpy(dst->data, src->data, sizeof(dst->data));
858         dst->len = src->len;
859         parse(dst);
860 }
861 /*--- send_response: Transmit response on SIP request---*/
862 static int send_response(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
863 {
864         int res;
865         char iabuf[INET_ADDRSTRLEN];
866         struct sip_request tmp;
867         char tmpmsg[80];
868         if (sip_debug_test_pvt(p)) {
869                 if (p->nat & SIP_NAT_ROUTE)
870                         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));
871                 else
872                         ast_verbose("%sTransmitting (no NAT):\n%s\n to %s:%d\n", reliable ? "Reliably " : "", req->data, ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr), ntohs(p->sa.sin_port));
873         }
874         if (reliable) {
875                 if (recordhistory) {
876                         parse_copy(&tmp, req);
877                         snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
878                         append_history(p, "TxRespRel", tmpmsg);
879                 }
880                 res = __sip_reliable_xmit(p, seqno, 1, req->data, req->len, (reliable > 1));
881         } else {
882                 if (recordhistory) {
883                         parse_copy(&tmp, req);
884                         snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
885                         append_history(p, "TxResp", tmpmsg);
886                 }
887                 res = __sip_xmit(p, req->data, req->len);
888         }
889         if (res > 0)
890                 res = 0;
891         return res;
892 }
893
894 /*--- send_request: Send SIP Request to the other part of the dialogue ---*/
895 static int send_request(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
896 {
897         int res;
898         char iabuf[INET_ADDRSTRLEN];
899         struct sip_request tmp;
900         char tmpmsg[80];
901         if (sip_debug_test_pvt(p)) {
902                 if (p->nat & SIP_NAT_ROUTE)
903                         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));
904                 else
905                         ast_verbose("%sTransmitting:\n%s (no NAT) to %s:%d\n", reliable ? "Reliably " : "", req->data, ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr), ntohs(p->sa.sin_port));
906         }
907         if (reliable) {
908                 if (recordhistory) {
909                         parse_copy(&tmp, req);
910                         snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
911                         append_history(p, "TxReqRel", tmpmsg);
912                 }
913                 res = __sip_reliable_xmit(p, seqno, 0, req->data, req->len, (reliable > 1));
914         } else {
915                 if (recordhistory) {
916                         parse_copy(&tmp, req);
917                         snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
918                         append_history(p, "TxReq", tmpmsg);
919                 }
920                 res = __sip_xmit(p, req->data, req->len);
921         }
922         return res;
923 }
924
925 /*--- url_decode: Decode SIP URL  ---*/
926 static void url_decode(char *s) 
927 {
928         char *o = s;
929         unsigned int tmp;
930         while(*s) {
931                 switch(*s) {
932                 case '%':
933                         if (strlen(s) > 2) {
934                                 if (sscanf(s + 1, "%2x", &tmp) == 1) {
935                                         *o = tmp;
936                                         s += 2; /* Will be incremented once more when we break out */
937                                         break;
938                                 }
939                         }
940                         /* Fall through if something wasn't right with the formatting */
941                 default:
942                         *o = *s;
943                 }
944                 s++;
945                 o++;
946         }
947         *o = '\0';
948 }
949
950 /*--- ditch_braces: Pick out text in braces from character string  ---*/
951 static char *ditch_braces(char *tmp)
952 {
953         char *c = tmp;
954         char *n;
955         char *q;
956         if ((q = strchr(tmp, '"')) ) {
957                 c = q + 1;
958                 if ((q = strchr(c, '"')) )
959                         c = q + 1;
960                 else {
961                         ast_log(LOG_WARNING, "No closing quote in '%s'\n", tmp);
962                         c = tmp;
963                 }
964         }
965         if ((n = strchr(c, '<')) ) {
966                 c = n + 1;
967                 while(*c && *c != '>') c++;
968                 if (*c != '>') {
969                         ast_log(LOG_WARNING, "No closing brace in '%s'\n", tmp);
970                 } else {
971                         *c = '\0';
972                 }
973                 return n+1;
974         }
975         return c;
976 }
977
978 /*--- sip_sendtext: Send SIP MESSAGE text within a call ---*/
979 /*      Called from PBX core text message functions */
980 static int sip_sendtext(struct ast_channel *ast, char *text)
981 {
982         struct sip_pvt *p = ast->pvt->pvt;
983         int debug=sip_debug_test_pvt(p);
984
985         if (debug)
986                 ast_verbose("Sending text %s on %s\n", text, ast->name);
987         if (!p)
988                 return -1;
989         if (!text || ast_strlen_zero(text))
990                 return 0;
991         if (debug)
992                 ast_verbose("Really sending text %s on %s\n", text, ast->name);
993         transmit_message_with_text(p, text);
994         return 0;       
995 }
996
997 static void realtime_update_peer(const char *peername, struct sockaddr_in *sin, const char *username, int expirey)
998 {
999         char port[10];
1000         char ipaddr[20];
1001         char regseconds[20];
1002         time_t nowtime;
1003         
1004         time(&nowtime);
1005         nowtime += expirey;
1006         snprintf(regseconds, sizeof(regseconds), "%ld", nowtime);
1007         ast_inet_ntoa(ipaddr, sizeof(ipaddr), sin->sin_addr);
1008         snprintf(port, sizeof(port), "%d", ntohs(sin->sin_port));
1009         ast_update_realtime("sipfriends", "name", peername, "ipaddr", ipaddr, "port", port, "regseconds", regseconds, "username", username, NULL);
1010 }
1011
1012 static void register_peer_exten(struct sip_peer *peer, int onoff)
1013 {
1014         unsigned char multi[256]="";
1015         char *stringp, *ext;
1016         if (!ast_strlen_zero(regcontext)) {
1017                 strncpy(multi, ast_strlen_zero(peer->regexten) ? peer->name : peer->regexten, sizeof(multi) - 1);
1018                 stringp = multi;
1019                 while((ext = strsep(&stringp, "&"))) {
1020                         if (onoff)
1021                                 ast_add_extension(regcontext, 1, ext, 1, NULL, NULL, "Noop", strdup(peer->name), free, type);
1022                         else
1023                                 ast_context_remove_extension(regcontext, ext, 1, NULL);
1024                 }
1025         }
1026 }
1027
1028 static void destroy_peer(struct sip_peer *peer)
1029 {
1030         /* Delete it, it needs to disappear */
1031         if (peer->call)
1032                 sip_destroy(peer->call);
1033         if (peer->expire > -1)
1034                 ast_sched_del(sched, peer->expire);
1035         if (peer->pokeexpire > -1)
1036                 ast_sched_del(sched, peer->pokeexpire);
1037         register_peer_exten(peer, 0);
1038         ast_free_ha(peer->ha);
1039         free(peer);
1040 }
1041
1042 /*--- update_peer: Update peer data in database (if used) ---*/
1043 static void update_peer(struct sip_peer *p, int expiry)
1044 {
1045         if (p->temponly)
1046                 realtime_update_peer(p->name, &p->addr, p->username, expiry);
1047 }
1048
1049 static struct sip_peer *build_peer(const char *name, struct ast_variable *v, int temponly);
1050
1051 static struct sip_peer *realtime_peer(const char *peername, struct sockaddr_in *sin)
1052 {
1053         struct ast_variable *var, *tmp=NULL;
1054         char iabuf[80];
1055         struct sip_peer *peer=NULL;
1056         time_t nowtime, regseconds;
1057         int dynamic=0;
1058         
1059         if (sin)
1060                 ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr);
1061         if (peername) 
1062                 var = ast_load_realtime("sipfriends", "name", peername, NULL);
1063         else
1064                 var = ast_load_realtime("sipfriends", "ipaddr", iabuf, NULL);
1065         if (var) {
1066                 /* Make sure it's not a user only... */
1067                 peer = build_peer(peername, var, 1);
1068                 if (peer) {
1069                         /* Add some finishing touches, addresses, etc */
1070                         peer->temponly = 1;
1071                         tmp = var;
1072                         while(tmp) {
1073                                 if (!strcasecmp(tmp->name, "type")) {
1074                                         if (strcasecmp(tmp->value, "friend") &&
1075                                                 strcasecmp(tmp->value, "peer")) {
1076                                                 /* Whoops, we weren't supposed to exist! */
1077                                                 destroy_peer(peer);
1078                                                 peer = NULL;
1079                                                 break;
1080                                         } 
1081                                 } else if (!strcasecmp(tmp->name, "regseconds")) {
1082                                         if (sscanf(tmp->value, "%li", &regseconds) != 1)
1083                                                 regseconds = 0;
1084                                 } else if (!strcasecmp(tmp->name, "ipaddr")) {
1085                                         inet_aton(tmp->value, &(peer->addr.sin_addr));
1086                                 } else if (!strcasecmp(tmp->name, "port")) {
1087                                         peer->addr.sin_port = htons(atoi(tmp->value));
1088                                 } else if (!strcasecmp(tmp->name, "host")) {
1089                                         if (!strcasecmp(tmp->value, "dynamic"))
1090                                                 dynamic = 1;
1091                                 }
1092                                 tmp = tmp->next;
1093                         }
1094                         if (peer && dynamic) {
1095                                 time(&nowtime);
1096                                 if ((nowtime - regseconds) > 0) {
1097                                         memset(&peer->addr, 0, sizeof(peer->addr));
1098                                         if (option_debug)
1099                                                 ast_log(LOG_DEBUG, "Bah, we're expired (%ld/%ld/%ld)!\n", nowtime - regseconds, regseconds, nowtime);
1100                                 }
1101                         }
1102                 }
1103                 ast_destroy_realtime(var);
1104         }
1105         return peer;
1106 }
1107
1108 /*--- find_peer: Locate peer by name or ip address */
1109 static struct sip_peer *find_peer(const char *peer, struct sockaddr_in *sin)
1110 {
1111         struct sip_peer *p = NULL;
1112
1113         p = peerl.peers;
1114         if (peer) {
1115                 /* Find by peer name */
1116                 while(p) {
1117                         if (!strcasecmp(p->name, peer)) {
1118                                 break;
1119                         }
1120                         p = p->next;
1121                 }       
1122         }
1123         else {
1124                 /* Find by sin */
1125                 while(p) {
1126                         if (!inaddrcmp(&p->addr, sin) || 
1127                                         (p->insecure &&
1128                                         (p->addr.sin_addr.s_addr == sin->sin_addr.s_addr))) {
1129                                 break;
1130                         }
1131                         p = p->next;
1132                 }
1133         }
1134
1135         if (!p) {
1136                 p = realtime_peer(peer, sin);
1137         }
1138
1139         return(p);
1140 }
1141
1142 static void destroy_user(struct sip_user *user)
1143 {
1144         ast_free_ha(user->ha);
1145         free(user);
1146 }
1147
1148 static struct sip_user *build_user(const char *name, struct ast_variable *v);
1149 static struct sip_user *realtime_user(const char *username)
1150 {
1151         struct ast_variable *var;
1152         struct ast_variable *tmp;
1153         struct sip_user *user=NULL;
1154         var = ast_load_realtime("sipfriends", "name", username, NULL);
1155         if (var) {
1156                 /* Make sure it's not a user only... */
1157                 user = build_user(username, var);
1158                 if (user) {
1159                         /* Add some finishing touches, addresses, etc */
1160                         user->temponly = 1;
1161                         tmp = var;
1162                         while(tmp) {
1163                                 if (!strcasecmp(tmp->name, "type")) {
1164                                         if (strcasecmp(tmp->value, "friend") &&
1165                                                 strcasecmp(tmp->value, "user")) {
1166                                                 /* Whoops, we weren't supposed to exist! */
1167                                                 destroy_user(user);
1168                                                 user = NULL;
1169                                                 break;
1170                                         } 
1171                                 }
1172                                 tmp = tmp->next;
1173                         }
1174                 }
1175                 ast_destroy_realtime(var);
1176         }
1177         return user;
1178 }
1179
1180 /*--- find_user: Locate user by name */
1181 static struct sip_user *find_user(char *name)
1182 {
1183         struct sip_user *u = NULL;
1184
1185         u = userl.users;
1186         while(u) {
1187                 if (!strcasecmp(u->name, name)) {
1188                         break;
1189                 }
1190                 u = u->next;
1191         }
1192         if (!u) {
1193                 u = realtime_user(name);
1194         }
1195         return(u);
1196 }
1197
1198 /*--- create_addr: create address structure from peer definition ---*/
1199 /*      Or, if peer not found, find it in the global DNS */
1200 /*      returns TRUE on failure, FALSE on success */
1201 static int create_addr(struct sip_pvt *r, char *opeer)
1202 {
1203         struct hostent *hp;
1204         struct ast_hostent ahp;
1205         struct sip_peer *p;
1206         int found=0;
1207         char *port;
1208         char *callhost;
1209         int portno;
1210         char host[256], *hostn;
1211         char peer[256]="";
1212
1213         strncpy(peer, opeer, sizeof(peer) - 1);
1214         port = strchr(peer, ':');
1215         if (port) {
1216                 *port = '\0';
1217                 port++;
1218         }
1219         r->sa.sin_family = AF_INET;
1220         ast_mutex_lock(&peerl.lock);
1221         p = find_peer(peer, NULL);
1222
1223         if (p) {
1224                         found++;
1225                         r->capability = p->capability;
1226                         r->nat = p->nat;
1227                         if (r->rtp) {
1228                                 ast_log(LOG_DEBUG, "Setting NAT on RTP to %d\n", (r->nat & SIP_NAT_ROUTE));
1229                                 ast_rtp_setnat(r->rtp, (r->nat & SIP_NAT_ROUTE));
1230                         }
1231                         if (r->vrtp) {
1232                                 ast_log(LOG_DEBUG, "Setting NAT on VRTP to %d\n", (r->nat & SIP_NAT_ROUTE));
1233                                 ast_rtp_setnat(r->vrtp, (r->nat & SIP_NAT_ROUTE));
1234                         }
1235                         strncpy(r->peername, p->username, sizeof(r->peername)-1);
1236                         strncpy(r->authname, p->username, sizeof(r->authname)-1);
1237                         strncpy(r->peersecret, p->secret, sizeof(r->peersecret)-1);
1238                         strncpy(r->peermd5secret, p->md5secret, sizeof(r->peermd5secret)-1);
1239                         strncpy(r->username, p->username, sizeof(r->username)-1);
1240                         strncpy(r->tohost, p->tohost, sizeof(r->tohost)-1);
1241                         strncpy(r->fullcontact, p->fullcontact, sizeof(r->fullcontact)-1);
1242                         if (!r->initreq.headers && !ast_strlen_zero(p->fromdomain)) {
1243                                 if ((callhost = strchr(r->callid, '@'))) {
1244                                         strncpy(callhost + 1, p->fromdomain, sizeof(r->callid) - (callhost - r->callid) - 2);
1245                                 }
1246                         }
1247                         if (ast_strlen_zero(r->tohost)) {
1248                                 if (p->addr.sin_addr.s_addr)
1249                                         ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->addr.sin_addr);
1250                                 else
1251                                         ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->defaddr.sin_addr);
1252                         }
1253                         if (!ast_strlen_zero(p->fromdomain))
1254                                 strncpy(r->fromdomain, p->fromdomain, sizeof(r->fromdomain)-1);
1255                         if (!ast_strlen_zero(p->fromuser))
1256                                 strncpy(r->fromuser, p->fromuser, sizeof(r->fromuser)-1);
1257                         r->insecure = p->insecure;
1258                         r->canreinvite = p->canreinvite;
1259                         r->maxtime = p->maxms;
1260                         r->callgroup = p->callgroup;
1261                         r->pickupgroup = p->pickupgroup;
1262                         if (p->dtmfmode) {
1263                                 r->dtmfmode = p->dtmfmode;
1264                                 if (r->dtmfmode & SIP_DTMF_RFC2833)
1265                                         r->noncodeccapability |= AST_RTP_DTMF;
1266                                 else
1267                                         r->noncodeccapability &= ~AST_RTP_DTMF;
1268                         }
1269                         r->promiscredir = p->promiscredir;
1270                         strncpy(r->context, p->context,sizeof(r->context)-1);
1271                         if ((p->addr.sin_addr.s_addr || p->defaddr.sin_addr.s_addr) &&
1272                                 (!p->maxms || ((p->lastms > 0)  && (p->lastms <= p->maxms)))) {
1273                                 if (p->addr.sin_addr.s_addr) {
1274                                         r->sa.sin_addr = p->addr.sin_addr;
1275                                         r->sa.sin_port = p->addr.sin_port;
1276                                 } else {
1277                                         r->sa.sin_addr = p->defaddr.sin_addr;
1278                                         r->sa.sin_port = p->defaddr.sin_port;
1279                                 }
1280                                 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1281                         } else {
1282                                 if (p->temponly) {
1283                                         destroy_peer(p);
1284                                 }
1285                                 p = NULL;
1286                         }
1287         }
1288         ast_mutex_unlock(&peerl.lock);
1289         if (!p && !found) {
1290                 hostn = peer;
1291                 if (port)
1292                         portno = atoi(port);
1293                 else
1294                         portno = DEFAULT_SIP_PORT;
1295                 if (srvlookup) {
1296                         char service[256];
1297                         int tportno;
1298                         int ret;
1299                         snprintf(service, sizeof(service), "_sip._udp.%s", peer);
1300                         ret = ast_get_srv(NULL, host, sizeof(host), &tportno, service);
1301                         if (ret > 0) {
1302                                 hostn = host;
1303                                 portno = tportno;
1304                         }
1305                 }
1306                 hp = ast_gethostbyname(hostn, &ahp);
1307                 if (hp) {
1308                         strncpy(r->tohost, peer, sizeof(r->tohost) - 1);
1309                         memcpy(&r->sa.sin_addr, hp->h_addr, sizeof(r->sa.sin_addr));
1310                         r->sa.sin_port = htons(portno);
1311                         memcpy(&r->recv, &r->sa, sizeof(r->recv));
1312                         return 0;
1313                 } else {
1314                         ast_log(LOG_WARNING, "No such host: %s\n", peer);
1315                         return -1;
1316                 }
1317         } else if (!p)
1318                 return -1;
1319         else {
1320                 if (p->temponly) {
1321                         destroy_peer(p);
1322                 }
1323                 return 0;
1324         }
1325 }
1326
1327 /*--- auto_congest: Scheduled congestion on a call ---*/
1328 static int auto_congest(void *nothing)
1329 {
1330         struct sip_pvt *p = nothing;
1331         ast_mutex_lock(&p->lock);
1332         p->initid = -1;
1333         if (p->owner) {
1334                 if (!ast_mutex_trylock(&p->owner->lock)) {
1335                         ast_log(LOG_NOTICE, "Auto-congesting %s\n", p->owner->name);
1336                         ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
1337                         ast_mutex_unlock(&p->owner->lock);
1338                 }
1339         }
1340         ast_mutex_unlock(&p->lock);
1341         return 0;
1342 }
1343
1344 /*--- sip_prefs_free: Free codec list in preference structure ---*/
1345 static void sip_prefs_free(void)
1346 {
1347         struct sip_codec_pref *cur, *next;
1348         cur = prefs;
1349         while(cur) {
1350                 next = cur->next;
1351                 free(cur);
1352                 cur = next;
1353         }
1354         prefs = NULL;
1355 }
1356
1357 /*--- sip_pref_remove: Remove codec from pref list ---*/
1358 static void sip_pref_remove(int format)
1359 {
1360         struct sip_codec_pref *cur, *prev=NULL;
1361         cur = prefs;
1362         while(cur) {
1363                 if (cur->codec == format) {
1364                         if (prev)
1365                                 prev->next = cur->next;
1366                         else
1367                                 prefs = cur->next;
1368                         free(cur);
1369                         return;
1370                 }
1371                 prev = cur;
1372                 cur = cur->next;
1373         }
1374 }
1375
1376 /*--- sip_pref_append: Append codec to list ---*/
1377 static int sip_pref_append(int format)
1378 {
1379         struct sip_codec_pref *cur, *tmp;
1380         sip_pref_remove(format);
1381         tmp = (struct sip_codec_pref *)malloc(sizeof(struct sip_codec_pref));
1382         if (!tmp)
1383                 return -1;
1384         memset(tmp, 0, sizeof(struct sip_codec_pref));
1385         tmp->codec = format;
1386         if (prefs) {
1387                 cur = prefs;
1388                 while(cur->next)
1389                         cur = cur->next;
1390                 cur->next = tmp;
1391         } else
1392                 prefs = tmp;
1393         return 0;
1394 }
1395
1396 /*--- sip_codec_choose: Pick a codec ---*/
1397 static int sip_codec_choose(int formats)
1398 {
1399         struct sip_codec_pref *cur;
1400         formats &= ((AST_FORMAT_MAX_AUDIO << 1) - 1);
1401         cur = prefs;
1402         while(cur) {
1403                 if (formats & cur->codec)
1404                         return cur->codec;
1405                 cur = cur->next;
1406         }
1407         return ast_best_codec(formats);
1408 }
1409
1410 /*--- sip_call: Initiate SIP call from PBX ---*/
1411 /*      used from the dial() application      */
1412 static int sip_call(struct ast_channel *ast, char *dest, int timeout)
1413 {
1414         int res;
1415         struct sip_pvt *p;
1416         char *vxml_url = NULL;
1417         char *distinctive_ring = NULL;
1418         char *osptoken = NULL;
1419 #ifdef OSP_SUPPORT
1420         char *osphandle = NULL;
1421 #endif  
1422         struct varshead *headp;
1423         struct ast_var_t *current;
1424         
1425         p = ast->pvt->pvt;
1426         if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) {
1427                 ast_log(LOG_WARNING, "sip_call called on %s, neither down nor reserved\n", ast->name);
1428                 return -1;
1429         }
1430         /* Check whether there is vxml_url, distinctive ring variables */
1431
1432         headp=&ast->varshead;
1433         AST_LIST_TRAVERSE(headp,current,entries) {
1434                 /* Check whether there is a VXML_URL variable */
1435                 if (!vxml_url && !strcasecmp(ast_var_name(current),"VXML_URL")) {
1436                         vxml_url = ast_var_value(current);
1437                 } else if (!distinctive_ring && !strcasecmp(ast_var_name(current),"ALERT_INFO")) {
1438                         /* Check whether there is a ALERT_INFO variable */
1439                         distinctive_ring = ast_var_value(current);
1440                 }
1441 #ifdef OSP_SUPPORT
1442                   else if (!osptoken && !strcasecmp(ast_var_name(current), "OSPTOKEN")) {
1443                         osptoken = ast_var_value(current);
1444                 } else if (!osphandle && !strcasecmp(ast_var_name(current), "OSPHANDLE")) {
1445                         osphandle = ast_var_value(current);
1446                 }
1447 #endif
1448         }
1449         
1450         res = 0;
1451         p->outgoing = 1;
1452 #ifdef OSP_SUPPORT
1453         if (!osptoken || !osphandle || (sscanf(osphandle, "%i", &p->osphandle) != 1)) {
1454                 /* Force Disable OSP support */
1455                 osptoken = NULL;
1456                 osphandle = NULL;
1457                 p->osphandle = -1;
1458         }
1459 #endif
1460         ast_log(LOG_DEBUG, "Outgoing Call for %s\n", p->username);
1461         res = update_user_counter(p,INC_OUT_USE);
1462         if ( res != -1 ) {
1463                 p->callingpres = ast->cid.cid_pres;
1464                 p->jointcapability = p->capability;
1465                 transmit_invite(p, "INVITE", 1, NULL, NULL, vxml_url,distinctive_ring, osptoken, 1);
1466                 if (p->maxtime) {
1467                         /* Initialize auto-congest time */
1468                         p->initid = ast_sched_add(sched, p->maxtime * 4, auto_congest, p);
1469                 }
1470         }
1471         return res;
1472 }
1473
1474 /*---  __sip_destroy: Execute destrucion of call structure, release memory---*/
1475 static void __sip_destroy(struct sip_pvt *p, int lockowner)
1476 {
1477         struct sip_pvt *cur, *prev = NULL;
1478         struct sip_pkt *cp;
1479         struct sip_history *hist;
1480
1481         if (sip_debug_test_pvt(p))
1482                 ast_verbose("Destroying call '%s'\n", p->callid);
1483         if (p->stateid > -1)
1484                 ast_extension_state_del(p->stateid, NULL);
1485         if (p->initid > -1)
1486                 ast_sched_del(sched, p->initid);
1487         if (p->autokillid > -1)
1488                 ast_sched_del(sched, p->autokillid);
1489
1490         if (p->rtp) {
1491                 ast_rtp_destroy(p->rtp);
1492         }
1493         if (p->vrtp) {
1494                 ast_rtp_destroy(p->vrtp);
1495         }
1496         if (p->route) {
1497                 free_old_route(p->route);
1498                 p->route = NULL;
1499         }
1500         if (p->registry) {
1501                 /* Carefully unlink from registry */
1502                 struct sip_registry *reg;
1503                 ast_mutex_lock(&regl.lock);
1504                 reg = regl.registrations;
1505                 while(reg) {
1506                         if ((reg == p->registry) && (p->registry->call == p))
1507                                 p->registry->call=NULL;
1508                         reg = reg->next;
1509                 }
1510                 ast_mutex_unlock(&regl.lock);
1511         }
1512         /* Unlink us from the owner if we have one */
1513         if (p->owner) {
1514                 if (lockowner)
1515                         ast_mutex_lock(&p->owner->lock);
1516                 ast_log(LOG_DEBUG, "Detaching from %s\n", p->owner->name);
1517                 p->owner->pvt->pvt = NULL;
1518                 if (lockowner)
1519                         ast_mutex_unlock(&p->owner->lock);
1520         }
1521         /* Clear history */
1522         while(p->history) {
1523                 hist = p->history;
1524                 p->history = p->history->next;
1525                 free(hist);
1526         }
1527         cur = iflist;
1528         while(cur) {
1529                 if (cur == p) {
1530                         if (prev)
1531                                 prev->next = cur->next;
1532                         else
1533                                 iflist = cur->next;
1534                         break;
1535                 }
1536                 prev = cur;
1537                 cur = cur->next;
1538         }
1539         if (!cur) {
1540                 ast_log(LOG_WARNING, "%p is not in list?!?! \n", cur);
1541         } else {
1542                 if (p->initid > -1)
1543                         ast_sched_del(sched, p->initid);
1544                 while((cp = p->packets)) {
1545                         p->packets = p->packets->next;
1546                         if (cp->retransid > -1)
1547                                 ast_sched_del(sched, cp->retransid);
1548                         free(cp);
1549                 }
1550                 ast_mutex_destroy(&p->lock);
1551                 free(p);
1552         }
1553 }
1554
1555 /*--- update_user_counter: Handle incominglimit and outgoinglimit for SIP users ---*/
1556 /* Note: This is going to be replaced by app_groupcount */
1557 static int update_user_counter(struct sip_pvt *fup, int event)
1558 {
1559         char name[256] = "";
1560         struct sip_user *u;
1561         strncpy(name, fup->username, sizeof(name) - 1);
1562         ast_mutex_lock(&userl.lock);
1563         u = find_user(name);
1564         if (!u) {
1565                 ast_log(LOG_DEBUG, "%s is not a local user\n", name);
1566                 ast_mutex_unlock(&userl.lock);
1567                 return 0;
1568         }
1569         switch(event) {
1570                 /* incoming and outgoing affects the inUse counter */
1571                 case DEC_OUT_USE:
1572                 case DEC_IN_USE:
1573                         if ( u->inUse > 0 ) {
1574                                 u->inUse--;
1575                         } else {
1576                                 u->inUse = 0;
1577                         }
1578                         break;
1579                 case INC_IN_USE:
1580                 case INC_OUT_USE:
1581                         if (u->incominglimit > 0 ) {
1582                                 if (u->inUse >= u->incominglimit) {
1583                                         ast_log(LOG_ERROR, "Call from user '%s' rejected due to usage limit of %d\n", u->name, u->incominglimit);
1584                                         /* inc inUse as well */
1585                                         if ( event == INC_OUT_USE ) {
1586                                                 u->inUse++;
1587                                         }
1588                                         ast_mutex_unlock(&userl.lock);
1589                                         if (u->temponly) {
1590                                                 destroy_user(u);
1591                                         }
1592                                         return -1; 
1593                                 }
1594                         }
1595                         u->inUse++;
1596                         ast_log(LOG_DEBUG, "Call from user '%s' is %d out of %d\n", u->name, u->inUse, u->incominglimit);
1597                         break;
1598                 /* we don't use these anymore
1599                 case DEC_OUT_USE:
1600                         if ( u->outUse > 0 ) {
1601                                 u->outUse--;
1602                         } else {
1603                                 u->outUse = 0;
1604                         }
1605                         break;
1606                 case INC_OUT_USE:
1607                         if ( u->outgoinglimit > 0 ) {
1608                                 if ( u->outUse >= u->outgoinglimit ) {
1609                                         ast_log(LOG_ERROR, "Outgoing call from user '%s' rejected due to usage limit of %d\n", u->name, u->outgoinglimit);
1610                                         ast_mutex_unlock(&userl.lock);
1611                                         if (u->temponly) {
1612                                                 destroy_user(u);
1613                                         }
1614                                         return -1;
1615                                 }
1616                         }
1617                         u->outUse++;
1618                         break;
1619                 */
1620                 default:
1621                         ast_log(LOG_ERROR, "update_user_counter(%s,%d) called with no event!\n",u->name,event);
1622         }
1623         ast_mutex_unlock(&userl.lock);
1624         if (u->temponly) {
1625                 destroy_user(u);
1626         }
1627         return 0;
1628 }
1629
1630 /*--- sip_destroy: Destroy SIP call structure ---*/
1631 static void sip_destroy(struct sip_pvt *p)
1632 {
1633         ast_mutex_lock(&iflock);
1634         __sip_destroy(p, 1);
1635         ast_mutex_unlock(&iflock);
1636 }
1637
1638
1639 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal);
1640
1641 static int hangup_sip2cause(int cause)
1642 {
1643 /* Possible values from causes.h
1644         AST_CAUSE_NOTDEFINED    AST_CAUSE_NORMAL        AST_CAUSE_BUSY
1645         AST_CAUSE_FAILURE       AST_CAUSE_CONGESTION    AST_CAUSE_UNALLOCATED
1646 */
1647
1648         switch(cause) {
1649                 case 404:       /* Not found */
1650                         return AST_CAUSE_UNALLOCATED;
1651                 case 483:       /* Too many hops */
1652                         return AST_CAUSE_FAILURE;
1653                 case 486:
1654                         return AST_CAUSE_BUSY;
1655                 default:
1656                         return AST_CAUSE_NORMAL;
1657         }
1658         /* Never reached */
1659         return 0;
1660 }
1661
1662 static char *hangup_cause2sip(int cause)
1663 {
1664         switch(cause)
1665         {
1666                 case AST_CAUSE_FAILURE:
1667                         return "500 Server internal failure";
1668                 case AST_CAUSE_CONGESTION:
1669                         return "503 Service Unavailable";
1670                 case AST_CAUSE_BUSY:
1671                         return "486 Busy";
1672                 default:
1673                         return NULL;
1674         }
1675         /* Never reached */
1676         return 0;
1677 }
1678
1679 /*--- sip_hangup: Hangup SIP call */
1680 static int sip_hangup(struct ast_channel *ast)
1681 {
1682         struct sip_pvt *p = ast->pvt->pvt;
1683         int needcancel = 0;
1684         int needdestroy = 0;
1685         if (option_debug)
1686                 ast_log(LOG_DEBUG, "sip_hangup(%s)\n", ast->name);
1687         if (!ast->pvt->pvt) {
1688                 ast_log(LOG_DEBUG, "Asked to hangup channel not connected\n");
1689                 return 0;
1690         }
1691         ast_mutex_lock(&p->lock);
1692 #ifdef OSP_SUPPORT
1693         if ((p->osphandle > -1) && (ast->_state == AST_STATE_UP)) {
1694                 ast_osp_terminate(p->osphandle, AST_CAUSE_NORMAL, p->ospstart, time(NULL) - p->ospstart);
1695         }
1696 #endif  
1697         if ( p->outgoing ) {
1698                 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement outUse counter\n", p->username);
1699                 update_user_counter(p, DEC_OUT_USE);
1700         } else {
1701                 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement inUse counter\n", p->username);
1702                 update_user_counter(p, DEC_IN_USE);
1703         }
1704         /* Determine how to disconnect */
1705         if (p->owner != ast) {
1706                 ast_log(LOG_WARNING, "Huh?  We aren't the owner?\n");
1707                 ast_mutex_unlock(&p->lock);
1708                 return 0;
1709         }
1710         if (!ast || (ast->_state != AST_STATE_UP))
1711                 needcancel = 1;
1712         /* Disconnect */
1713         p = ast->pvt->pvt;
1714         if (p->vad) {
1715             ast_dsp_free(p->vad);
1716         }
1717         p->owner = NULL;
1718         ast->pvt->pvt = NULL;
1719
1720         ast_mutex_lock(&usecnt_lock);
1721         usecnt--;
1722         ast_mutex_unlock(&usecnt_lock);
1723         ast_update_use_count();
1724
1725         needdestroy = 1; 
1726         /* Start the process if it's not already started */
1727         if (!p->alreadygone && !ast_strlen_zero(p->initreq.data)) {
1728                 if (needcancel) {
1729                         if (p->outgoing) {
1730                                 transmit_request_with_auth(p, "CANCEL", p->ocseq, 1, 0);
1731                                 /* Actually don't destroy us yet, wait for the 487 on our original 
1732                                    INVITE, but do set an autodestruct just in case we never get it. */
1733                                 needdestroy = 0;
1734                                 sip_scheddestroy(p, 15000);
1735                                 if ( p->initid != -1 ) {
1736                                         /* channel still up - reverse dec of inUse counter
1737                                            only if the channel is not auto-congested */
1738                                         if ( p->outgoing ) {
1739                                                 update_user_counter(p, INC_OUT_USE);
1740                                         }
1741                                         else {
1742                                                 update_user_counter(p, INC_IN_USE);
1743                                         }
1744                                 }
1745                         } else {
1746                                 char *res;
1747                                 if (ast->hangupcause && ((res = hangup_cause2sip(ast->hangupcause)))) {
1748                                         transmit_response_reliable(p, res, &p->initreq, 1);
1749                                 } else 
1750                                         transmit_response_reliable(p, "403 Forbidden", &p->initreq, 1);
1751                         }
1752                 } else {
1753                         if (!p->pendinginvite) {
1754                                 /* Send a hangup */
1755                                 transmit_request_with_auth(p, "BYE", 0, 1, 1);
1756                         } else {
1757                                 /* Note we will need a BYE when this all settles out
1758                                    but we can't send one while we have "INVITE" outstanding. */
1759                                 p->pendingbye = 1;
1760                                 p->needreinvite = 0;
1761                         }
1762                 }
1763         }
1764         p->needdestroy = needdestroy;
1765         ast_mutex_unlock(&p->lock);
1766         return 0;
1767 }
1768
1769 /*--- sip_answer: Answer SIP call , send 200 OK on Invite */
1770 static int sip_answer(struct ast_channel *ast)
1771 {
1772         int res = 0,fmt;
1773         char *codec;
1774         struct sip_pvt *p = ast->pvt->pvt;
1775
1776         ast_mutex_lock(&p->lock);
1777         if (ast->_state != AST_STATE_UP) {
1778 #ifdef OSP_SUPPORT      
1779                 time(&p->ospstart);
1780 #endif
1781         
1782                 codec=pbx_builtin_getvar_helper(p->owner,"SIP_CODEC");
1783                 if (codec) {
1784                         fmt=ast_getformatbyname(codec);
1785                         if (fmt) {
1786                                 ast_log(LOG_NOTICE, "Changing codec to '%s' for this call because of ${SIP_CODEC) variable\n",codec);
1787                                 if (p->jointcapability & fmt) {
1788                                         p->jointcapability &= fmt;
1789                                         p->capability &= fmt;
1790                                 } else
1791                                         ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because it is not shared by both ends.\n");
1792                         } else ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because of unrecognized/not configured codec (check allow/disallow in sip.conf): %s\n",codec);
1793                 }
1794
1795                 ast_setstate(ast, AST_STATE_UP);
1796                 if (option_debug)
1797                         ast_log(LOG_DEBUG, "sip_answer(%s)\n", ast->name);
1798                 res = transmit_response_with_sdp(p, "200 OK", &p->initreq, 1);
1799         }
1800         ast_mutex_unlock(&p->lock);
1801         return res;
1802 }
1803
1804 /*--- sip_write: Send response, support audio media ---*/
1805 static int sip_write(struct ast_channel *ast, struct ast_frame *frame)
1806 {
1807         struct sip_pvt *p = ast->pvt->pvt;
1808         int res = 0;
1809         if (frame->frametype == AST_FRAME_VOICE) {
1810                 if (!(frame->subclass & ast->nativeformats)) {
1811                         ast_log(LOG_WARNING, "Asked to transmit frame type %d, while native formats is %d (read/write = %d/%d)\n",
1812                                 frame->subclass, ast->nativeformats, ast->readformat, ast->writeformat);
1813                         return 0;
1814                 }
1815                 if (p) {
1816                         ast_mutex_lock(&p->lock);
1817                         if (p->rtp) {
1818                                 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1819                                         transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1820                                         p->progress = 1;
1821                                 }
1822                                 res =  ast_rtp_write(p->rtp, frame);
1823                         }
1824                         ast_mutex_unlock(&p->lock);
1825                 }
1826         } else if (frame->frametype == AST_FRAME_VIDEO) {
1827                 if (p) {
1828                         ast_mutex_lock(&p->lock);
1829                         if (p->vrtp) {
1830                                 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1831                                         transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1832                                         p->progress = 1;
1833                                 }
1834                                 res =  ast_rtp_write(p->vrtp, frame);
1835                         }
1836                         ast_mutex_unlock(&p->lock);
1837                 }
1838         } else if (frame->frametype == AST_FRAME_IMAGE) {
1839                 return 0;
1840         } else {
1841                 ast_log(LOG_WARNING, "Can't send %d type frames with SIP write\n", frame->frametype);
1842                 return 0;
1843         }
1844
1845         return res;
1846 }
1847
1848 /*--- sip_fixup: Fix up a channel:  If a channel is consumed, this is called.
1849         Basically update any ->owner links ----*/
1850 static int sip_fixup(struct ast_channel *oldchan, struct ast_channel *newchan)
1851 {
1852         struct sip_pvt *p = newchan->pvt->pvt;
1853         ast_mutex_lock(&p->lock);
1854         if (p->owner != oldchan) {
1855                 ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, p->owner);
1856                 ast_mutex_unlock(&p->lock);
1857                 return -1;
1858         }
1859         p->owner = newchan;
1860         ast_mutex_unlock(&p->lock);
1861         return 0;
1862 }
1863
1864 /*--- sip_senddigit: Send DTMF character on SIP channel */
1865 /*    within one call, we're able to transmit in many methods simultaneously */
1866 static int sip_senddigit(struct ast_channel *ast, char digit)
1867 {
1868         struct sip_pvt *p = ast->pvt->pvt;
1869         if (p && (p->dtmfmode & SIP_DTMF_INFO)) {
1870                 transmit_info_with_digit(p, digit);
1871         }
1872         if (p && p->rtp && (p->dtmfmode & SIP_DTMF_RFC2833)) {
1873                 ast_rtp_senddigit(p->rtp, digit);
1874         }
1875         /* If in-band DTMF is desired, send that */
1876         if (p->dtmfmode & SIP_DTMF_INBAND)
1877                 return -1;
1878         return 0;
1879 }
1880
1881
1882 /*--- sip_transfer: Transfer SIP call */
1883 static int sip_transfer(struct ast_channel *ast, char *dest)
1884 {
1885         struct sip_pvt *p = ast->pvt->pvt;
1886         int res;
1887         res = transmit_refer(p, dest);
1888         return res;
1889 }
1890
1891 /*--- sip_indicate: Play indication to user */
1892 /* With SIP a lot of indications is sent as messages, letting the device play
1893    the indication - busy signal, congestion etc */
1894 static int sip_indicate(struct ast_channel *ast, int condition)
1895 {
1896         struct sip_pvt *p = ast->pvt->pvt;
1897         switch(condition) {
1898         case AST_CONTROL_RINGING:
1899                 if (ast->_state == AST_STATE_RING) {
1900                         if (!p->progress) {
1901                                 transmit_response(p, "180 Ringing", &p->initreq);
1902                                 p->ringing = 1;
1903                                 if (!p->progressinband)
1904                                         break;
1905                         } else {
1906                                 /* Oops, we've sent progress tones.  Let Asterisk do it instead */
1907                         }
1908                 }
1909                 return -1;
1910         case AST_CONTROL_BUSY:
1911                 if (ast->_state != AST_STATE_UP) {
1912                         transmit_response(p, "486 Busy Here", &p->initreq);
1913                         p->alreadygone = 1;
1914                         ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1915                         break;
1916                 }
1917                 return -1;
1918         case AST_CONTROL_CONGESTION:
1919                 if (ast->_state != AST_STATE_UP) {
1920                         transmit_response(p, "503 Service Unavailable", &p->initreq);
1921                         p->alreadygone = 1;
1922                         ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1923                         break;
1924                 }
1925                 return -1;
1926         case AST_CONTROL_PROGRESS:
1927         case AST_CONTROL_PROCEEDING:
1928                 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1929                         transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1930                         p->progress = 1;
1931                         break;
1932                 }
1933                 return -1;
1934         case -1:
1935                 return -1;
1936         default:
1937                 ast_log(LOG_WARNING, "Don't know how to indicate condition %d\n", condition);
1938                 return -1;
1939         }
1940         return 0;
1941 }
1942
1943
1944
1945 /*--- sip_new: Initiate a call in the SIP channel */
1946 /*      called from sip_request_call (calls from the pbx ) */
1947 static struct ast_channel *sip_new(struct sip_pvt *i, int state, char *title)
1948 {
1949         struct ast_channel *tmp;
1950         int fmt;
1951
1952         ast_mutex_unlock(&i->lock);
1953         /* Don't hold a sip pvt lock while we allocate a channel */
1954         tmp = ast_channel_alloc(1);
1955         ast_mutex_lock(&i->lock);
1956         if (tmp) {
1957                 /* Select our native format based on codec preference until we receive
1958                    something from another device to the contrary. */
1959                 if (i->jointcapability)
1960                         tmp->nativeformats = sip_codec_choose(i->jointcapability);
1961                 else if (i->capability)
1962                         tmp->nativeformats = sip_codec_choose(i->capability);
1963                 else
1964                         tmp->nativeformats = sip_codec_choose(global_capability);
1965                 fmt = ast_best_codec(tmp->nativeformats);
1966                 if (title)
1967                         snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%04x", title, rand() & 0xffff);
1968                 else
1969                         if (strchr(i->fromdomain,':'))
1970                         {
1971                                 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", strchr(i->fromdomain,':')+1, (int)(long)(i));
1972                         }
1973                         else
1974                         {
1975                                 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", i->fromdomain, (int)(long)(i));
1976                         }
1977                 tmp->type = type;
1978                 if (i->dtmfmode & SIP_DTMF_INBAND) {
1979                     i->vad = ast_dsp_new();
1980                     ast_dsp_set_features(i->vad, DSP_FEATURE_DTMF_DETECT);
1981                     if (relaxdtmf)
1982                         ast_dsp_digitmode(i->vad, DSP_DIGITMODE_DTMF | DSP_DIGITMODE_RELAXDTMF);
1983                 }
1984                 tmp->fds[0] = ast_rtp_fd(i->rtp);
1985                 tmp->fds[1] = ast_rtcp_fd(i->rtp);
1986                 if (i->vrtp) {
1987                         tmp->fds[2] = ast_rtp_fd(i->vrtp);
1988                         tmp->fds[3] = ast_rtcp_fd(i->vrtp);
1989                 }
1990                 if (state == AST_STATE_RING)
1991                         tmp->rings = 1;
1992                 tmp->adsicpe = AST_ADSI_UNAVAILABLE;
1993                 tmp->writeformat = fmt;
1994                 tmp->pvt->rawwriteformat = fmt;
1995                 tmp->readformat = fmt;
1996                 tmp->pvt->rawreadformat = fmt;
1997                 tmp->pvt->pvt = i;
1998                 tmp->pvt->send_text = sip_sendtext;
1999                 tmp->pvt->call = sip_call;
2000                 tmp->pvt->hangup = sip_hangup;
2001                 tmp->pvt->answer = sip_answer;
2002                 tmp->pvt->read = sip_read;
2003                 tmp->pvt->write = sip_write;
2004                 tmp->pvt->write_video = sip_write;
2005                 tmp->pvt->indicate = sip_indicate;
2006                 tmp->pvt->transfer = sip_transfer;
2007                 tmp->pvt->fixup = sip_fixup;
2008                 tmp->pvt->send_digit = sip_senddigit;
2009
2010                 tmp->pvt->bridge = ast_rtp_bridge;
2011
2012                 tmp->callgroup = i->callgroup;
2013                 tmp->pickupgroup = i->pickupgroup;
2014                 tmp->cid.cid_pres = i->callingpres;
2015                 if (!ast_strlen_zero(i->accountcode))
2016                         strncpy(tmp->accountcode, i->accountcode, sizeof(tmp->accountcode)-1);
2017                 if (i->amaflags)
2018                         tmp->amaflags = i->amaflags;
2019                 if (!ast_strlen_zero(i->language))
2020                         strncpy(tmp->language, i->language, sizeof(tmp->language)-1);
2021                 if (!ast_strlen_zero(i->musicclass))
2022                         strncpy(tmp->musicclass, i->musicclass, sizeof(tmp->musicclass)-1);
2023                 i->owner = tmp;
2024                 ast_mutex_lock(&usecnt_lock);
2025                 usecnt++;
2026                 ast_mutex_unlock(&usecnt_lock);
2027                 strncpy(tmp->context, i->context, sizeof(tmp->context)-1);
2028                 strncpy(tmp->exten, i->exten, sizeof(tmp->exten)-1);
2029                 if (!ast_strlen_zero(i->cid_num)) 
2030                         tmp->cid.cid_num = strdup(i->cid_num);
2031                 if (!ast_strlen_zero(i->cid_name))
2032                         tmp->cid.cid_name = strdup(i->cid_name);
2033                 if (!ast_strlen_zero(i->rdnis))
2034                         tmp->cid.cid_rdnis = strdup(i->rdnis);
2035                 if (!ast_strlen_zero(i->exten) && strcmp(i->exten, "s"))
2036                         tmp->cid.cid_dnid = strdup(i->exten);
2037                 tmp->priority = 1;
2038                 if (!ast_strlen_zero(i->domain)) {
2039                         pbx_builtin_setvar_helper(tmp, "SIPDOMAIN", i->domain);
2040                 }
2041                 if (!ast_strlen_zero(i->useragent)) {
2042                         pbx_builtin_setvar_helper(tmp, "SIPUSERAGENT", i->useragent);
2043                 }
2044                 if (!ast_strlen_zero(i->callid)) {
2045                         pbx_builtin_setvar_helper(tmp, "SIPCALLID", i->callid);
2046                 }
2047                 ast_setstate(tmp, state);
2048                 if (state != AST_STATE_DOWN) {
2049                         if (ast_pbx_start(tmp)) {
2050                                 ast_log(LOG_WARNING, "Unable to start PBX on %s\n", tmp->name);
2051                                 ast_hangup(tmp);
2052                                 tmp = NULL;
2053                         }
2054                 }
2055         } else
2056                 ast_log(LOG_WARNING, "Unable to allocate channel structure\n");
2057         return tmp;
2058 }
2059
2060 static struct cfalias {
2061         char *fullname;
2062         char *shortname;
2063 } aliases[] = {
2064         { "Content-Type", "c" },
2065         { "Content-Encoding", "e" },
2066         { "From", "f" },
2067         { "Call-ID", "i" },
2068         { "Contact", "m" },
2069         { "Content-Length", "l" },
2070         { "Subject", "s" },
2071         { "To", "t" },
2072         { "Supported", "k" },
2073         { "Refer-To", "r" },
2074         { "Allow-Events", "u" },
2075         { "Event", "o" },
2076         { "Via", "v" },
2077 };
2078
2079 /*--- get_sdp_by_line: Reads one line of SIP message body */
2080 static char* get_sdp_by_line(char* line, char *name, int nameLen) {
2081   if (strncasecmp(line, name, nameLen) == 0 && line[nameLen] == '=') {
2082     char* r = line + nameLen + 1;
2083     while (*r && (*r < 33)) ++r;
2084     return r;
2085   }
2086
2087   return "";
2088 }
2089
2090 /*--- get_sdp: Gets all kind of SIP message bodies, including SDP,
2091    but the name wrongly applies _only_ sdp */
2092 static char *get_sdp(struct sip_request *req, char *name) {
2093   int x;
2094   int len = strlen(name);
2095   char *r;
2096
2097   for (x=0; x<req->lines; x++) {
2098     r = get_sdp_by_line(req->line[x], name, len);
2099     if (r[0] != '\0') return r;
2100   }
2101   return "";
2102 }
2103
2104
2105 static void sdpLineNum_iterator_init(int* iterator) {
2106   *iterator = 0;
2107 }
2108
2109 static char* get_sdp_iterate(int* iterator,
2110                              struct sip_request *req, char *name) {
2111   int len = strlen(name);
2112   char *r;
2113   while (*iterator < req->lines) {
2114     r = get_sdp_by_line(req->line[(*iterator)++], name, len);
2115     if (r[0] != '\0') return r;
2116   }
2117   return "";
2118 }
2119
2120 static char *__get_header(struct sip_request *req, char *name, int *start)
2121 {
2122         int x;
2123         int len = strlen(name);
2124         char *r;
2125         if (pedanticsipchecking) {
2126                 /* Technically you can place arbitrary whitespace both before and after the ':' in
2127                    a header, although RFC3261 clearly says you shouldn't before, and place just
2128                    one afterwards.  If you shouldn't do it, what absolute idiot decided it was 
2129                    a good idea to say you can do it, and if you can do it, why in the hell would 
2130                    you say you shouldn't.  */
2131                 for (x=*start;x<req->headers;x++) {
2132                         if (!strncasecmp(req->header[x], name, len)) {
2133                                 r = req->header[x] + len;
2134                                 while(*r && (*r < 33))
2135                                         r++;
2136                                 if (*r == ':') {
2137                                         r++ ;
2138                                         while(*r && (*r < 33))
2139                                                 r++;
2140                                         *start = x+1;
2141                                         return r;
2142                                 }
2143                         }
2144                 }
2145         } else {
2146                 /* We probably shouldn't even bother counting whitespace afterwards but
2147                    I guess for backwards compatibility we will */
2148                 for (x=*start;x<req->headers;x++) {
2149                         if (!strncasecmp(req->header[x], name, len) && 
2150                                         (req->header[x][len] == ':')) {
2151                                                 r = req->header[x] + len + 1;
2152                                                 while(*r && (*r < 33))
2153                                                                 r++;
2154                                                 *start = x+1;
2155                                                 return r;
2156                         }
2157                 }
2158         }
2159         /* Try aliases */
2160         for (x=0;x<sizeof(aliases) / sizeof(aliases[0]); x++) 
2161                 if (!strcasecmp(aliases[x].fullname, name))
2162                         return __get_header(req, aliases[x].shortname, start);
2163
2164         /* Don't return NULL, so get_header is always a valid pointer */
2165         return "";
2166 }
2167
2168 /*--- get_header: Get header from SIP request ---*/
2169 static char *get_header(struct sip_request *req, char *name)
2170 {
2171         int start = 0;
2172         return __get_header(req, name, &start);
2173 }
2174
2175 /*--- sip_rtp_read: Read RTP from network ---*/
2176 static struct ast_frame *sip_rtp_read(struct ast_channel *ast, struct sip_pvt *p)
2177 {
2178         /* Retrieve audio/etc from channel.  Assumes p->lock is already held. */
2179         struct ast_frame *f;
2180         static struct ast_frame null_frame = { AST_FRAME_NULL, };
2181         switch(ast->fdno) {
2182         case 0:
2183                 f = ast_rtp_read(p->rtp);       /* RTP Audio */
2184                 break;
2185         case 1:
2186                 f = ast_rtcp_read(p->rtp);      /* RTCP Control Channel */
2187                 break;
2188         case 2:
2189                 f = ast_rtp_read(p->vrtp);      /* RTP Video */
2190                 break;
2191         case 3:
2192                 f = ast_rtcp_read(p->vrtp);     /* RTCP Control Channel for video */
2193                 break;
2194         default:
2195                 f = &null_frame;
2196         }
2197         /* Don't send RFC2833 if we're not supposed to */
2198         if (f && (f->frametype == AST_FRAME_DTMF) && !(p->dtmfmode & SIP_DTMF_RFC2833))
2199                 return &null_frame;
2200         if (p->owner) {
2201                 /* We already hold the channel lock */
2202                 if (f->frametype == AST_FRAME_VOICE) {
2203                         if (f->subclass != p->owner->nativeformats) {
2204                                 ast_log(LOG_DEBUG, "Oooh, format changed to %d\n", f->subclass);
2205                                 p->owner->nativeformats = f->subclass;
2206                                 ast_set_read_format(p->owner, p->owner->readformat);
2207                                 ast_set_write_format(p->owner, p->owner->writeformat);
2208                         }
2209             if ((p->dtmfmode & SIP_DTMF_INBAND) && p->vad) {
2210                    f = ast_dsp_process(p->owner,p->vad,f);
2211                    if (f && (f->frametype == AST_FRAME_DTMF)) 
2212                         ast_log(LOG_DEBUG, "Detected DTMF '%c'\n", f->subclass);
2213             }
2214                 }
2215         }
2216         return f;
2217 }
2218
2219 /*--- sip_read: Read SIP RTP from channel */
2220 static struct ast_frame *sip_read(struct ast_channel *ast)
2221 {
2222         struct ast_frame *fr;
2223         struct sip_pvt *p = ast->pvt->pvt;
2224         ast_mutex_lock(&p->lock);
2225         fr = sip_rtp_read(ast, p);
2226         time(&p->lastrtprx);
2227         ast_mutex_unlock(&p->lock);
2228         return fr;
2229 }
2230
2231 /*--- build_callid: Build SIP CALLID header ---*/
2232 static void build_callid(char *callid, int len, struct in_addr ourip, char *fromdomain)
2233 {
2234         int res;
2235         int val;
2236         int x;
2237         char iabuf[INET_ADDRSTRLEN];
2238         for (x=0;x<4;x++) {
2239                 val = rand();
2240                 res = snprintf(callid, len, "%08x", val);
2241                 len -= res;
2242                 callid += res;
2243         }
2244         if (!ast_strlen_zero(fromdomain))
2245                 snprintf(callid, len, "@%s", fromdomain);
2246         else
2247         /* It's not important that we really use our right IP here... */
2248                 snprintf(callid, len, "@%s", ast_inet_ntoa(iabuf, sizeof(iabuf), ourip));
2249 }
2250
2251 /*--- sip_alloc: Allocate SIP_PVT structure and set defaults ---*/
2252 static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useglobal_nat)
2253 {
2254         struct sip_pvt *p;
2255         char iabuf[INET_ADDRSTRLEN];
2256
2257         p = malloc(sizeof(struct sip_pvt));
2258         if (!p)
2259                 return NULL;
2260         /* Keep track of stuff */
2261         memset(p, 0, sizeof(struct sip_pvt));
2262         ast_mutex_init(&p->lock);
2263         p->initid = -1;
2264         p->autokillid = -1;
2265         p->stateid = -1;
2266 #ifdef OSP_SUPPORT
2267         p->osphandle = -1;
2268 #endif  
2269         if (sin) {
2270                 memcpy(&p->sa, sin, sizeof(p->sa));
2271                 if (ast_sip_ouraddrfor(&p->sa.sin_addr,&p->ourip))
2272                         memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2273         } else {
2274                 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2275         }
2276         p->rtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2277         if (videosupport)
2278                 p->vrtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2279         p->branch = rand();     
2280         p->tag = rand();
2281         
2282         /* Start with 101 instead of 1 */
2283         p->ocseq = 101;
2284         if (!p->rtp) {
2285                 ast_log(LOG_WARNING, "Unable to create RTP session: %s\n", strerror(errno));
2286                 ast_mutex_destroy(&p->lock);
2287                 free(p);
2288                 return NULL;
2289         }
2290         ast_rtp_settos(p->rtp, tos);
2291         if (p->vrtp)
2292                 ast_rtp_settos(p->vrtp, tos);
2293         if (useglobal_nat && sin) {
2294                 /* Setup NAT structure according to global settings if we have an address */
2295                 p->nat = global_nat;
2296                 memcpy(&p->recv, sin, sizeof(p->recv));
2297                 ast_rtp_setnat(p->rtp, (p->nat & SIP_NAT_ROUTE));
2298                 if (p->vrtp)
2299                         ast_rtp_setnat(p->vrtp, (p->nat & SIP_NAT_ROUTE));
2300         }
2301
2302         strncpy(p->fromdomain, default_fromdomain, sizeof(p->fromdomain) - 1);
2303         /* z9hG4bK is a magic cookie.  See RFC 3261 section 8.1.1.7 */
2304         if (p->nat != SIP_NAT_NEVER)
2305                 snprintf(p->via, sizeof(p->via), "SIP/2.0/UDP %s:%d;branch=z9hG4bK%08x;rport", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ourport, p->branch);
2306         else
2307                 snprintf(p->via, sizeof(p->via), "SIP/2.0/UDP %s:%d;branch=z9hG4bK%08x", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ourport, p->branch);
2308         if (!callid)
2309                 build_callid(p->callid, sizeof(p->callid), p->ourip, p->fromdomain);
2310         else
2311                 strncpy(p->callid, callid, sizeof(p->callid) - 1);
2312         /* Assume reinvite OK and via INVITE */
2313         p->canreinvite = global_canreinvite;
2314         /* Assign default music on hold class */
2315         strncpy(p->musicclass, global_musicclass, sizeof(p->musicclass) - 1);
2316         p->dtmfmode = global_dtmfmode;
2317         p->promiscredir = global_promiscredir;
2318         p->trustrpid = global_trustrpid;
2319         p->progressinband = global_progressinband;
2320 #ifdef OSP_SUPPORT
2321         p->ospauth = global_ospauth;
2322 #endif
2323         p->rtptimeout = global_rtptimeout;
2324         p->rtpholdtimeout = global_rtpholdtimeout;
2325         p->capability = global_capability;
2326         if (p->dtmfmode & SIP_DTMF_RFC2833)
2327                 p->noncodeccapability |= AST_RTP_DTMF;
2328         strncpy(p->context, default_context, sizeof(p->context) - 1);
2329         /* Add to list */
2330         ast_mutex_lock(&iflock);
2331         p->next = iflist;
2332         iflist = p;
2333         ast_mutex_unlock(&iflock);
2334         if (option_debug)
2335                 ast_log(LOG_DEBUG, "Allocating new SIP call for %s\n", callid);
2336         return p;
2337 }
2338
2339 /*--- find_call: Connect incoming SIP message to current call or create new call structure */
2340 /*               Called by handle_request ,sipsock_read */
2341 static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *sin)
2342 {
2343         struct sip_pvt *p;
2344         char *callid;
2345         char tmp[256] = "";
2346         char iabuf[INET_ADDRSTRLEN];
2347         char *cmd;
2348         char *tag = "", *c;
2349
2350         callid = get_header(req, "Call-ID");
2351
2352         if (pedanticsipchecking) {
2353                 /* In principle Call-ID's uniquely identify a call, however some vendors
2354                    (i.e. Pingtel) send multiple calls with the same Call-ID and different
2355                    tags in order to simplify billing.  The RFC does state that we have to
2356                    compare tags in addition to the call-id, but this generate substantially
2357                    more overhead which is totally unnecessary for the vast majority of sane
2358                    SIP implementations, and thus Asterisk does not enable this behavior
2359                    by default. Short version: You'll need this option to support conferencing
2360                    on the pingtel */
2361                 strncpy(tmp, req->header[0], sizeof(tmp) - 1);
2362                 cmd = tmp;
2363                 c = strchr(tmp, ' ');
2364                 if (c)
2365                         *c = '\0';
2366                 if (!strcasecmp(cmd, "SIP/2.0"))
2367                         strncpy(tmp, get_header(req, "To"), sizeof(tmp) - 1);
2368                 else
2369                         strncpy(tmp, get_header(req, "From"), sizeof(tmp) - 1);
2370                 tag = strstr(tmp, "tag=");
2371                 if (tag) {
2372                         tag += 4;
2373                         c = strchr(tag, ';');
2374                         if (c)
2375                                 *c = '\0';
2376                 }
2377                         
2378         }
2379                 
2380         if (ast_strlen_zero(callid)) {
2381                 ast_log(LOG_WARNING, "Call missing call ID from '%s'\n", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr));
2382                 return NULL;
2383         }
2384         ast_mutex_lock(&iflock);
2385         p = iflist;
2386         while(p) {
2387                 if (!strcmp(p->callid, callid) && 
2388                         (!pedanticsipchecking || !tag || ast_strlen_zero(p->theirtag) || !strcmp(p->theirtag, tag))) {
2389                         /* Found the call */
2390                         ast_mutex_lock(&p->lock);
2391                         ast_mutex_unlock(&iflock);
2392                         return p;
2393                 }
2394                 p = p->next;
2395         }
2396         ast_mutex_unlock(&iflock);
2397         p = sip_alloc(callid, sin, 1);
2398         if (p)
2399                 ast_mutex_lock(&p->lock);
2400         return p;
2401 }
2402
2403 /*--- sip_register: Parse register=> line in sip.conf and add to registry */
2404 static int sip_register(char *value, int lineno)
2405 {
2406         struct sip_registry *reg;
2407         char copy[256] = "";
2408         char *username=NULL, *hostname=NULL, *secret=NULL, *authuser=NULL;
2409         char *porta=NULL;
2410         char *contact=NULL;
2411         char *stringp=NULL;
2412         
2413         if (!value)
2414                 return -1;
2415         strncpy(copy, value, sizeof(copy)-1);
2416         stringp=copy;
2417         username = stringp;
2418         hostname = strrchr(stringp, '@');
2419         if (hostname) {
2420                 *hostname = '\0';
2421                 hostname++;
2422         }
2423         if (!username || ast_strlen_zero(username) || !hostname || ast_strlen_zero(hostname)) {
2424                 ast_log(LOG_WARNING, "Format for registration is user[:secret[:authuser]]@host[:port][/contact] at line %d", lineno);
2425                 return -1;
2426         }
2427         stringp=username;
2428         username = strsep(&stringp, ":");
2429         if (username) {
2430                 secret = strsep(&stringp, ":");
2431                 if (secret) 
2432                         authuser = strsep(&stringp, ":");
2433         }
2434         stringp = hostname;
2435         hostname = strsep(&stringp, "/");
2436         if (hostname) 
2437                 contact = strsep(&stringp, "/");
2438         if (!contact || ast_strlen_zero(contact))
2439                 contact = "s";
2440         stringp=hostname;
2441         hostname = strsep(&stringp, ":");
2442         porta = strsep(&stringp, ":");
2443         
2444         if (porta && !atoi(porta)) {
2445                 ast_log(LOG_WARNING, "%s is not a valid port number at line %d\n", porta, lineno);
2446                 return -1;
2447         }
2448         reg = malloc(sizeof(struct sip_registry));
2449         if (reg) {
2450                 memset(reg, 0, sizeof(struct sip_registry));
2451                 strncpy(reg->contact, contact, sizeof(reg->contact) - 1);
2452                 if (username)
2453                         strncpy(reg->username, username, sizeof(reg->username)-1);
2454                 if (hostname)
2455                         strncpy(reg->hostname, hostname, sizeof(reg->hostname)-1);
2456                 if (authuser)
2457                         strncpy(reg->authuser, authuser, sizeof(reg->authuser)-1);
2458                 if (secret)
2459                         strncpy(reg->secret, secret, sizeof(reg->secret)-1);
2460                 reg->expire = -1;
2461                 reg->timeout =  -1;
2462                 reg->refresh = default_expiry;
2463                 reg->portno = porta ? atoi(porta) : 0;
2464                 reg->callid_valid = 0;
2465                 reg->ocseq = 101;
2466                 ast_mutex_lock(&regl.lock);
2467                 reg->next = regl.registrations;
2468                 regl.registrations = reg;
2469                 ast_mutex_unlock(&regl.lock);
2470         } else {
2471                 ast_log(LOG_ERROR, "Out of memory\n");
2472                 return -1;
2473         }
2474         return 0;
2475 }
2476
2477 /*--- lws2sws: Parse multiline SIP headers into one header */
2478 /* This is enabled if pedanticsipchecking is enabled */
2479 static int lws2sws(char *msgbuf, int len) 
2480
2481         int h = 0, t = 0; 
2482         int lws = 0; 
2483
2484         for (; h < len;) { 
2485                 /* Eliminate all CRs */ 
2486                 if (msgbuf[h] == '\r') { 
2487                         h++; 
2488                         continue; 
2489                 } 
2490                 /* Check for end-of-line */ 
2491                 if (msgbuf[h] == '\n') { 
2492                 /* Check for end-of-message */ 
2493                         if (h + 1 == len) 
2494                         break; 
2495                 /* Check for a continuation line */ 
2496                 if (msgbuf[h + 1] == ' ') { 
2497                 /* Merge continuation line */ 
2498                         h++; 
2499                         continue; 
2500                 } 
2501                 /* Propagate LF and start new line */ 
2502                 msgbuf[t++] = msgbuf[h++]; 
2503                 lws = 0;
2504                 continue; 
2505         } 
2506
2507         if (msgbuf[h] == ' ' || msgbuf[h] == '\t') { 
2508                 if (lws) { 
2509                         h++; 
2510                         continue; 
2511                 } 
2512                 msgbuf[t++] = msgbuf[h++]; 
2513                 lws = 1; 
2514                 continue; 
2515         } 
2516         msgbuf[t++] = msgbuf[h++]; 
2517         if (lws) 
2518                 lws = 0; 
2519         } 
2520         msgbuf[t] = '\0'; 
2521         return t; 
2522 }
2523
2524 /*--- parse: Parse a SIP message ----*/
2525 static void parse(struct sip_request *req)
2526 {
2527         /* Divide fields by NULL's */
2528         char *c;
2529         int f = 0;
2530         c = req->data;
2531
2532         /* First header starts immediately */
2533         req->header[f] = c;
2534         while(*c) {
2535                 if (*c == '\n') {
2536                         /* We've got a new header */
2537                         *c = 0;
2538
2539 #if 0
2540                         printf("Header: %s (%d)\n", req->header[f], strlen(req->header[f]));
2541 #endif                  
2542                         if (ast_strlen_zero(req->header[f])) {
2543                                 /* Line by itself means we're now in content */
2544                                 c++;
2545                                 break;
2546                         }
2547                         if (f >= SIP_MAX_HEADERS - 1) {
2548                                 ast_log(LOG_WARNING, "Too many SIP headers...\n");
2549                         } else
2550                                 f++;
2551                         req->header[f] = c + 1;
2552                 } else if (*c == '\r') {
2553                         /* Ignore but eliminate \r's */
2554                         *c = 0;
2555                 }
2556                 c++;
2557         }
2558         /* Check for last header */
2559         if (!ast_strlen_zero(req->header[f])) 
2560                 f++;
2561         req->headers = f;
2562         /* Now we process any mime content */
2563         f = 0;
2564         req->line[f] = c;
2565         while(*c) {
2566                 if (*c == '\n') {
2567                         /* We've got a new line */
2568                         *c = 0;
2569 #if 0
2570                         printf("Line: %s (%d)\n", req->line[f], strlen(req->line[f]));
2571 #endif                  
2572                         if (f >= SIP_MAX_LINES - 1) {
2573                                 ast_log(LOG_WARNING, "Too many SDP lines...\n");
2574                         } else
2575                                 f++;
2576                         req->line[f] = c + 1;
2577                 } else if (*c == '\r') {
2578                         /* Ignore and eliminate \r's */
2579                         *c = 0;
2580                 }
2581                 c++;
2582         }
2583         /* Check for last line */
2584         if (!ast_strlen_zero(req->line[f])) 
2585                 f++;
2586         req->lines = f;
2587         if (*c) 
2588                 ast_log(LOG_WARNING, "Odd content, extra stuff left over ('%s')\n", c);
2589 }
2590
2591 /*--- process_sdp: Process SIP SDP ---*/
2592 static int process_sdp(struct sip_pvt *p, struct sip_request *req)
2593 {
2594         char *m;
2595         char *c;
2596         char *a;
2597         char host[258];
2598         char iabuf[INET_ADDRSTRLEN];
2599         int len = -1;
2600         int portno=0;
2601         int vportno=0;
2602         int peercapability, peernoncodeccapability;
2603         int vpeercapability=0, vpeernoncodeccapability=0;
2604         struct sockaddr_in sin;
2605         char *codecs;
2606         struct hostent *hp;
2607         struct ast_hostent ahp;
2608         int codec;
2609         int iterator;
2610         int sendonly = 0;
2611         int x,y;
2612         int debug=sip_debug_test_pvt(p);
2613
2614         /* Update our last rtprx when we receive an SDP, too */
2615         time(&p->lastrtprx);
2616
2617         /* Get codec and RTP info from SDP */
2618         if (strcasecmp(get_header(req, "Content-Type"), "application/sdp")) {
2619                 ast_log(LOG_NOTICE, "Content is '%s', not 'application/sdp'\n", get_header(req, "Content-Type"));
2620                 return -1;
2621         }
2622         m = get_sdp(req, "m");
2623         c = get_sdp(req, "c");
2624         if (ast_strlen_zero(m) || ast_strlen_zero(c)) {
2625                 ast_log(LOG_WARNING, "Insufficient information for SDP (m = '%s', c = '%s')\n", m, c);
2626                 return -1;
2627         }
2628         if (sscanf(c, "IN IP4 %256s", host) != 1) {
2629                 ast_log(LOG_WARNING, "Invalid host in c= line, '%s'\n", c);
2630                 return -1;
2631         }
2632         /* XXX This could block for a long time, and block the main thread! XXX */
2633         hp = ast_gethostbyname(host, &ahp);
2634         if (!hp) {
2635                 ast_log(LOG_WARNING, "Unable to lookup host in c= line, '%s'\n", c);
2636                 return -1;
2637         }
2638         sdpLineNum_iterator_init(&iterator);
2639         p->novideo = 1;
2640         while ((m = get_sdp_iterate(&iterator, req, "m"))[0] != '\0') {
2641                 if ((sscanf(m, "audio %d RTP/AVP %n", &x, &len) == 1) ||
2642                     (sscanf(m, "audio %d/%d RTP/AVP %n", &x, &y, &len) == 2)) {
2643                         portno = x;
2644                         /* Scan through the RTP payload types specified in a "m=" line: */
2645                         ast_rtp_pt_clear(p->rtp);
2646                         codecs = m + len;
2647                         while(!ast_strlen_zero(codecs)) {
2648                                 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2649                                         ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2650                                         return -1;
2651                                 }
2652                                 if (debug)
2653                                         ast_verbose("Found RTP audio format %d\n", codec);
2654                                 ast_rtp_set_m_type(p->rtp, codec);
2655                                 codecs += len;
2656                                 /* Skip over any whitespace */
2657                                 while(*codecs && (*codecs < 33)) codecs++;
2658                         }
2659                 }
2660                 if (p->vrtp)
2661                         ast_rtp_pt_clear(p->vrtp);  /* Must be cleared in case no m=video line exists */
2662
2663                 if (p->vrtp && (sscanf(m, "video %d RTP/AVP %n", &x, &len) == 1)) {
2664                         p->novideo = 0;
2665                         vportno = x;
2666                         /* Scan through the RTP payload types specified in a "m=" line: */
2667                         codecs = m + len;
2668                         while(!ast_strlen_zero(codecs)) {
2669                                 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2670                                         ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2671                                         return -1;
2672                                 }
2673                                 if (debug)
2674                                         ast_verbose("Found video format %s\n", ast_getformatname(codec));
2675                                 ast_rtp_set_m_type(p->vrtp, codec);
2676                                 codecs += len;
2677                                 /* Skip over any whitespace */
2678                                 while(*codecs && (*codecs < 33)) codecs++;
2679                         }
2680                 }
2681         }
2682
2683         /* RTP addresses and ports for audio and video */
2684         sin.sin_family = AF_INET;
2685         memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
2686
2687         /* Setup audio port number */
2688         sin.sin_port = htons(portno);
2689         if (p->rtp && sin.sin_port) {
2690                 ast_rtp_set_peer(p->rtp, &sin);
2691                 if (debug) {
2692                         ast_verbose("Peer audio RTP is at port %s:%d\n", ast_inet_ntoa(iabuf,sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2693                         ast_log(LOG_DEBUG,"Peer audio RTP is at port %s:%d\n",ast_inet_ntoa(iabuf, sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2694                 }
2695         }
2696         /* Setup video port number */
2697         sin.sin_port = htons(vportno);
2698         if (p->vrtp && sin.sin_port) {
2699                 ast_rtp_set_peer(p->vrtp, &sin);
2700                 if (debug) {
2701                         ast_verbose("Peer video RTP is at port %s:%d\n", ast_inet_ntoa(iabuf,sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2702                         ast_log(LOG_DEBUG,"Peer video RTP is at port %s:%d\n",ast_inet_ntoa(iabuf, sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2703                 }
2704         }
2705
2706         /* Next, scan through each "a=rtpmap:" line, noting each
2707          * specified RTP payload type (with corresponding MIME subtype):
2708          */
2709         sdpLineNum_iterator_init(&iterator);
2710         while ((a = get_sdp_iterate(&iterator, req, "a"))[0] != '\0') {
2711       char* mimeSubtype = ast_strdupa(a); /* ensures we have enough space */
2712           if (!strcasecmp(a, "sendonly")) {
2713                 sendonly=1;
2714                 continue;
2715           }
2716           if (!strcasecmp(a, "sendrecv")) {
2717                 sendonly=0;
2718           }
2719           if (sscanf(a, "rtpmap: %u %[^/]/", &codec, mimeSubtype) != 2) continue;
2720           if (debug)
2721                 ast_verbose("Found description format %s\n", mimeSubtype);
2722           /* Note: should really look at the 'freq' and '#chans' params too */
2723           ast_rtp_set_rtpmap_type(p->rtp, codec, "audio", mimeSubtype);
2724           if (p->vrtp)
2725                   ast_rtp_set_rtpmap_type(p->vrtp, codec, "video", mimeSubtype);
2726         }
2727
2728         /* Now gather all of the codecs that were asked for: */
2729         ast_rtp_get_current_formats(p->rtp,
2730                                 &peercapability, &peernoncodeccapability);
2731         if (p->vrtp)
2732                 ast_rtp_get_current_formats(p->vrtp,
2733                                 &vpeercapability, &vpeernoncodeccapability);
2734         p->jointcapability = p->capability & (peercapability | vpeercapability);
2735         p->peercapability = (peercapability | vpeercapability);
2736         p->noncodeccapability = noncodeccapability & peernoncodeccapability;
2737         
2738         if (debug) {
2739                 const unsigned slen=80;
2740                 char s1[slen], s2[slen], s3[slen], s4[slen];
2741
2742                 ast_verbose("Capabilities: us - %s, peer - audio=%s/video=%s, combined - %s\n",
2743                         ast_getformatname_multiple(s1, slen, p->capability),
2744                         ast_getformatname_multiple(s2, slen, peercapability),
2745                         ast_getformatname_multiple(s3, slen, vpeercapability),
2746                         ast_getformatname_multiple(s4, slen, p->jointcapability));
2747
2748                 ast_verbose("Non-codec capabilities: us - %s, peer - %s, combined - %s\n",
2749                         ast_getformatname_multiple(s1, slen, noncodeccapability),
2750                         ast_getformatname_multiple(s2, slen, peernoncodeccapability),
2751                         ast_getformatname_multiple(s3, slen, p->noncodeccapability));
2752         }
2753         if (!p->jointcapability) {
2754                 ast_log(LOG_WARNING, "No compatible codecs!\n");
2755                 return -1;
2756         }
2757         if (p->owner) {
2758                 if (!(p->owner->nativeformats & p->jointcapability)) {
2759                         const unsigned slen=80;
2760                         char s1[slen], s2[slen];
2761                         ast_log(LOG_DEBUG, "Oooh, we need to change our formats since our peer supports only %s and not %s\n", 
2762                                         ast_getformatname_multiple(s1, slen, p->jointcapability),
2763                                         ast_getformatname_multiple(s2, slen, p->owner->nativeformats));
2764                         p->owner->nativeformats = sip_codec_choose(p->jointcapability);
2765                         ast_set_read_format(p->owner, p->owner->readformat);
2766                         ast_set_write_format(p->owner, p->owner->writeformat);
2767                 }
2768                 if (ast_bridged_channel(p->owner)) {
2769                         /* Turn on/off music on hold if we are holding/unholding */
2770                         if (sin.sin_addr.s_addr && !sendonly) {
2771                                 ast_moh_stop(ast_bridged_channel(p->owner));
2772                         } else {
2773                                 ast_moh_start(ast_bridged_channel(p->owner), NULL);
2774                         }
2775                 }
2776         }
2777         return 0;
2778         
2779 }
2780
2781 /*--- add_header: Add header to SIP message */
2782 static int add_header(struct sip_request *req, char *var, char *value)
2783 {
2784         if (req->len >= sizeof(req->data) - 4) {
2785                 ast_log(LOG_WARNING, "Out of space, can't add anymore (%s:%s)\n", var, value);
2786                 return -1;
2787         }
2788         if (req->lines) {
2789                 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2790                 return -1;
2791         }
2792         req->header[req->headers] = req->data + req->len;
2793         snprintf(req->header[req->headers], sizeof(req->data) - req->len - 4, "%s: %s\r\n", var, value);
2794         req->len += strlen(req->header[req->headers]);
2795         if (req->headers < SIP_MAX_HEADERS)
2796                 req->headers++;
2797         else {
2798                 ast_log(LOG_WARNING, "Out of header space\n");
2799                 return -1;
2800         }
2801         return 0;       
2802 }
2803
2804 /*--- add_blank_header: Add blank header to SIP message */
2805 static int add_blank_header(struct sip_request *req)
2806 {
2807         if (req->len >= sizeof(req->data) - 4) {
2808                 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2809                 return -1;
2810         }
2811         if (req->lines) {
2812                 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2813                 return -1;
2814         }
2815         req->header[req->headers] = req->data + req->len;
2816         snprintf(req->header[req->headers], sizeof(req->data) - req->len, "\r\n");
2817         req->len += strlen(req->header[req->headers]);
2818         if (req->headers < SIP_MAX_HEADERS)
2819                 req->headers++;
2820         else {
2821                 ast_log(LOG_WARNING, "Out of header space\n");
2822                 return -1;
2823         }
2824         return 0;       
2825 }
2826
2827 /*--- add_line: Add content (not header) to SIP message */
2828 static int add_line(struct sip_request *req, char *line)
2829 {
2830         if (req->len >= sizeof(req->data) - 4) {
2831                 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2832                 return -1;
2833         }
2834         if (!req->lines) {
2835                 /* Add extra empty return */
2836                 snprintf(req->data + req->len, sizeof(req->data) - req->len, "\r\n");
2837                 req->len += strlen(req->data + req->len);
2838         }
2839         req->line[req->lines] = req->data + req->len;
2840         snprintf(req->line[req->lines], sizeof(req->data) - req->len, "%s", line);
2841         req->len += strlen(req->line[req->lines]);
2842         if (req->lines < SIP_MAX_LINES)
2843                 req->lines++;
2844         else {
2845                 ast_log(LOG_WARNING, "Out of line space\n");
2846                 return -1;
2847         }
2848         return 0;       
2849 }
2850
2851 /*--- copy_header: Copy one header field from one request to another */
2852 static int copy_header(struct sip_request *req, struct sip_request *orig, char *field)
2853 {
2854         char *tmp;
2855         tmp = get_header(orig, field);
2856         if (!ast_strlen_zero(tmp)) {
2857                 /* Add what we're responding to */
2858                 return add_header(req, field, tmp);
2859         }
2860         ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2861         return -1;
2862 }
2863
2864 /*--- copy_all_header: Copy all headers from one request to another ---*/
2865 static int copy_all_header(struct sip_request *req, struct sip_request *orig, char *field)
2866 {
2867         char *tmp;
2868         int start = 0;
2869         int copied = 0;
2870         for (;;) {
2871                 tmp = __get_header(orig, field, &start);
2872                 if (!ast_strlen_zero(tmp)) {
2873                         /* Add what we're responding to */
2874                         add_header(req, field, tmp);
2875                         copied++;
2876                 } else
2877                         break;
2878         }
2879         return copied ? 0 : -1;
2880 }
2881
2882 /*--- copy_via_headers: Copy SIP VIA Headers from one request to another ---*/
2883 static int copy_via_headers(struct sip_pvt *p, struct sip_request *req, struct sip_request *orig, char *field)
2884 {
2885         char tmp[256]="", *oh, *end;
2886         int start = 0;
2887         int copied = 0;
2888         char new[256];
2889         char iabuf[INET_ADDRSTRLEN];
2890         for (;;) {
2891                 oh = __get_header(orig, field, &start);
2892                 if (!ast_strlen_zero(oh)) {
2893                         /* Strip ;rport */
2894                         strncpy(tmp, oh, sizeof(tmp) - 1);
2895                         oh = strstr(tmp, ";rport");
2896                         if (oh) {
2897                                 end = strchr(oh + 1, ';');
2898                                 if (end)
2899                                         memmove(oh, end, strlen(end) + 1);
2900                                 else
2901                                         *oh = '\0';
2902                         }
2903                         if (!copied && (p->nat == SIP_NAT_ALWAYS)) {
2904                                 /* Whoo hoo!  Now we can indicate port address translation too!  Just
2905                                    another RFC (RFC3581). I'll leave the original comments in for
2906                                    posterity.  */
2907                                 snprintf(new, sizeof(new), "%s;received=%s;rport=%d", tmp, ast_inet_ntoa(iabuf, sizeof(iabuf), p->recv.sin_addr), ntohs(p->recv.sin_port));
2908                                 add_header(req, field, new);
2909                         } else {
2910                                 /* Add what we're responding to */
2911                                 add_header(req, field, tmp);
2912                         }
2913                         copied++;
2914                 } else
2915                         break;
2916         }
2917         if (!copied) {
2918                 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2919                 return -1;
2920         }
2921         return 0;
2922 }
2923
2924 /*--- add_route: Add route header into request per learned route ---*/
2925 static void add_route(struct sip_request *req, struct sip_route *route)
2926 {
2927         char r[256], *p;
2928         int n, rem = 255; /* sizeof(r)-1: Room for terminating 0 */
2929
2930         if (!route) return;
2931
2932         p = r;
2933         while (route) {
2934                 n = strlen(route->hop);
2935                 if ((n+3)>rem) break;
2936                 if (p != r) {
2937                         *p++ = ',';
2938                         --rem;
2939                 }
2940                 *p++ = '<';
2941                 strncpy(p, route->hop, rem);  p += n;
2942                 *p++ = '>';
2943                 rem -= (n+2);
2944                 route = route->next;
2945         }
2946         *p = '\0';
2947         add_header(req, "Route", r);
2948 }
2949
2950 /*--- set_destination: Set destination from SIP URI ---*/
2951 static void set_destination(struct sip_pvt *p, char *uri)
2952 {
2953         char *h, *maddr, hostname[256] = "";
2954         char iabuf[INET_ADDRSTRLEN];
2955         int port, hn;
2956         struct hostent *hp;
2957         struct ast_hostent ahp;
2958         int debug=sip_debug_test_pvt(p);
2959
2960         /* Parse uri to h (host) and port - uri is already just the part inside the <> */
2961         /* general form we are expecting is sip[s]:username[:password]@host[:port][;...] */
2962
2963         if (debug)
2964                 ast_verbose("set_destination: Parsing <%s> for address/port to send to\n", uri);
2965
2966         /* Find and parse hostname */
2967         h = strchr(uri, '@');
2968         if (h)
2969                 ++h;
2970         else {
2971                 h = uri;
2972                 if (strncmp(h, "sip:", 4) == 0)
2973                         h += 4;
2974                 else if (strncmp(h, "sips:", 5) == 0)
2975                         h += 5;
2976         }
2977         hn = strcspn(h, ":;>");
2978         if (hn > (sizeof(hostname) - 1)) hn = sizeof(hostname) - 1;
2979         strncpy(hostname, h, hn);  hostname[hn] = '\0'; /* safe */
2980         h+=hn;
2981
2982         /* Is "port" present? if not default to 5060 */
2983         if (*h == ':') {
2984                 /* Parse port */
2985                 ++h;
2986                 port = strtol(h, &h, 10);
2987         }
2988         else
2989                 port = 5060;
2990
2991         /* Got the hostname:port - but maybe there's a "maddr=" to override address? */
2992         maddr = strstr(h, "maddr=");
2993         if (maddr) {
2994                 maddr += 6;
2995                 hn = strspn(maddr, "0123456789.");
2996                 if (hn > (sizeof(hostname) - 1)) hn = sizeof(hostname) - 1;
2997                 strncpy(hostname, maddr, hn);  hostname[hn] = '\0'; /* safe */
2998         }
2999         
3000         hp = ast_gethostbyname(hostname, &ahp);
3001         if (hp == NULL)  {
3002                 ast_log(LOG_WARNING, "Can't find address for host '%s'\n", hostname);
3003                 return;
3004         }
3005         p->sa.sin_family = AF_INET;
3006         memcpy(&p->sa.sin_addr, hp->h_addr, sizeof(p->sa.sin_addr));
3007         p->sa.sin_port = htons(port);
3008         if (debug)
3009                 ast_verbose("set_destination: set destination to %s, port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr), port);
3010 }
3011
3012 /*--- init_resp: Initialize SIP response, based on SIP request ---*/
3013 static int init_resp(struct sip_request *req, char *resp, struct sip_request *orig)
3014 {
3015         /* Initialize a response */
3016         if (req->headers || req->len) {
3017                 ast_log(LOG_WARNING, "Request already initialized?!?\n");
3018                 return -1;
3019         }
3020         req->header[req->headers] = req->data + req->len;
3021         snprintf(req->header[req->headers], sizeof(req->data) - req->len, "SIP/2.0 %s\r\n", resp);
3022         req->len += strlen(req->header[req->headers]);
3023         if (req->headers < SIP_MAX_HEADERS)
3024                 req->headers++;
3025         else
3026                 ast_log(LOG_WARNING, "Out of header space\n");
3027         return 0;
3028 }
3029
3030 /*--- init_req: Initialize SIP request ---*/
3031 static int init_req(struct sip_request *req, char *resp, char *recip)
3032 {
3033         /* Initialize a response */
3034         if (req->headers || req->len) {
3035                 ast_log(LOG_WARNING, "Request already initialized?!?\n");
3036                 return -1;
3037         }
3038         req->header[req->headers] = req->data + req->len;
3039         snprintf(req->header[req->headers], sizeof(req->data) - req->len, "%s %s SIP/2.0\r\n", resp, recip);