⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jcallback.c

📁 libeXosip2-3.0.3.tar.gz
💻 C
📖 第 1 页 / 共 5 页
字号:
      /* find matching j_reg */      _eXosip_reg_find (&jreg, tr);      if (jreg != NULL)        {	  /* update registration interval */	  osip_header_t *exp;	  	  osip_message_header_get_byname (sip, "expires", 0, &exp);	  if (exp!=NULL && exp->hvalue!=NULL)	    {	      int val = atoi(exp->hvalue);	      if (val>0)		{		  jreg->r_reg_period=val+60;		}	    }          je = eXosip_event_init_for_reg (EXOSIP_REGISTRATION_SUCCESS, jreg, tr);          report_event (je, sip);          jreg->r_retry = 0;    /* reset value */        }      return;    }  if (jinfo == NULL)    return;  jd = jinfo->jd;  jc = jinfo->jc;#ifndef MINISIZE  jn = jinfo->jn;  js = jinfo->js;#endif  if (jd != NULL)    jd->d_retry = 0;            /* reset marker for authentication */  if (jc != NULL)    jc->c_retry = 0;            /* reset marker for authentication */#ifndef MINISIZE  if (js != NULL)    js->s_retry = 0;            /* reset marker for authentication */#endif  if (MSG_IS_RESPONSE_FOR (sip, "INVITE"))    {      cb_rcv2xx_4invite (tr, sip);    }  else if (MSG_IS_RESPONSE_FOR (sip, "BYE"))    {      if (jd != NULL)        jd->d_STATE = JD_TERMINATED;    }#ifndef MINISIZE  else if (MSG_IS_RESPONSE_FOR (sip, "SUBSCRIBE"))    {      cb_rcv2xx_4subscribe (tr, sip);    }  else if (MSG_IS_RESPONSE_FOR (sip, "NOTIFY") && jn!=NULL)    {      eXosip_event_t *je;      osip_header_t *sub_state;      je =        eXosip_event_init_for_notify (EXOSIP_NOTIFICATION_REQUESTFAILURE,                                         jn, jd, tr);      report_event (je, sip);      osip_message_header_get_byname (tr->orig_request, "subscription-state",                                      0, &sub_state);      if (sub_state == NULL || sub_state->hvalue == NULL)        {          /* UNCOMPLIANT UA without a subscription-state header */	}      else if (0 == osip_strncasecmp (sub_state->hvalue, "terminated", 10))        {          /* delete the dialog! */          if (jn != NULL)            {              REMOVE_ELEMENT (eXosip.j_notifies, jn);              eXosip_notify_free (jn);            }        }    }#endif  else if (jc != NULL)    {      report_call_event (EXOSIP_CALL_MESSAGE_ANSWERED, jc, jd, tr);      return;    }#ifndef MINISIZE  else if (jc == NULL && js == NULL && jn == NULL)    {      eXosip_event_t *je;      /* For all requests outside of calls */      je = eXosip_event_init_for_message (EXOSIP_MESSAGE_ANSWERED, tr);      report_event (je, sip);      return;    }#else  else if (jc == NULL)    {      eXosip_event_t *je;      /* For all requests outside of calls */      je = eXosip_event_init_for_message (EXOSIP_MESSAGE_ANSWERED, tr);      report_event (je, sip);      return;    }#endif}voideXosip_delete_early_dialog (eXosip_dialog_t * jd){  if (jd == NULL)               /* bug? */    return;  /* an early dialog was created, but the call is not established */  if (jd->d_dialog != NULL && jd->d_dialog->state == DIALOG_EARLY)    {      osip_dialog_free (jd->d_dialog);      jd->d_dialog = NULL;      eXosip_update ();         /* AMD 30/09/05 */      eXosip_dialog_set_state (jd, JD_TERMINATED);    }}static voidrcvregister_failure (osip_transaction_t * tr, osip_message_t * sip){  eXosip_event_t *je;  eXosip_reg_t *jreg = NULL;  /* find matching j_reg */  _eXosip_reg_find (&jreg, tr);  if (jreg != NULL)    {      je = eXosip_event_init_for_reg (EXOSIP_REGISTRATION_FAILURE, jreg, tr);      report_event (je, sip);    }}#ifndef MINISIZEstatic voidcb_rcv3xx (int type, osip_transaction_t * tr, osip_message_t * sip){  eXosip_dialog_t *jd;  eXosip_call_t *jc;  eXosip_subscribe_t *js;  eXosip_notify_t *jn;  jinfo_t *jinfo = (jinfo_t *) osip_transaction_get_your_instance (tr);  OSIP_TRACE (osip_trace              (__FILE__, __LINE__, OSIP_INFO3, NULL, "cb_rcv3xx (id=%i)\r\n",               tr->transactionid));  udp_tl_learn_port_from_via(sip);  if (MSG_IS_RESPONSE_FOR (sip, "PUBLISH"))    {      eXosip_event_t *je;      eXosip_pub_t *pub;      int i;      i = _eXosip_pub_update (&pub, tr, sip);      if (i != 0)        {          OSIP_TRACE (osip_trace                      (__FILE__, __LINE__, OSIP_ERROR, NULL,                       "cb_rcv3xx (id=%i) No publication to update\r\n",                       tr->transactionid));        }      je = eXosip_event_init_for_message (EXOSIP_MESSAGE_REDIRECTED, tr);      report_event (je, sip);      return;    }  else    if (MSG_IS_RESPONSE_FOR (sip, "REGISTER"))    {      rcvregister_failure (tr, sip);      return;    }  if (jinfo == NULL)    return;  jd = jinfo->jd;  jc = jinfo->jc;  jn = jinfo->jn;  js = jinfo->js;  if (MSG_IS_RESPONSE_FOR (sip, "INVITE"))    {      report_call_event (EXOSIP_CALL_REDIRECTED, jc, jd, tr);    }  else if (MSG_IS_RESPONSE_FOR (sip, "NOTIFY") && jn!=NULL)    {      eXosip_event_t *je;      je =        eXosip_event_init_for_notify (EXOSIP_NOTIFICATION_REQUESTFAILURE,                                         jn, jd, tr);      report_event (je, sip);    }  else if (MSG_IS_RESPONSE_FOR (sip, "SUBSCRIBE"))    {      eXosip_event_t *je;      je =        eXosip_event_init_for_subscribe (EXOSIP_SUBSCRIPTION_REDIRECTED, js,                                         jd, tr);      report_event (je, sip);    }  else if (jc != NULL)    {      report_call_event (EXOSIP_CALL_MESSAGE_REDIRECTED, jc, jd, tr);      return;    }  else if (jc == NULL && js == NULL && jn == NULL)    {      eXosip_event_t *je;      /* For all requests outside of calls */      je = eXosip_event_init_for_message (EXOSIP_MESSAGE_REDIRECTED, tr);      report_event (je, sip);      return;    }  if (jd == NULL)    return;  if (MSG_IS_RESPONSE_FOR (sip, "INVITE")      || MSG_IS_RESPONSE_FOR (sip, "SUBSCRIBE"))    {      eXosip_delete_early_dialog (jd);      if (jd->d_dialog == NULL)        jd->d_STATE = JD_REDIRECTED;    }}static voidcb_rcv4xx (int type, osip_transaction_t * tr, osip_message_t * sip){  eXosip_dialog_t *jd;  eXosip_call_t *jc;  eXosip_subscribe_t *js;  eXosip_notify_t *jn;  jinfo_t *jinfo = (jinfo_t *) osip_transaction_get_your_instance (tr);  OSIP_TRACE (osip_trace              (__FILE__, __LINE__, OSIP_INFO3, NULL, "cb_rcv4xx (id=%i)\r\n",               tr->transactionid));  udp_tl_learn_port_from_via(sip);  if (MSG_IS_RESPONSE_FOR (sip, "PUBLISH"))    {      eXosip_pub_t *pub;      eXosip_event_t *je;      int i;      i = _eXosip_pub_update (&pub, tr, sip);      if (i != 0)        {          OSIP_TRACE (osip_trace                      (__FILE__, __LINE__, OSIP_ERROR, NULL,                       "cb_rcv4xx (id=%i) No publication to update\r\n",                       tr->transactionid));        }      /* For all requests outside of calls */      je = eXosip_event_init_for_message (EXOSIP_MESSAGE_REQUESTFAILURE, tr);      report_event (je, sip);      return;    }  else    if (MSG_IS_RESPONSE_FOR (sip, "REGISTER"))    {      rcvregister_failure (tr, sip);      return;    }  if (jinfo == NULL)    return;  jd = jinfo->jd;  jc = jinfo->jc;  jn = jinfo->jn;  js = jinfo->js;  if (MSG_IS_RESPONSE_FOR (sip, "INVITE"))    {      report_call_event (EXOSIP_CALL_REQUESTFAILURE, jc, jd, tr);    }  else if (MSG_IS_RESPONSE_FOR (sip, "NOTIFY") && jn!=NULL)    {      eXosip_event_t *je;      je =        eXosip_event_init_for_notify (EXOSIP_NOTIFICATION_REQUESTFAILURE,                                         jn, jd, tr);      report_event (je, sip);    }  else if (MSG_IS_RESPONSE_FOR (sip, "SUBSCRIBE"))    {      eXosip_event_t *je;      je =        eXosip_event_init_for_subscribe (EXOSIP_SUBSCRIPTION_REQUESTFAILURE,                                         js, jd, tr);      report_event (je, sip);    }  else if (jc != NULL)    {      report_call_event (EXOSIP_CALL_MESSAGE_REQUESTFAILURE, jc, jd, tr);      return;    }  else if (jc == NULL && js == NULL && jn == NULL)    {      eXosip_event_t *je;      /* For all requests outside of calls */      je = eXosip_event_init_for_message (EXOSIP_MESSAGE_REQUESTFAILURE, tr);      report_event (je, sip);      return;    }  if (jc != NULL)    {      if (MSG_TEST_CODE (sip, 401) || MSG_TEST_CODE (sip, 407))        {          if (jc->response_auth != NULL)            osip_message_free (jc->response_auth);          osip_message_clone (sip, &jc->response_auth);        }    }  if (jd == NULL)    return;  if (MSG_IS_RESPONSE_FOR (sip, "INVITE")      || MSG_IS_RESPONSE_FOR (sip, "SUBSCRIBE"))    {      eXosip_delete_early_dialog (jd);      if (MSG_TEST_CODE (sip, 401) || MSG_TEST_CODE (sip, 407))        jd->d_STATE = JD_AUTH_REQUIRED;      else        jd->d_STATE = JD_CLIENTERROR;    }}static voidcb_rcv5xx (int type, osip_transaction_t * tr, osip_message_t * sip){  eXosip_dialog_t *jd;  eXosip_call_t *jc;  eXosip_subscribe_t *js;  eXosip_notify_t *jn;  jinfo_t *jinfo = (jinfo_t *) osip_transaction_get_your_instance (tr);  OSIP_TRACE (osip_trace              (__FILE__, __LINE__, OSIP_INFO3, NULL, "cb_rcv5xx (id=%i)\r\n",               tr->transactionid));  udp_tl_learn_port_from_via(sip);  if (MSG_IS_RESPONSE_FOR (sip, "PUBLISH"))    {      eXosip_pub_t *pub;      eXosip_event_t *je;      int i;      i = _eXosip_pub_update (&pub, tr, sip);      if (i != 0)        {          OSIP_TRACE (osip_trace                      (__FILE__, __LINE__, OSIP_ERROR, NULL,                       "cb_rcv3xx (id=%i) No publication to update\r\n",                       tr->transactionid));        }      je = eXosip_event_init_for_message (EXOSIP_MESSAGE_SERVERFAILURE, tr);      report_event (je, sip);      return;    }  else    if (MSG_IS_RESPONSE_FOR (sip, "REGISTER"))    {      rcvregister_failure (tr, sip);      return;    }  if (jinfo == NULL)    return;  jd = jinfo->jd;  jc = jinfo->jc;  jn = jinfo->jn;  js = jinfo->js;  if (MSG_IS_RESPONSE_FOR (sip, "INVITE"))    {      report_call_event (EXOSIP_CALL_SERVERFAILURE, jc, jd, tr);    }  else if (MSG_IS_RESPONSE_FOR (sip, "NOTIFY") && jn!=NULL)    {      eXosip_event_t *je;      je =        eXosip_event_init_for_notify (EXOSIP_NOTIFICATION_REQUESTFAILURE,                                         jn, jd, tr);      report_event (je, sip);    }  else if (MSG_IS_RESPONSE_FOR (sip, "SUBSCRIBE"))    {      eXosip_event_t *je;      je =        eXosip_event_init_for_subscribe (EXOSIP_SUBSCRIPTION_SERVERFAILURE,                                         js, jd, tr);      report_event (je, sip);    }  else if (jc != NULL)    {      report_call_event (EXOSIP_CALL_MESSAGE_SERVERFAILURE, jc, jd, tr);      return;    }  else if (jc == NULL && js == NULL && jn == NULL)    {      eXosip_event_t *je;      /* For all requests outside of calls */      je = eXosip_event_init_for_message (EXOSIP_MESSAGE_SERVERFAILURE, tr);      report_event (je, sip);      return;    }  if (jd == NULL)    return;  if (MSG_IS_RESPONSE_FOR (sip, "INVITE")      || MSG_IS_RESPONSE_FOR (sip, "SUBSCRIBE"))    {      eXosip_delete_early_dialog (jd);      jd->d_STATE = JD_SERVERERROR;    }}static voidcb_rcv6xx (int type, osip_transaction_t * tr, osip_message_t * sip){  eXosip_dialog_t *jd;  eXosip_call_t *jc;  eXosip_subscribe_t *js;  eXosip_notify_t *jn;  jinfo_t *jinfo = (jinfo_t *) osip_transaction_get_your_instance (tr);  udp_tl_learn_port_from_via(sip);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -