annotate extensions/app_sip/pushprofile.c @ 639:95a784729cac

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