Esempio n. 1
0
static void notify_last_response(SalOp *op, SalOp *newcall){
	belle_sip_client_transaction_t *tr=newcall->pending_client_trans;
	belle_sip_response_t *resp=NULL;
	if (tr){
		resp=belle_sip_transaction_get_response((belle_sip_transaction_t*)tr);
	}
	if (resp==NULL){
		send_notify_for_refer(op, 100, "Trying");
	}else{
		send_notify_for_refer(op, belle_sip_response_get_status_code(resp), belle_sip_response_get_reason_phrase(resp));
	}
}
Esempio n. 2
0
int sal_call_notify_refer_state(SalOp *op, SalOp *newcall){
	belle_sip_dialog_state_t state;
	if(belle_sip_dialog_get_state(op->dialog) == BELLE_SIP_DIALOG_TERMINATED){
		return 0;
	}
	state = newcall->dialog?belle_sip_dialog_get_state(newcall->dialog):BELLE_SIP_DIALOG_NULL;
	switch(state) {
		case BELLE_SIP_DIALOG_EARLY:
			send_notify_for_refer(op, 100, "Trying");
			break;
		case BELLE_SIP_DIALOG_CONFIRMED:
			send_notify_for_refer(op, 200, "Ok");
			break;
		case BELLE_SIP_DIALOG_TERMINATED:
		case BELLE_SIP_DIALOG_NULL:
			notify_last_response(op,newcall);
			break;
	}
	return 0;
}
int sal_call_notify_refer_state(SalOp *op, SalOp *newcall){
	if(belle_sip_dialog_get_state(op->dialog) == BELLE_SIP_DIALOG_TERMINATED){
		return 0;
	}
	belle_sip_dialog_state_t state=newcall->dialog?belle_sip_dialog_get_state(newcall->dialog):BELLE_SIP_DIALOG_NULL;
	switch(state) {
	case BELLE_SIP_DIALOG_NULL:
	case BELLE_SIP_DIALOG_EARLY:
		send_notify_for_refer(op,"SIP/2.0 100 Trying\r\n");
		break;
	case BELLE_SIP_DIALOG_CONFIRMED:
		if(send_notify_for_refer(op,"SIP/2.0 200 Ok\r\n")) {
			/* we need previous notify transaction to complete, so buffer the request for later*/
			/*op->sipfrag_pending="SIP/2.0 200 Ok\r\n";*/
			ms_error("Cannot notify 200 ok frag to [%p] for new  op [%p]",op,newcall);
		}
		break;
	default:
		break;
	}
	return 0;
}