annotate extensions/app_sip/registrationtermination.c @ 440:f38bff0bf3e9

Added dynamic port choice for app_sip
author Alexandre Westfahl <awestfahl@freediameter.net>
date Wed, 28 Jul 2010 16:17:29 +0900
parents 0d08a9ab2212
children 95a784729cac
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
1 /*********************************************************************************************************
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
2 * Software License Agreement (BSD License) *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
3 * Author: Alexandre Westfahl <awestfahl@freediameter.net> *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
4 * *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
5 * Copyright (c) 2010, Alexandre Westfahl, Teraoka Laboratory (Keio University), and the WIDE Project. *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
6 * *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
7 * All rights reserved. *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
8 * *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
9 * Redistribution and use of this software in source and binary forms, with or without modification, are *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
10 * permitted provided that the following conditions are met: *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
11 * *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
12 * * Redistributions of source code must retain the above *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
13 * copyright notice, this list of conditions and the *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
14 * following disclaimer. *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
15 * *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
16 * * Redistributions in binary form must reproduce the above *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
17 * copyright notice, this list of conditions and the *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
18 * following disclaimer in the documentation and/or other *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
19 * materials provided with the distribution. *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
20 * *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
21 * * Neither the name of the Teraoka Laboratory nor the *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
22 * names of its contributors may be used to endorse or *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
23 * promote products derived from this software without *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
24 * specific prior written permission of Teraoka Laboratory *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
25 * *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
26 * *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
27 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
28 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
29 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
30 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
31 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
32 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
33 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
34 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
35 *********************************************************************************************************/
433
0d08a9ab2212 Corrected name mistakes on app_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
36 #include "app_sip.h"
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
37 #include <sys/types.h>
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
38 #include <sys/socket.h>
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
39 #include <netinet/in.h>
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
40 #include <arpa/inet.h>
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
41 #include <unistd.h>
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
42 typedef int SOCKET;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
43 typedef struct sockaddr_in SOCKADDR_IN;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
44 typedef struct sockaddr SOCKADDR;
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
45
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
46 //Procedure which always wait for data on socket
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
47 void *rtr_socket(void *arg)
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
48 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
49 SOCKET sock;
420
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 419
diff changeset
50 SOCKADDR_IN sin, csin;
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 419
diff changeset
51 struct rtrsipaor rtrsip;
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 419
diff changeset
52 int rcvbytes=0;
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
53 sock = socket(AF_INET, SOCK_STREAM, 0);
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
54 sin.sin_addr.s_addr = inet_addr("127.0.0.1");
420
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 419
diff changeset
55 sin.sin_family = AF_INET;
440
f38bff0bf3e9 Added dynamic port choice for app_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 433
diff changeset
56 sin.sin_port = htons(as_conf->rtr_port);
420
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 419
diff changeset
57 socklen_t sinsize = sizeof(csin);
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
58 int accepted=0;
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
59
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
60 if(!bind(sock, (SOCKADDR*)&sin, sizeof(sin)))
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
61 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
62 if(listen(sock,1))
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
63 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
64 TRACE_DEBUG(INFO,"ERROR on listen!");
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
65 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
66
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
67 while(1)
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
68 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
69 accepted=accept(sock, (struct sockaddr *)&csin,&sinsize);
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
70 if(accepted>-1)
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
71 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
72 rcvbytes=recv(accepted, &rtrsip, sizeof(struct rtrsipaor),0);
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
73
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
74 if(rcvbytes>-1)
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
75 {
420
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 419
diff changeset
76 //We received something, we can send an RTR
433
0d08a9ab2212 Corrected name mistakes on app_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
77 app_sip_RTR_cb(rtrsip);
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
78 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
79 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
80 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
81 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
82 else
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
83 TRACE_DEBUG(INFO,"Can't create socket!");
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
84
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
85
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
86 pthread_exit(NULL);
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
87
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
88 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
89 //Called to send a RTR
433
0d08a9ab2212 Corrected name mistakes on app_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
90 int app_sip_RTR_cb(struct rtrsipaor structure)
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
91 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
92 TRACE_ENTRY("%p", structure);
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
93
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
94 int got_username=0;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
95 int got_streason=0;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
96 int num_aor=0;//How many SIP-AOR?
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
97 struct dict_object * rtr_model=NULL;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
98 struct msg * message=NULL;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
99 struct avp *groupedavp=NULL, *avp=NULL;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
100 struct session *sess=NULL;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
101 union avp_value value;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
102
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
103 //We must check that we have all needed value in structure
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
104 if(structure.username[0]!='\0')
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
105 got_username=1;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
106
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
107 if(structure.sip_aor1[0]!='\0')
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
108 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
109 num_aor++;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
110 if(structure.sip_aor2[0]!='\0')
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
111 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
112 num_aor++;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
113 if(structure.sip_aor3[0]!='\0')
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
114 num_aor++;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
115 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
116 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
117
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
118 if(structure.strreason!='\0')
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
119 got_streason=1;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
120
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
121
420
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 419
diff changeset
122 TRACE_DEBUG(FULL,"Request for %d SIP_AOR to be deregistred.",num_aor);
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
123
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
124 if((got_username + num_aor)==0)
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
125 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
126 //We must have a least a SIP_AOR or a Username
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
127 TRACE_DEBUG(INFO,"Can not proceed because there is no SIP_AOR or Username");
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
128 return EINVAL;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
129 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
130 if(structure.reason<0)
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
131 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
132 //We must have a least a SIP_AOR or a Username
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
133 TRACE_DEBUG(INFO,"Incorrect Reason-Code");
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
134 return EINVAL;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
135 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
136
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
137 if(structure.desthost[0]=='\0')
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
138 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
139 //We must have a least a SIP_AOR or a Username
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
140 TRACE_DEBUG(INFO,"No Destination_Host was provided!");
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
141 return EINVAL;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
142 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
143 //Create the base message for an RTR
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
144 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, "Registration-Termination-Request", &rtr_model, ENOENT) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
145 CHECK_FCT( fd_msg_new (rtr_model, 0, &message));
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
146
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
147 // Create a new session
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
148 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
149 CHECK_FCT( fd_sess_new( &sess, fd_g_config->cnf_diamid, "app_sip", 7 ));
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
150 char * sid;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
151 CHECK_FCT( fd_sess_getsid ( sess, &sid ));
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
152 CHECK_FCT( fd_msg_avp_new ( sip_dict.Session_Id, 0, &avp ));
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
153 value.os.data = (uint8_t *)sid;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
154 value.os.len = strlen(sid);
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
155 CHECK_FCT( fd_msg_avp_setvalue( avp, &value ));
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
156 CHECK_FCT( fd_msg_avp_add( message, MSG_BRW_FIRST_CHILD, avp ));
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
157 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
158
420
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 419
diff changeset
159 //Add the Auth-Application-Id
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 419
diff changeset
160 {
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 419
diff changeset
161 CHECK_FCT( fd_msg_avp_new ( sip_dict.Auth_Application_Id, 0, &avp ) );
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 419
diff changeset
162 value.i32 = 6;
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 419
diff changeset
163 CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) );
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 419
diff changeset
164 CHECK_FCT( fd_msg_avp_add ( message, MSG_BRW_LAST_CHILD, avp) );
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 419
diff changeset
165 }
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
166
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
167 //Auth_Session_State
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
168 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
169 CHECK_FCT( fd_msg_avp_new ( sip_dict.Auth_Session_State, 0, &avp ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
170 value.i32=1;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
171 CHECK_FCT( fd_msg_avp_setvalue( avp, &value ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
172 CHECK_FCT( fd_msg_avp_add( message, MSG_BRW_LAST_CHILD, avp ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
173 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
174
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
175 //Origin_Host & Origin_Realm
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
176 CHECK_FCT( fd_msg_add_origin ( message, 0 ));
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
177
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
178 //Destination_Host
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
179 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
180 CHECK_FCT( fd_msg_avp_new ( sip_dict.Destination_Host, 0, &avp ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
181 value.os.data=(unsigned char *)structure.desthost;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
182 value.os.len=(size_t)strlen(structure.desthost);
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
183 CHECK_FCT( fd_msg_avp_setvalue( avp, &value ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
184 CHECK_FCT( fd_msg_avp_add( message, MSG_BRW_LAST_CHILD, avp ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
185 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
186
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
187
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
188 //SIP Deregistration Reason (Grouped AVP)
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
189 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
190 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_Deregistration_Reason, 0, &groupedavp ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
191
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
192 //Reason Code
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
193 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_Reason_Code, 0, &avp ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
194 value.i32=structure.reason;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
195 CHECK_FCT( fd_msg_avp_setvalue( avp, &value ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
196 CHECK_FCT( fd_msg_avp_add( groupedavp, MSG_BRW_LAST_CHILD, avp ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
197
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
198 if(got_streason)
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
199 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
200 //Reason Info
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
201 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_Reason_Info, 0, &avp ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
202 value.os.data=(unsigned char *)structure.strreason;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
203 value.os.len=(size_t)strlen(structure.strreason);
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
204 CHECK_FCT( fd_msg_avp_setvalue( avp, &value ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
205 CHECK_FCT( fd_msg_avp_add( groupedavp, MSG_BRW_LAST_CHILD, avp ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
206 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
207
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
208 //We add the grouped AVP to the message
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
209 CHECK_FCT( fd_msg_avp_add( message, MSG_BRW_LAST_CHILD, groupedavp ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
210 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
211
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
212 //Username
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
213 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
214 if(got_username)
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
215 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
216 CHECK_FCT( fd_msg_avp_new ( sip_dict.User_Name, 0, &avp ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
217 value.os.data=(unsigned char *)structure.username;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
218 value.os.len=(size_t)strlen(structure.username);
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
219 CHECK_FCT( fd_msg_avp_setvalue( avp, &value ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
220 CHECK_FCT( fd_msg_avp_add( message, MSG_BRW_LAST_CHILD, avp ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
221 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
222 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
223
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
224 //SIP_AOR
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
225 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
226 if(num_aor>0)
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
227 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
228 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_AOR, 0, &avp ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
229 value.os.data=(unsigned char *)structure.sip_aor1;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
230 value.os.len=(size_t)strlen(structure.sip_aor1);
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
231 CHECK_FCT( fd_msg_avp_setvalue( avp, &value ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
232 CHECK_FCT( fd_msg_avp_add( message, MSG_BRW_LAST_CHILD, avp ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
233 if(num_aor>1)
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
234 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
235 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_AOR, 0, &avp ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
236 value.os.data=(unsigned char *)structure.sip_aor2;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
237 value.os.len=(size_t)strlen(structure.sip_aor2);
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
238 CHECK_FCT( fd_msg_avp_setvalue( avp, &value ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
239 CHECK_FCT( fd_msg_avp_add( message, MSG_BRW_LAST_CHILD, avp ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
240 if(num_aor>2)
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
241 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
242 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_AOR, 0, &avp ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
243 value.os.data=(unsigned char *)structure.sip_aor3;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
244 value.os.len=(size_t)strlen(structure.sip_aor3);
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
245 CHECK_FCT( fd_msg_avp_setvalue( avp, &value ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
246 CHECK_FCT( fd_msg_avp_add( message, MSG_BRW_LAST_CHILD, avp ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
247 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
248 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
249 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
250 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
251
420
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 419
diff changeset
252 //TODO:remove for debug
440
f38bff0bf3e9 Added dynamic port choice for app_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 433
diff changeset
253 //fd_msg_dump_walk(INFO,message);
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
254 CHECK_FCT( fd_msg_send( &message, NULL, NULL ));
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
255
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
256 return 0;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
257 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
258
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
259 //Called when an RTA arrive
433
0d08a9ab2212 Corrected name mistakes on app_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
260 int app_sip_RTA_cb( struct msg ** msg, struct avp * paramavp, struct session * sess, enum disp_action * act)
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
261 {
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
262 //TODO: RTA reception
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
263 /*
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
264 //TODO:remove unused variables
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
265 struct msg *ans, *qry;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
266 struct avp *avp, *a2, *authdataitem;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
267 struct msg_hdr * header = NULL;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
268 struct avp_hdr * avphdr=NULL, *avpheader=NULL, *avpheader_auth=NULL,*digestheader=NULL;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
269 union avp_value val;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
270 int found_cnonce=0;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
271 struct avp * tempavp=NULL,*sipAuthentication=NULL,*sipAuthenticate=NULL;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
272 char * result;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
273 int idx=0, idx2=0, number_of_auth_items=0,i=0;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
274 //Flags and variables for Database
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
275 int sipurinotstored=0, authenticationpending=0, querylen=0, usernamelen=0;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
276 char *query=NULL,*username=NULL;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
277
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
278
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
279
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
280 TRACE_ENTRY("%p %p %p %p", msg, avp, sess, act);
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
281
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
282 if (msg == NULL)
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
283 return EINVAL;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
284
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
285
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
286 // Create answer header
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
287 qry = *msg;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
288 CHECK_FCT( fd_msg_new_answer_from_req ( fd_g_config->cnf_dict, msg, 0 ) );
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
289 ans = *msg;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
290
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
291
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
292 // Add the Auth-Session-State AVP
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
293 {
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
294
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
295 CHECK_FCT( fd_msg_search_avp ( qry, sip_dict.Auth_Session_State, &avp) );
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
296 CHECK_FCT( fd_msg_avp_hdr( avp, &avphdr ) );
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
297
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
298 CHECK_FCT( fd_msg_avp_new ( sip_dict.Auth_Session_State, 0, &avp ) );
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
299 CHECK_FCT( fd_msg_avp_setvalue( avp, avphdr->avp_value ) );
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
300 CHECK_FCT( fd_msg_avp_add( ans, MSG_BRW_LAST_CHILD, avp ) );
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
301 }
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
302
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
303 CHECK_FCT( fd_msg_search_avp ( qry, sip_dict.SIP_Deregistration_Reason, &avp) );
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
304 CHECK_FCT( fd_msg_avp_hdr( avp, &avphdr ) );
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
305
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
306
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
307
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
308
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
309
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
310
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
311
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
312
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
313
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
314
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
315
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
316
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
317
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
318 */
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
319 return 0;
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
320
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
321 }
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
322
"Welcome to our mercurial repository"