示例#1
0
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;
}
示例#2
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;
}