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

Function dm_send_request_async_reply

modules/aaa_diameter/aaa_diameter.c:494–527  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

492}
493
494static int dm_send_request_async_reply(int fd,
495 struct sip_msg *msg, void *param)
496{
497 int ret;
498 unsigned long r;
499 char *rpl_avps = NULL;
500 pv_value_t val = {STR_NULL, 0, PV_VAL_NULL};
501 struct dm_async_msg *amsg = (struct dm_async_msg *)param;
502
503 do {
504 ret = read(fd, &r, sizeof r);
505 } while(ret < 0 && (errno == EINTR || errno == EAGAIN));
506 async_status = ASYNC_DONE_CLOSE_FD;
507 if (ret < 0) {
508 LM_ERR("could not resume async route!\n");
509 goto error;
510 }
511 ret = _dm_get_message_response(amsg->cond, (amsg->ret?&rpl_avps:NULL));
512 if (ret == 0)
513 ret = 1;
514 else
515 LM_ERR("Diameter request failed\n");
516 if (ret > 0 && rpl_avps) {
517 val.rs.s = rpl_avps;
518 val.rs.len = strlen(rpl_avps);
519 val.flags = PV_VAL_STR;
520 }
521error:
522 if (amsg->ret && pv_set_value(msg, amsg->ret, 0, &val) != 0)
523 LM_ERR("failed to set output rpl_avps pv to NULL\n");
524 _dm_release_message_response(amsg->cond, rpl_avps);
525 dm_free_sync_msg(amsg);
526 return ret;
527}
528
529static int dm_send_request_async_tout(int fd,
530 struct sip_msg *msg, void *param)

Callers

nothing calls this directly

Calls 4

_dm_get_message_responseFunction · 0.85
pv_set_valueFunction · 0.85
dm_free_sync_msgFunction · 0.85

Tested by

no test coverage detected