@@ -34,11 +34,14 @@ struct dlg_binds srec_dlg;
34
34
static str srec_dlg_name = str_init ("siprecX_ctx" );
35
35
36
36
static struct src_sess * src_create_session (rtp_ctx rtp , str * m_ip , str * grp ,
37
- const struct socket_info * si , int version , time_t ts , str * hdrs , siprec_uuid * uuid ,
37
+ const struct socket_info * si , int version , time_t ts , str * hdrs ,
38
+ str * from_uri , str * to_uri , siprec_uuid * uuid ,
38
39
str * group_custom_extension , str * session_custom_extension )
39
40
{
41
+ char * p ;
40
42
struct src_sess * ss = shm_malloc (sizeof * ss + (m_ip ? m_ip -> len : 0 ) +
41
43
(grp ? grp -> len : 0 ) + (hdrs ? hdrs -> len : 0 ) +
44
+ (from_uri ? from_uri -> len : 0 ) + (to_uri ? to_uri -> len : 0 ) +
42
45
(group_custom_extension ? group_custom_extension -> len : 0 ) +
43
46
(session_custom_extension ? session_custom_extension -> len : 0 ));
44
47
if (!ss ) {
@@ -49,42 +52,60 @@ static struct src_sess *src_create_session(rtp_ctx rtp, str *m_ip, str *grp,
49
52
ss -> socket = si ;
50
53
ss -> rtp = rtp ;
51
54
55
+ p = (char * )(ss + 1 );
52
56
if (m_ip ) {
53
- ss -> media .s = ( char * )( ss + 1 ) ;
57
+ ss -> media .s = p ;
54
58
memcpy (ss -> media .s , m_ip -> s , m_ip -> len );
55
59
ss -> media .len = m_ip -> len ;
60
+ p += m_ip -> len ;
56
61
} else {
57
62
ss -> media .s = NULL ;
58
63
ss -> media .len = 0 ;
59
64
}
60
65
61
66
if (grp && grp -> len ) {
62
- ss -> group .s = ( char * )( ss + 1 ) + ss -> media . len ;
67
+ ss -> group .s = p ;
63
68
memcpy (ss -> group .s , grp -> s , grp -> len );
64
69
ss -> group .len = grp -> len ;
70
+ p += grp -> len ;
65
71
}
66
72
67
73
if (hdrs && hdrs -> len ) {
68
- ss -> headers .s = (char * )(ss + 1 ) + ss -> media .len +
69
- ss -> group .len ;
74
+ ss -> headers .s = p ;
70
75
memcpy (ss -> headers .s , hdrs -> s , hdrs -> len );
71
76
ss -> headers .len = hdrs -> len ;
77
+ p += hdrs -> len ;
72
78
}
73
79
74
80
if (grp && grp -> len && group_custom_extension && group_custom_extension -> len ) {
75
- ss -> group_custom_extension .s = (char * )(ss + 1 ) + ss -> media .len +
76
- ss -> group .len + ss -> headers .len ;
81
+ ss -> group_custom_extension .s = p ;
77
82
memcpy (ss -> group_custom_extension .s , group_custom_extension -> s , group_custom_extension -> len );
78
83
ss -> group_custom_extension .len = group_custom_extension -> len ;
84
+ p += group_custom_extension -> len ;
79
85
}
80
86
81
87
if (session_custom_extension && session_custom_extension -> len ) {
82
- ss -> session_custom_extension .s = (char * )(ss + 1 ) + ss -> media .len +
83
- ss -> group .len + ss -> headers .len + ss -> group_custom_extension .len ;
88
+ ss -> session_custom_extension .s = p ;
84
89
memcpy (ss -> session_custom_extension .s , session_custom_extension -> s , session_custom_extension -> len );
85
90
ss -> session_custom_extension .len = session_custom_extension -> len ;
91
+ p += session_custom_extension -> len ;
86
92
}
87
93
94
+ if (from_uri && from_uri -> len ) {
95
+ ss -> from_uri .s = p ;
96
+ memcpy (ss -> from_uri .s , from_uri -> s , from_uri -> len );
97
+ ss -> from_uri .len = from_uri -> len ;
98
+ p += from_uri -> len ;
99
+ }
100
+
101
+ if (to_uri && to_uri -> len ) {
102
+ ss -> to_uri .s = p ;
103
+ memcpy (ss -> to_uri .s , to_uri -> s , to_uri -> len );
104
+ ss -> to_uri .len = to_uri -> len ;
105
+ p += to_uri -> len ;
106
+ }
107
+
108
+
88
109
memcpy (ss -> uuid , uuid , sizeof (* uuid ));
89
110
ss -> participants_no = 0 ;
90
111
ss -> ts = ts ;
@@ -116,6 +137,8 @@ struct src_sess *src_new_session(str *srs, rtp_ctx rtp,
116
137
(var && var -> group .len )?& var -> group :NULL ,
117
138
(var ?var -> si :NULL ), 0 , time (NULL ),
118
139
(var && var -> headers .len )?& var -> headers :NULL ,
140
+ (var && var -> from_uri .len )?& var -> from_uri :NULL ,
141
+ (var && var -> to_uri .len )?& var -> to_uri :NULL ,
119
142
& uuid ,
120
143
(var && var -> group_custom_extension .len )?& var -> group_custom_extension :NULL ,
121
144
(var && var -> session_custom_extension .len )?& var -> session_custom_extension :NULL );
@@ -341,7 +364,8 @@ static int srec_pop_sess(struct dlg_cell *dlg, bin_packet_t *packet)
341
364
342
365
sess = src_create_session (rtp ,
343
366
(media_ip .len ? & media_ip : NULL ), (group .len ? & group : NULL ),
344
- si , version , ts , NULL /* we do not replicate headers */ , & uuid ,
367
+ si , version , ts , NULL /* we do not replicate headers */ ,
368
+ NULL , NULL /* we already know from and to */ , & uuid ,
345
369
(group_custom_extension .len ? & group_custom_extension : NULL ),
346
370
(session_custom_extension .len ? & session_custom_extension : NULL ));
347
371
if (!sess ) {
0 commit comments