annotate extensions/app_sip/registrationtermination.c @ 1416:a2ce56c34dd8

app_sip: fix RTR handling Fix check for empty strreason. (detected by Apple clang 11.0.0)
author Luke Mewburn <luke@mewburn.net>
date Tue, 18 Feb 2020 19:33:08 +1100
parents b3d623f04b6d
children
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
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 924
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
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 924
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 union avp_value value;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
101
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
102 //We must check that we have all needed value in structure
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 924
diff changeset
103 if(structure->username[0]!='\0')
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
104 got_username=1;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
105
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 924
diff changeset
106 if(structure->sip_aor1[0]!='\0')
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
107 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
108 num_aor++;
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 924
diff changeset
109 if(structure->sip_aor2[0]!='\0')
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
110 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
111 num_aor++;
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 924
diff changeset
112 if(structure->sip_aor3[0]!='\0')
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
113 num_aor++;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
114 }
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
1416
a2ce56c34dd8 app_sip: fix RTR handling
Luke Mewburn <luke@mewburn.net>
parents: 1052
diff changeset
117 if(structure->strreason[0]!='\0')
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
118 got_streason=1;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
119
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
120
420
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 419
diff changeset
121 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
122
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
123 if((got_username + num_aor)==0)
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
124 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
125 //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
126 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
127 return EINVAL;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
128 }
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 924
diff changeset
129 if(structure->reason<0)
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
130 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
131 //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
132 TRACE_DEBUG(INFO,"Incorrect Reason-Code");
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
133 return EINVAL;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
134 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
135
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 924
diff changeset
136 if(structure->desthost[0]=='\0')
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
137 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
138 //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
139 TRACE_DEBUG(INFO,"No Destination_Host was provided!");
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
140 return EINVAL;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
141 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
142 //Create the base message for an RTR
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
143 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
144 CHECK_FCT( fd_msg_new (rtr_model, 0, &message));
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
145
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
146 // Create a new session
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
147 {
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
148 #define APP_SIP_SID_OPT "app_sip"
924
877592751fee Fix (tentative) for invalid handling of sessions fast creation/destruction as pointed by Yusuke Okura -- http://lists.freediameter.net/pipermail/help/2013-February/000584.html and http://lists.freediameter.net/pipermail/help/2013-February/000589.html -- Thank you very much
Sebastien Decugis <sdecugis@freediameter.net>
parents: 706
diff changeset
149 CHECK_FCT( fd_msg_new_session( message, (os0_t)APP_SIP_SID_OPT, CONSTSTRLEN(APP_SIP_SID_OPT) ) );
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
150 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
151
420
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 419
diff changeset
152 //Add the Auth-Application-Id
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 419
diff changeset
153 {
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 419
diff changeset
154 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
155 value.i32 = 6;
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 419
diff changeset
156 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
157 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
158 }
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
159
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
160 //Auth_Session_State
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
161 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
162 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
163 value.i32=1;
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
164 CHECK_FCT( fd_msg_avp_setvalue( avp, &value ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
165 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
166 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
167
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
168 //Origin_Host & Origin_Realm
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
169 CHECK_FCT( fd_msg_add_origin ( message, 0 ));
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
170
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
171 //Destination_Host
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
172 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
173 CHECK_FCT( fd_msg_avp_new ( sip_dict.Destination_Host, 0, &avp ) );
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 924
diff changeset
174 value.os.data=(unsigned char *)structure->desthost;
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 924
diff changeset
175 value.os.len=(size_t)strlen(structure->desthost);
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
176 CHECK_FCT( fd_msg_avp_setvalue( avp, &value ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
177 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
178 }
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
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
181 //SIP Deregistration Reason (Grouped AVP)
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
182 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
183 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
184
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
185 //Reason Code
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
186 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_Reason_Code, 0, &avp ) );
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 924
diff changeset
187 value.i32=structure->reason;
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
188 CHECK_FCT( fd_msg_avp_setvalue( avp, &value ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
189 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
190
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
191 if(got_streason)
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
192 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
193 //Reason Info
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
194 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_Reason_Info, 0, &avp ) );
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 924
diff changeset
195 value.os.data=(unsigned char *)structure->strreason;
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 924
diff changeset
196 value.os.len=(size_t)strlen(structure->strreason);
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
197 CHECK_FCT( fd_msg_avp_setvalue( avp, &value ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
198 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
199 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
200
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
201 //We add the grouped AVP to the message
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
202 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
203 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
204
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
205 //Username
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 if(got_username)
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
208 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
209 CHECK_FCT( fd_msg_avp_new ( sip_dict.User_Name, 0, &avp ) );
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 924
diff changeset
210 value.os.data=(unsigned char *)structure->username;
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 924
diff changeset
211 value.os.len=(size_t)strlen(structure->username);
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
212 CHECK_FCT( fd_msg_avp_setvalue( avp, &value ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
213 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
214 }
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
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
217 //SIP_AOR
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
218 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
219 if(num_aor>0)
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
220 {
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
221 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_AOR, 0, &avp ) );
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 924
diff changeset
222 value.os.data=(unsigned char *)structure->sip_aor1;
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 924
diff changeset
223 value.os.len=(size_t)strlen(structure->sip_aor1);
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
224 CHECK_FCT( fd_msg_avp_setvalue( avp, &value ) );
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
225 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
226 if(num_aor>1)
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 ) );
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 924
diff changeset
229 value.os.data=(unsigned char *)structure->sip_aor2;
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 924
diff changeset
230 value.os.len=(size_t)strlen(structure->sip_aor2);
419
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>2)
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 ) );
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 924
diff changeset
236 value.os.data=(unsigned char *)structure->sip_aor3;
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 924
diff changeset
237 value.os.len=(size_t)strlen(structure->sip_aor3);
419
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 }
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 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
243 }
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
244
420
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 419
diff changeset
245 //TODO:remove for debug
440
f38bff0bf3e9 Added dynamic port choice for app_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 433
diff changeset
246 //fd_msg_dump_walk(INFO,message);
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
247 CHECK_FCT( fd_msg_send( &message, NULL, NULL ));
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 return 0;
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
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
252 //Called when an RTA arrive
639
95a784729cac Added new opaque pointer to fd_sess_handler_create and fd_disp_register for usability. Bumped API version number.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 440
diff changeset
253 int app_sip_RTA_cb( struct msg ** msg, struct avp * paramavp, struct session * sess, void * opaque, enum disp_action * act)
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
254 {
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
255 //TODO: RTA reception
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
256 /*
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
257 //TODO:remove unused variables
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
258 struct msg *ans, *qry;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
259 struct avp *avp, *a2, *authdataitem;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
260 struct msg_hdr * header = NULL;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
261 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
262 union avp_value val;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
263 int found_cnonce=0;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
264 struct avp * tempavp=NULL,*sipAuthentication=NULL,*sipAuthenticate=NULL;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
265 char * result;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
266 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
267 //Flags and variables for Database
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
268 int sipurinotstored=0, authenticationpending=0, querylen=0, usernamelen=0;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
269 char *query=NULL,*username=NULL;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
270
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
271
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
272
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
273 TRACE_ENTRY("%p %p %p %p", msg, avp, sess, act);
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
274
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
275 if (msg == NULL)
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
276 return EINVAL;
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
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
279 // Create answer header
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
280 qry = *msg;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
281 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
282 ans = *msg;
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
283
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
284
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
285 // Add the Auth-Session-State AVP
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
286 {
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
287
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
288 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
289 CHECK_FCT( fd_msg_avp_hdr( avp, &avphdr ) );
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 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
292 CHECK_FCT( fd_msg_avp_setvalue( avp, avphdr->avp_value ) );
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
293 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
294 }
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
295
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
296 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
297 CHECK_FCT( fd_msg_avp_hdr( avp, &avphdr ) );
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
298
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
299
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
300
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
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
304
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
419
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
311 */
9cc48cd22e67 Finished RTR on Diameter-SIP
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
312 return 0;
409
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
"Welcome to our mercurial repository"