// Called during a dialog for start and update requests // // Return codes: // 1 - Ok // -1 - Session not found // -5 - Internal error (message parsing, communication, ...) static int call_control_start(struct sip_msg *msg, struct dlg_cell *dlg) { CallInfo *call; char *message, *result; call = get_call_info(msg, CAStart); if (!call) { LOG(L_ERR, "can't retrieve call info\n"); return -5; } call->dialog_id.h_entry = dlg->h_entry; call->dialog_id.h_id = dlg->h_id; if (!cc_start_avps) message = make_default_request(call); else message = make_custom_request(msg, call); if (!message) return -5; result = send_command(message); if (result==NULL) { return -5; } else if (strcasecmp(result, "Ok\r\n")==0) { return 1; } else if (strcasecmp(result, "Not found\r\n")==0) { return -1; } else { return -5; } }
// Called during a dialog ending to stop callcontrol // // Return codes: // 1 - Ok // -1 - Session not found // -5 - Internal error (message parsing, communication, ...) static int call_control_stop(struct sip_msg *msg, str callid) { CallInfo call; char *message, *result; call.action = CAStop; call.callid = callid; if (!cc_stop_avps) message = make_default_request(&call); else message = make_custom_request(msg, &call); if (!message) return -5; result = send_command(message); if (result==NULL) { return -5; } else if (strcasecmp(result, "Ok\r\n")==0) { return 1; } else if (strcasecmp(result, "Not found\r\n")==0) { return -1; } else { return -5; } }
// Return codes: // 2 - No limit // 1 - Limited // -1 - No credit // -2 - Locked // -3 - Duplicated callid // -4 - Call limit reached // -5 - Internal error (message parsing, communication, ...) static int call_control_initialize(struct sip_msg *msg) { CallInfo *call; char *message, *result = NULL; call = get_call_info(msg, CAInitialize); if (!call) { LM_ERR("can't retrieve call info\n"); return -5; } if (!init_avps) message = make_default_request(call); else message = make_custom_request(msg, call); if (!message) return -5; result = send_command(message); if (result==NULL) { return -5; } else if (strcasecmp(result, "No limit\r\n")==0) { return 2; } else if (strcasecmp(result, "Limited\r\n")==0) { return 1; } else if (strcasecmp(result, "No credit\r\n")==0) { return -1; } else if (strcasecmp(result, "Locked\r\n")==0) { return -2; } else if (strcasecmp(result, "Duplicated callid\r\n")==0) { return -3; } else if (strcasecmp(result, "Call limit reached\r\n")==0) { return -4; } else { return -5; } }