MCPcopy Create free account
hub / github.com/OpenSIPS/opensips / ruri_add_param

Function ruri_add_param

modules/sipmsgops/uri.c:184–285  ·  view source on GitHub ↗

* Adds a new parameter to Request URI */

Source from the content-addressed store, hash-verified

182 * Adds a new parameter to Request URI
183 */
184int ruri_add_param(struct sip_msg* _msg, str* _param)
185{
186 str param = *_param, *cur_uri, new_uri;
187 struct sip_uri *parsed_uri;
188 char *at;
189
190 if (param.len == 0)
191 return 1;
192
193 if (parse_sip_msg_uri(_msg) < 0) {
194 LM_ERR("ruri parsing failed\n");
195 return -1;
196 }
197
198 parsed_uri = &(_msg->parsed_uri);
199
200 /* if current ruri has no headers, pad param at the end */
201 if (parsed_uri->headers.len == 0) {
202 cur_uri = GET_RURI(_msg);
203 new_uri.len = cur_uri->len + param.len + 1;
204 if (new_uri.len > MAX_URI_SIZE) {
205 LM_ERR("new ruri too long\n");
206 return -1;
207 }
208 new_uri.s = pkg_malloc(new_uri.len);
209 if (new_uri.s == 0) {
210 LM_ERR("Memory allocation failure\n");
211 return -1;
212 }
213 memcpy(new_uri.s, cur_uri->s, cur_uri->len);
214 *(new_uri.s + cur_uri->len) = ';';
215 memcpy(new_uri.s + cur_uri->len + 1, param.s, param.len);
216 if (set_ruri(_msg, &new_uri ) == 1) {
217 goto ok;
218 } else {
219 goto nok;
220 }
221 }
222
223 /* otherwise take the long path */
224 new_uri.len = 4 +
225 (parsed_uri->user.len ? parsed_uri->user.len + 1 : 0) +
226 (parsed_uri->passwd.len ? parsed_uri->passwd.len + 1 : 0) +
227 parsed_uri->host.len +
228 (parsed_uri->port.len ? parsed_uri->port.len + 1 : 0) +
229 parsed_uri->params.len + param.len + 1 +
230 parsed_uri->headers.len + 1;
231 if (new_uri.len > MAX_URI_SIZE) {
232 LM_ERR("new ruri too long\n");
233 return -1;
234 }
235
236 new_uri.s = pkg_malloc(new_uri.len);
237 if (new_uri.s == 0) {
238 LM_ERR("no more pkg memory\n");
239 return -1;
240 }
241

Callers

nothing calls this directly

Calls 2

parse_sip_msg_uriFunction · 0.85
set_ruriFunction · 0.85

Tested by

no test coverage detected