jcallback.c

来自「mediastreamer2是开源的网络传输媒体流的库」· C语言 代码 · 共 2,026 行 · 第 1/5 页

C
2,026
字号
#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_ANSWERED, 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_REDIRECTED, 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 (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_SERVERFAILURE,                                      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);  OSIP_TRACE (osip_trace              (__FILE__, __LINE__, OSIP_INFO3, NULL, "cb_rcv6xx (id=%i)\r\n",               tr->transactionid));  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_rcv6xx (id=%i) No publication to update\r\n",                       tr->transactionid));        }      je = eXosip_event_init_for_message (EXOSIP_MESSAGE_GLOBALFAILURE, 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"))

⌨️ 快捷键说明

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