亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? osip.c

?? sip voip codes on linux 2.4.20
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*  The oSIP library implements the Session Initiation Protocol (SIP -rfc3261-)  Copyright (C) 2001,2002,2003  Aymeric MOIZARD jack@atosc.org    This library is free software; you can redistribute it and/or  modify it under the terms of the GNU Lesser General Public  License as published by the Free Software Foundation; either  version 2.1 of the License, or (at your option) any later version.    This library is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  Lesser General Public License for more details.    You should have received a copy of the GNU Lesser General Public  License along with this library; if not, write to the Free Software  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/#include <osip/port.h>#include <osip/osip.h>#include "fsm.h"#ifdef OSIP_MTstatic smutex_t *ict_fastmutex;static smutex_t *ist_fastmutex;static smutex_t *nict_fastmutex;static smutex_t *nist_fastmutex;#endifintosip_global_init (){  /* load the fsm configuration */  ict_load_fsm ();  ist_load_fsm ();  nict_load_fsm ();  nist_load_fsm ();  /* load the parser configuration */  parser_init ();  /* give a seed for all calls to rand() */  srand (time (NULL));  init_random_number ();#ifdef OSIP_MT  ict_fastmutex = smutex_init ();  ist_fastmutex = smutex_init ();  nict_fastmutex = smutex_init ();  nist_fastmutex = smutex_init ();#endif  return 0;}voidosip_global_free (){  ict_unload_fsm ();  ist_unload_fsm ();  nict_unload_fsm ();  nist_unload_fsm ();#ifdef OSIP_MT  smutex_destroy (ict_fastmutex);  sfree (ict_fastmutex);  smutex_destroy (ist_fastmutex);  sfree (ist_fastmutex);  smutex_destroy (nict_fastmutex);  sfree (nict_fastmutex);  smutex_destroy (nist_fastmutex);  sfree (nist_fastmutex);#endif}intosip_ict_lock (osip_t * osip){#ifdef OSIP_MT  return smutex_lock (ict_fastmutex);#else  return 0;#endif}intosip_ict_unlock (osip_t * osip){#ifdef OSIP_MT  return smutex_unlock (ict_fastmutex);#else  return 0;#endif}intosip_ist_lock (osip_t * osip){#ifdef OSIP_MT  return smutex_lock (ist_fastmutex);#else  return 0;#endif}intosip_ist_unlock (osip_t * osip){#ifdef OSIP_MT  return smutex_unlock (ist_fastmutex);#else  return 0;#endif}intosip_nict_lock (osip_t * osip){#ifdef OSIP_MT  return smutex_lock (nict_fastmutex);#else  return 0;#endif}intosip_nict_unlock (osip_t * osip){#ifdef OSIP_MT  return smutex_unlock (nict_fastmutex);#else  return 0;#endif}intosip_nist_lock (osip_t * osip){#ifdef OSIP_MT  return smutex_lock (nist_fastmutex);#else  return 0;#endif}intosip_nist_unlock (osip_t * osip){#ifdef OSIP_MT  return smutex_unlock (nist_fastmutex);#else  return 0;#endif}intosip_add_ict (osip_t * osip, transaction_t * ict){#ifdef OSIP_MT  smutex_lock (ict_fastmutex);#endif  list_add (osip->ict_transactions, ict, -1);#ifdef OSIP_MT  smutex_unlock (ict_fastmutex);#endif  return 0;}intosip_add_ist (osip_t * osip, transaction_t * ist){#ifdef OSIP_MT  smutex_lock (ist_fastmutex);#endif  list_add (osip->ist_transactions, ist, -1);#ifdef OSIP_MT  smutex_unlock (ist_fastmutex);#endif  return 0;}intosip_add_nict (osip_t * osip, transaction_t * nict){#ifdef OSIP_MT  smutex_lock (nict_fastmutex);#endif  list_add (osip->nict_transactions, nict, -1);#ifdef OSIP_MT  smutex_unlock (nict_fastmutex);#endif  return 0;}intosip_add_nist (osip_t * osip, transaction_t * nist){#ifdef OSIP_MT  smutex_lock (nist_fastmutex);#endif  list_add (osip->nist_transactions, nist, -1);#ifdef OSIP_MT  smutex_unlock (nist_fastmutex);#endif  return 0;}intosip_remove_ict (osip_t * osip, transaction_t * ict){  int pos = 0;  transaction_t *tmp;#ifdef OSIP_MT  smutex_lock (ict_fastmutex);#endif  while (!list_eol (osip->ict_transactions, pos))    {      tmp = list_get (osip->ict_transactions, pos);      if (tmp->transactionid == ict->transactionid)	{	  list_remove (osip->ict_transactions, pos);#ifdef OSIP_MT	  smutex_unlock (ict_fastmutex);#endif	  return 0;	}      pos++;    }#ifdef OSIP_MT  smutex_unlock (ict_fastmutex);#endif  return -1;}intosip_remove_ist (osip_t * osip, transaction_t * ist){  int pos = 0;  transaction_t *tmp;#ifdef OSIP_MT  smutex_lock (ist_fastmutex);#endif  while (!list_eol (osip->ist_transactions, pos))    {      tmp = list_get (osip->ist_transactions, pos);      if (tmp->transactionid == ist->transactionid)	{	  list_remove (osip->ist_transactions, pos);#ifdef OSIP_MT	  smutex_unlock (ist_fastmutex);#endif	  return 0;	}      pos++;    }#ifdef OSIP_MT  smutex_unlock (ist_fastmutex);#endif  return -1;}intosip_remove_nict (osip_t * osip, transaction_t * nict){  int pos = 0;  transaction_t *tmp;#ifdef OSIP_MT  smutex_lock (nict_fastmutex);#endif  while (!list_eol (osip->nict_transactions, pos))    {      tmp = list_get (osip->nict_transactions, pos);      if (tmp->transactionid == nict->transactionid)	{	  list_remove (osip->nict_transactions, pos);#ifdef OSIP_MT	  smutex_unlock (nict_fastmutex);#endif	  return 0;	}      pos++;    }#ifdef OSIP_MT  smutex_unlock (nict_fastmutex);#endif  return -1;}intosip_remove_nist (osip_t * osip, transaction_t * nist){  int pos = 0;  transaction_t *tmp;#ifdef OSIP_MT  smutex_lock (nist_fastmutex);#endif  while (!list_eol (osip->nist_transactions, pos))    {      tmp = list_get (osip->nist_transactions, pos);      if (tmp->transactionid == nist->transactionid)	{	  list_remove (osip->nist_transactions, pos);#ifdef OSIP_MT	  smutex_unlock (nist_fastmutex);#endif	  return 0;	}      pos++;    }#ifdef OSIP_MT  smutex_unlock (nist_fastmutex);#endif  return -1;}#if 0/* this method is made obsolete because it contains bugs and is also   too much limited.   any call to this method should be replace this way:   //osip_distribute(osip, evt);   transaction_t *transaction = osip_find_transaction_and_add_event(osip, evt);   if (i!=0) // in case it's a new request     {        if (evt is an ACK)            evt could be an ACK for INVITE (not handled by oSIP)        else if ( evt is a 200 for INVITE)           evt could be a retransmission of a 200 for INVITE (not handled by oSIP)        else if (evt is a new request)  == not a ACK and not a response	  {           transaction = osip_create_transaction(osip, evt);           if (transaction==NULL)             printf("failed to create a transaction\");          }    }    else    {    // here, the message as been taken by the stack.    }*//* finds the transaction context and add the sipevent in its fifo. *//* USED ONLY BY THE TRANSPORT LAYER.                               *//* INPUT : osip_t *osip | osip. contains the list of tr. context*//* INPUT : sipevent_t* sipevent | event to dispatch.               */transaction_t *osip_distribute_event (osip_t * osip, sipevent_t * evt){  transaction_t *transaction = NULL;  int i;  context_type_t ctx_type;  if (EVT_IS_INCOMINGMSG (evt))    {      /* event is for ict */      if (MSG_IS_REQUEST (evt->sip))	{	  if (0 == strcmp (evt->sip->cseq->method, "INVITE")	      || 0 == strcmp (evt->sip->cseq->method, "ACK"))	    {#ifdef OSIP_MT	      smutex_lock (ist_fastmutex);#endif	      transaction =		osip_transaction_find (osip->ist_transactions, evt);#ifdef OSIP_MT	      smutex_unlock (ist_fastmutex);#endif	    }	  else	    {#ifdef OSIP_MT	      smutex_lock (nist_fastmutex);#endif	      transaction =		osip_transaction_find (osip->nist_transactions, evt);#ifdef OSIP_MT	      smutex_unlock (nist_fastmutex);#endif	    }	}      else	{	  if (0 == strcmp (evt->sip->cseq->method, "INVITE")	      || 0 == strcmp (evt->sip->cseq->method, "ACK"))	    {#ifdef OSIP_MT	      smutex_lock (ict_fastmutex);#endif	      transaction =		osip_transaction_find (osip->ict_transactions, evt);#ifdef OSIP_MT	      smutex_unlock (ict_fastmutex);#endif	    }	  else	    {#ifdef OSIP_MT	      smutex_lock (nict_fastmutex);#endif	      transaction =		osip_transaction_find (osip->nict_transactions, evt);#ifdef OSIP_MT	      smutex_unlock (nict_fastmutex);#endif	    }	}      if (transaction == NULL)	{	  if (EVT_IS_RCV_STATUS_1XX (evt)	      || EVT_IS_RCV_STATUS_2XX (evt)	      || EVT_IS_RCV_STATUS_3456XX (evt) || EVT_IS_RCV_ACK (evt))	    {			/* event MUST be ignored! */	      /* EXCEPT FOR 2XX THAT MUST BE GIVEN TO THE CORE LAYER!!! */	      /* TODO */	      OSIP_TRACE (osip_trace			  (__FILE__, __LINE__, OSIP_WARNING, NULL,			   "transaction does not yet exist... %x callid:%s\n",			   evt, evt->sip->call_id->number));	      msg_free (evt->sip);	      sfree (evt->sip);	      sfree (evt);	/* transaction thread will not delete it */	      return NULL;	    }	  /* we create a new context for this incoming request */	  if (0 == strcmp (evt->sip->cseq->method, "INVITE"))	    ctx_type = IST;	  else	    ctx_type = NIST;	  i = transaction_init (&transaction, ctx_type, osip, evt->sip);	  if (i == -1)	    {	      msg_free (evt->sip);	      sfree (evt->sip);	      sfree (evt);	/* transaction thread will not delete it */	      return NULL;	    }	}      evt->transactionid = transaction->transactionid;      evt->transactionid = transaction->transactionid;      fifo_add (transaction->transactionff, evt);      return transaction;    }  else    {      OSIP_TRACE (osip_trace		  (__FILE__, __LINE__, OSIP_BUG, NULL,		   "wrong event type %x\n", evt));      return NULL;    }}#endifintosip_find_transaction_and_add_event (osip_t * osip, sipevent_t * evt){  transaction_t *transaction = __osip_find_transaction (osip, evt, 1);  if (transaction == NULL)    return -1;  return 0;}transaction_t *osip_find_transaction (osip_t * osip, sipevent_t * evt){#ifdef OSIP_MT  OSIP_TRACE (osip_trace	      (__FILE__, __LINE__, OSIP_BUG, NULL,	       "\n\n\n\nYou are using a multithreaded application, but this method is not allowed! Use osip_find_transaction_add_add_event() instead.\n\n\\n"));#endif  return __osip_find_transaction (osip, evt, 0);}transaction_t *__osip_find_transaction (osip_t * osip, sipevent_t * evt, int consume){  transaction_t *transaction = NULL;  list_t *transactions = NULL;#ifdef OSIP_MT  smutex_t *mut = NULL;#endif  if (evt == NULL || evt->sip == NULL || evt->sip->cseq == NULL)    return NULL;  if (EVT_IS_INCOMINGMSG (evt))    {      if (MSG_IS_REQUEST (evt->sip))	{	  if (0 == strcmp (evt->sip->cseq->method, "INVITE")	      || 0 == strcmp (evt->sip->cseq->method, "ACK"))	    {	      transactions = osip->ist_transactions;#ifdef OSIP_MT	      mut = ist_fastmutex;#endif	    }	  else	    {	      transactions = osip->nist_transactions;#ifdef OSIP_MT	      mut = nist_fastmutex;#endif	    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区欧美在线观看| 欧美精品777| 美腿丝袜亚洲综合| 中文字幕在线不卡视频| 日韩欧美国产综合| 97久久人人超碰| 黄色精品一二区| 日韩精品成人一区二区在线| 亚洲色图制服丝袜| 久久久久久久久99精品| 欧美一区二区三区在| 91麻豆文化传媒在线观看| 国产一区二区三区免费观看| 亚洲成人三级小说| 国产精品看片你懂得| 精品国产sm最大网站免费看| 欧美日韩一区二区三区四区五区| 不卡一区二区三区四区| 国产高清不卡一区| 精品综合免费视频观看| 五月激情六月综合| 亚洲二区视频在线| 一区二区三区精品视频在线| 精品久久五月天| 日韩丝袜情趣美女图片| 欧美另类一区二区三区| 91福利视频网站| 91丨porny丨在线| 成人动漫一区二区在线| 国产凹凸在线观看一区二区| 久久国产综合精品| 麻豆91精品91久久久的内涵| 视频一区二区中文字幕| 视频一区二区三区中文字幕| 五月婷婷综合激情| 青青草91视频| 理论电影国产精品| 精品在线免费观看| 久久99国产精品久久99| 久久99精品久久久久久国产越南 | 欧美手机在线视频| 欧美性受xxxx黑人xyx性爽| 色8久久人人97超碰香蕉987| 一本久道久久综合中文字幕| 成人午夜碰碰视频| 91视频观看视频| 欧洲视频一区二区| 欧美午夜精品一区| 欧美一区二区三区小说| 欧美一区二区福利在线| 精品免费一区二区三区| 国产天堂亚洲国产碰碰| 国产精品欧美极品| 亚洲免费在线观看视频| 婷婷综合五月天| 国产综合久久久久影院| 成人妖精视频yjsp地址| 91麻豆蜜桃一区二区三区| 日本久久一区二区| 日韩欧美综合在线| 欧美国产成人在线| 亚洲免费观看高清| 日本 国产 欧美色综合| 国产美女在线精品| 91美女视频网站| 欧美一区日韩一区| 国产三级一区二区| 亚洲码国产岛国毛片在线| 五月激情丁香一区二区三区| 国产乱人伦偷精品视频免下载| 不卡高清视频专区| 欧美日韩卡一卡二| 久久九九久精品国产免费直播| 国产精品污污网站在线观看| 亚洲成av人片一区二区梦乃| 国产一区二区导航在线播放| 91在线你懂得| 日韩欧美电影一二三| 一色桃子久久精品亚洲| 日日欢夜夜爽一区| 风流少妇一区二区| 欧美乱熟臀69xxxxxx| 日本一区二区成人在线| 亚洲成人手机在线| 国产成人综合网| 欧美美女一区二区| 国产精品网站在线播放| 免费视频一区二区| 91视频观看视频| 欧美成人vps| 亚洲午夜av在线| 成人免费不卡视频| 日韩一级二级三级| 亚洲欧美日韩精品久久久久| 久久国产尿小便嘘嘘尿| 色偷偷88欧美精品久久久| 久久综合色一综合色88| 亚洲大片精品永久免费| 99在线精品视频| 欧美精品一区二区久久婷婷| 亚洲一区二区三区四区在线观看 | 成人黄色软件下载| 91精品国产免费| 中文字幕五月欧美| 国产在线精品一区在线观看麻豆| 亚洲精品一卡二卡| 在线欧美日韩国产| 国产精品高清亚洲| 欧美日韩电影在线| 美日韩黄色大片| 色屁屁一区二区| 中文字幕日韩精品一区| 国产成人免费在线| 一区二区三区中文字幕精品精品 | 日本一区二区动态图| 中文字幕日本不卡| 国产suv一区二区三区88区| 欧美群妇大交群中文字幕| 久久久久国产精品免费免费搜索| 中文字幕av在线一区二区三区| 99国产精品久久久久久久久久久| 亚洲精品你懂的| 一区免费观看视频| 国产欧美精品一区二区三区四区| 欧美性受极品xxxx喷水| 粉嫩高潮美女一区二区三区| 国产片一区二区三区| 粉嫩av一区二区三区在线播放| 欧美精彩视频一区二区三区| 暴力调教一区二区三区| 亚洲激情校园春色| 国产精品伦一区| 亚洲蜜臀av乱码久久精品| 中文字幕综合网| 亚洲精品高清在线| 色综合一区二区| 亚洲三级在线播放| 91在线精品一区二区三区| 国产精品动漫网站| 91在线视频观看| 一区二区三区国产精品| 日本韩国欧美一区| 亚洲一区在线观看网站| 欧美日韩一级二级| 亚洲r级在线视频| 91精品一区二区三区在线观看| 日韩高清一区二区| 日韩一区二区电影在线| 精品一区二区免费看| 国产日产欧美一区| av不卡一区二区三区| 亚洲美女一区二区三区| 欧美日本一道本在线视频| 日韩av一级片| 久久久精品tv| 成人高清在线视频| 亚洲一区二区中文在线| 91精品国产欧美日韩| 国内外成人在线视频| 国产精品久久久久久一区二区三区| 91免费在线视频观看| 午夜欧美2019年伦理| 精品国产污污免费网站入口| 国产成人啪免费观看软件| 亚洲欧美在线观看| 欧美一区二区在线看| 国产乱码精品一区二区三| 亚洲欧美国产77777| 欧美日韩国产不卡| 国产精品99久久久久久似苏梦涵| 国产精品国产三级国产普通话99| 综合久久一区二区三区| 久久综合色鬼综合色| 日韩你懂的在线播放| 日韩视频在线你懂得| 6080午夜不卡| 精品入口麻豆88视频| 国产三级三级三级精品8ⅰ区| 日韩一级高清毛片| 精品日韩av一区二区| 久久综合资源网| 亚洲欧洲精品一区二区精品久久久| 中文字幕亚洲在| 一区二区欧美精品| 日产精品久久久久久久性色| 青青草国产成人av片免费| 蜜桃av一区二区在线观看 | 激情五月激情综合网| 国产精品一卡二卡在线观看| www.亚洲人| 国产欧美日韩在线视频| 国产精品色婷婷久久58| 国产视频在线观看一区二区三区| 欧美mv和日韩mv的网站| 精品女同一区二区| 一区二区三区日韩在线观看| 亚洲成a人片综合在线| 精品欧美一区二区三区精品久久| 成年人国产精品| 日韩一区精品视频|