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