/* * Logic necessary to forward request to strict routers * * Returns 0 on success, negative number on an error */ static inline int handle_sr(struct sip_msg* _m, struct hdr_field* _hdr, rr_t* _r) { str* uri; char* rem_off; int rem_len; uri = &_r->nameaddr.uri; /* Next hop is strict router, save R-URI here */ if (save_ruri(_m) < 0) { LOG(L_ERR, "handle_sr: Error while saving Request-URI\n"); return -1; } /* Put the first Route in Request-URI */ if (rewrite_uri(_m, uri) < 0) { LOG(L_ERR, "handle_sr: Error while rewriting request URI\n"); return -2; } if (!_r->next) { rem_off = _hdr->name.s; rem_len = _hdr->len; } else { rem_off = _hdr->body.s; rem_len = _r->next->nameaddr.name.s - _hdr->body.s; } if (!del_lump(_m, rem_off - _m->buf, rem_len, 0)) { LOG(L_ERR, "handle_sr: Can't remove Route HF\n"); return -9; } return 0; }
/* * Logic necessary to forward request to strict routers * * Returns 0 on success, negative number on an error */ static inline int handle_sr(struct sip_msg* _m, struct hdr_field* _hdr, rr_t* _r) { str uri; char* rem_off; int rem_len; /* Next hop is strict router, save R-URI here */ if (_r->next) { if (save_ruri(_m) < 0) { LM_ERR("failed to save Request-URI\n"); return -1; } } /* Put the first Route in Request-URI */ uri = _r->nameaddr.uri; if(get_maddr_uri(&uri, 0)!=0) { LM_ERR("failed to check maddr\n"); return RR_ERROR; } if (set_ruri(_m, &uri) < 0) { LM_ERR("failed to rewrite request URI\n"); return -2; } if (!_r->next) { rem_off = _hdr->name.s; rem_len = _hdr->len; } else { rem_off = _hdr->body.s; rem_len = _r->next->nameaddr.name.s - _hdr->body.s; } if (!del_lump(_m, rem_off - _m->buf, rem_len, 0)) { LM_ERR("failed to remove Route HF\n"); return -9; } _r->deleted = 1; return 0; }