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

📄 fsm_uac4req.c

📁 一个有限状态机的实现源代码。C语言实现。
💻 C
📖 第 1 页 / 共 2 页
字号:
  else if (MSG_IS_STATUS_4XX(sipevent->sip))    {#ifndef EXTENDED_CALLBACKS  if (((osip_t *)transaction->config)->cb_rcv4xx != NULL)    ((osip_t *)transaction->config)->cb_rcv4xx(sipevent,transaction);#else  if (MSG_IS_RESPONSEFOR(sipevent->sip,"INVITE")) {    if (((osip_t *)transaction->config)->cb_rcvinvite4xx != NULL)      ((osip_t *)transaction->config)->cb_rcvinvite4xx(sipevent,transaction);  } else if (MSG_IS_RESPONSEFOR(sipevent->sip,"BYE")) {    if (((osip_t *)transaction->config)->cb_rcvbye4xx != NULL)      ((osip_t *)transaction->config)->cb_rcvbye4xx(sipevent,transaction);  } else if (MSG_IS_RESPONSEFOR(sipevent->sip,"CANCEL")) {    if (((osip_t *)transaction->config)->cb_rcvcancel4xx != NULL)      ((osip_t *)transaction->config)->cb_rcvcancel4xx(sipevent,transaction);  } else if (MSG_IS_RESPONSEFOR(sipevent->sip,"INFO")) {    if (((osip_t *)transaction->config)->cb_rcvinfo4xx != NULL)      ((osip_t *)transaction->config)->cb_rcvinfo4xx(sipevent,transaction);  } else if (MSG_IS_RESPONSEFOR(sipevent->sip,"OPTIONS")) {    if (((osip_t *)transaction->config)->cb_rcvoptions4xx != NULL)      ((osip_t *)transaction->config)->cb_rcvoptions4xx(sipevent,transaction);  } else if (MSG_IS_RESPONSEFOR(sipevent->sip,"REGISTER")) {    if (((osip_t *)transaction->config)->cb_rcvregister4xx != NULL)      ((osip_t *)transaction->config)->cb_rcvregister4xx(sipevent,transaction);  } else if (MSG_IS_RESPONSEFOR(sipevent->sip,"PRACK")) {    if (((osip_t *)transaction->config)->cb_rcvprack4xx != NULL)      ((osip_t *)transaction->config)->cb_rcvprack4xx(sipevent,transaction);  } else {    if (((osip_t *)transaction->config)->cb_rcvunkrequest4xx != NULL)      ((osip_t *)transaction->config)->cb_rcvunkrequest4xx(sipevent,transaction);  }#endif    }  else if (MSG_IS_STATUS_5XX(sipevent->sip))    {#ifndef EXTENDED_CALLBACKS  if (((osip_t *)transaction->config)->cb_rcv5xx != NULL)    ((osip_t *)transaction->config)->cb_rcv5xx(sipevent,transaction);#else  if (MSG_IS_RESPONSEFOR(sipevent->sip,"INVITE")) {    if (((osip_t *)transaction->config)->cb_rcvinvite5xx != NULL)      ((osip_t *)transaction->config)->cb_rcvinvite5xx(sipevent,transaction);  } else if (MSG_IS_RESPONSEFOR(sipevent->sip,"BYE")) {    if (((osip_t *)transaction->config)->cb_rcvbye5xx != NULL)      ((osip_t *)transaction->config)->cb_rcvbye5xx(sipevent,transaction);  } else if (MSG_IS_RESPONSEFOR(sipevent->sip,"CANCEL")) {    if (((osip_t *)transaction->config)->cb_rcvcancel5xx != NULL)      ((osip_t *)transaction->config)->cb_rcvcancel5xx(sipevent,transaction);  } else if (MSG_IS_RESPONSEFOR(sipevent->sip,"INFO")) {    if (((osip_t *)transaction->config)->cb_rcvinfo5xx != NULL)      ((osip_t *)transaction->config)->cb_rcvinfo5xx(sipevent,transaction);  } else if (MSG_IS_RESPONSEFOR(sipevent->sip,"OPTIONS")) {    if (((osip_t *)transaction->config)->cb_rcvoptions5xx != NULL)      ((osip_t *)transaction->config)->cb_rcvoptions5xx(sipevent,transaction);  } else if (MSG_IS_RESPONSEFOR(sipevent->sip,"REGISTER")) {    if (((osip_t *)transaction->config)->cb_rcvregister5xx != NULL)      ((osip_t *)transaction->config)->cb_rcvregister5xx(sipevent,transaction);  } else if (MSG_IS_RESPONSEFOR(sipevent->sip,"PRACK")) {    if (((osip_t *)transaction->config)->cb_rcvprack5xx != NULL)      ((osip_t *)transaction->config)->cb_rcvprack5xx(sipevent,transaction);  } else {    if (((osip_t *)transaction->config)->cb_rcvunkrequest5xx != NULL)      ((osip_t *)transaction->config)->cb_rcvunkrequest5xx(sipevent,transaction);  }#endif    }  else if (MSG_IS_STATUS_6XX(sipevent->sip))    {#ifndef EXTENDED_CALLBACKS  if (((osip_t *)transaction->config)->cb_rcv6xx != NULL)    ((osip_t *)transaction->config)->cb_rcv6xx(sipevent,transaction);#else  if (MSG_IS_RESPONSEFOR(sipevent->sip,"INVITE")) {    if (((osip_t *)transaction->config)->cb_rcvinvite6xx != NULL)      ((osip_t *)transaction->config)->cb_rcvinvite6xx(sipevent,transaction);  } else if (MSG_IS_RESPONSEFOR(sipevent->sip,"BYE")) {    if (((osip_t *)transaction->config)->cb_rcvbye6xx != NULL)      ((osip_t *)transaction->config)->cb_rcvbye6xx(sipevent,transaction);  } else if (MSG_IS_RESPONSEFOR(sipevent->sip,"CANCEL")) {    if (((osip_t *)transaction->config)->cb_rcvcancel6xx != NULL)      ((osip_t *)transaction->config)->cb_rcvcancel6xx(sipevent,transaction);  } else if (MSG_IS_RESPONSEFOR(sipevent->sip,"INFO")) {    if (((osip_t *)transaction->config)->cb_rcvinfo6xx != NULL)      ((osip_t *)transaction->config)->cb_rcvinfo6xx(sipevent,transaction);  } else if (MSG_IS_RESPONSEFOR(sipevent->sip,"OPTIONS")) {    if (((osip_t *)transaction->config)->cb_rcvoptions6xx != NULL)      ((osip_t *)transaction->config)->cb_rcvoptions6xx(sipevent,transaction);  } else if (MSG_IS_RESPONSEFOR(sipevent->sip,"REGISTER")) {    if (((osip_t *)transaction->config)->cb_rcvregister6xx != NULL)      ((osip_t *)transaction->config)->cb_rcvregister6xx(sipevent,transaction);  } else if (MSG_IS_RESPONSEFOR(sipevent->sip,"PRACK")) {    if (((osip_t *)transaction->config)->cb_rcvprack6xx != NULL)      ((osip_t *)transaction->config)->cb_rcvprack6xx(sipevent,transaction);  } else {    if (((osip_t *)transaction->config)->cb_rcvunkrequest6xx != NULL)      ((osip_t *)transaction->config)->cb_rcvunkrequest6xx(sipevent,transaction);  }#endif    }    return ; /* OK */}voidua_sendrequest(sipevent_t *sipevent,transaction_t *transaction){  int i;  i = udp_send_request(sipevent->sip,		       transaction->proxy);  if (i==-1)    {       transaction->state=NETWORK_ERROR;      /* invoke the right callback! */      /* err must be tested.... NOT USABLE	 if (code==SIP_ECONNREFUSED)	 {	 if (((osip_t *)transaction->config)->cb_connection_refused != NULL)	 ((osip_t *)transaction->config)->cb_connection_refused(transaction);	 }	 else */	{	  if (((osip_t *)transaction->config)->cb_network_error != NULL)	    ((osip_t *)transaction->config)->cb_network_error(transaction);	}            msg_free(sipevent->sip);      sfree(sipevent->sip);      return ;    }    transaction->lastrequest = sipevent->sip;  transaction->state = CALLING;  /* invoke the right callback! */  if (MSG_IS_INVITE(sipevent->sip))    {      if (((osip_t *)transaction->config)->cb_sndinvite != NULL)	((osip_t *)transaction->config)->cb_sndinvite(sipevent,transaction);    }  else if (MSG_IS_BYE(sipevent->sip))    {      if (((osip_t *)transaction->config)->cb_sndbye != NULL)	((osip_t *)transaction->config)->cb_sndbye(sipevent,transaction);    }  else if (MSG_IS_REGISTER(sipevent->sip))    {      if (((osip_t *)transaction->config)->cb_sndregister != NULL)	((osip_t *)transaction->config)->cb_sndregister(sipevent,transaction);    }  else if (MSG_IS_CANCEL(sipevent->sip))    {      if (((osip_t *)transaction->config)->cb_sndcancel != NULL)	((osip_t *)transaction->config)->cb_sndcancel(sipevent,transaction);    }  else if (MSG_IS_INFO(sipevent->sip))    {      if (((osip_t *)transaction->config)->cb_sndinfo != NULL)	((osip_t *)transaction->config)->cb_sndinfo(sipevent,transaction);    }  else if (MSG_IS_OPTIONS(sipevent->sip))    {      if (((osip_t *)transaction->config)->cb_sndoptions != NULL)	((osip_t *)transaction->config)->cb_sndoptions(sipevent,transaction);    }  else if (MSG_IS_PRACK(sipevent->sip))    {      if (((osip_t *)transaction->config)->cb_sndprack != NULL)	((osip_t *)transaction->config)->cb_sndprack(sipevent,transaction);    }  else    {      if (((osip_t *)transaction->config)->cb_sndunkrequest != NULL)	((osip_t *)transaction->config)->cb_sndunkrequest(sipevent,transaction);    }  return;}voidua_retransmitrequest(sipevent_t *sipevent,transaction_t *transaction){  int i;  i =   udp_send_request(transaction->lastrequest,			 transaction->proxy);  if (i==-1)    {      transaction->state=NETWORK_ERROR;      /*	if (code==SIP_ECONNREFUSED)	{	if (((osip_t *)transaction->config)->cb_connection_refused != NULL)	((osip_t *)transaction->config)->cb_connection_refused(transaction);	}	else	{	TRACE(trace(__FILE__,__LINE__,TRACE_LEVEL1,NULL,"retransmission of request failed.\n")); */      if (((osip_t *)transaction->config)->cb_network_error != NULL)	((osip_t *)transaction->config)->cb_network_error(transaction);	/*} */      return ;    }  /* invoke the right callback! */  if (((osip_t *)transaction->config)->cb_sndreq_retransmission != NULL)    ((osip_t *)transaction->config)->cb_sndreq_retransmission(transaction);  return; /* OK */}voidua_rcvresponse(sipevent_t *sipevent,transaction_t *transaction){  if (transaction->lastresponse!=NULL)    {    msg_free(transaction->lastresponse);    sfree(transaction->lastresponse);    } /* else this is the first response received */  transaction->lastresponse = sipevent->sip;  DEBUG(msg_logresponse(transaction->lastresponse,"RCV %s %s (%s) f:%s t:%s cseq:%s callid:%s\n"));  return ; /* OK */}

⌨️ 快捷键说明

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