extern int _eXosip_answer_refer_123456(eXosip_call_t *jc, eXosip_dialog_t *jd, int code) { osip_event_t *evt_answer; osip_transaction_t *tr; osip_message_t *response; int i; tr = eXosip_find_last_inc_refer(jc, jd); if (tr==NULL) { OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_ERROR, NULL, "eXosip: cannot find transaction to answer")); return -1; } if (jd!=NULL) { i = _eXosip_build_response_default(&response, jd->d_dialog, code, tr->orig_request); } else { i = _eXosip_build_response_default(&response, NULL, code, tr->orig_request); } if (i!=0) { OSIP_TRACE(osip_trace(__FILE__,__LINE__,OSIP_INFO1,NULL,"ERROR: Could not create response for REFER\n")); return -1; } if ( ( code >= 200 ) && ( code <= 299) ) complete_answer_that_establish_a_dialog(response, tr->orig_request); /* Yet another eeek */ /* if (300<=code<=399) */ /* { */ /* /\* Should add contact fields *\/ */ /* /\* ... *\/ */ /* } */ osip_message_set_content_length(response, "0"); /* send message to transaction layer */ evt_answer = osip_new_outgoing_sipmessage(response); evt_answer->transactionid = tr->transactionid; osip_transaction_add_event(tr, evt_answer); __eXosip_wakeup(); return 0; }
osip_transaction_t * eXosip_find_last_refer(eXosip_call_t *jc, eXosip_dialog_t *jd ) { osip_transaction_t *inc_tr; osip_transaction_t *out_tr; inc_tr = eXosip_find_last_inc_refer(jc, jd); out_tr = eXosip_find_last_out_refer(jc, jd); if (inc_tr==NULL) return out_tr; if (out_tr==NULL) return inc_tr; if (inc_tr->birth_time>out_tr->birth_time) return inc_tr; return out_tr; }