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 + -
显示快捷键?