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

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

?? osip_uri.c

?? SIP協議棧實現
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*  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 <osipparser2/osip_port.h>#include <osipparser2/osip_message.h>#include <stdlib.h>#include <stdio.h>/* allocate a new url structure *//* OUTPUT: osip_uri_t *url | structure to save results.   *//* OUTPUT: err_t *err | structure to store error.   *//* return -1 on error */intosip_uri_init (osip_uri_t ** url){  *url = (osip_uri_t *) osip_malloc (sizeof (osip_uri_t));  if (*url == NULL)    return -1;  (*url)->scheme = NULL;  (*url)->username = NULL;  (*url)->password = NULL;  (*url)->host = NULL;  (*url)->port = NULL;  (*url)->url_params = (osip_list_t *) osip_malloc (sizeof (osip_list_t));  if ((*url)->url_params == NULL)    {      osip_free (*url);      *url = NULL;      return -1;    }  osip_list_init ((*url)->url_params);  (*url)->url_headers = (osip_list_t *) osip_malloc (sizeof (osip_list_t));  if ((*url)->url_headers == NULL)    {      osip_free ((*url)->url_params);      osip_free (*url);      *url = NULL;      return -1;    }  osip_list_init ((*url)->url_headers);  (*url)->string = NULL;  return 0;}/* examples:   sip:j.doe@big.com;maddr=239.255.255.1;ttl=15   sip:j.doe@big.com   sip:j.doe:secret@big.com;transport=tcp   sip:j.doe@big.com?subject=project   sip:+1-212-555-1212:1234@gateway.com;user=phone   sip:1212@gateway.com   sip:alice@10.1.2.3   sip:alice@example.com   sip:alice@registrar.com;method=REGISTER   NOT EQUIVALENT:   SIP:JUSER@ExAmPlE.CoM;Transport=udp   sip:juser@ExAmPlE.CoM;Transport=UDP*//* this method search for the separator and   *//* return it only if it is located before the *//* second separator. */char *next_separator (const char *ch, int separator_osip_to_find, int before_separator){  char *ind;  char *tmp;  ind = strchr (ch, separator_osip_to_find);  if (ind == NULL)    return NULL;  tmp = NULL;  if (before_separator != 0)    tmp = strchr (ch, before_separator);  if (tmp != NULL)    {      if (ind < tmp)	return ind;    }  else    return ind;  return NULL;}/* parse the sip url.                                *//* INPUT : char *buf | url to be parsed.*//* OUTPUT: osip_uri_t *url | structure to save results.   *//* OUTPUT: err_t *err | structure to store error.   *//* return -1 on error */intosip_uri_parse (osip_uri_t * url, const char *buf){  char *username;  char *password;  char *host;  const char *port;  const char *params;  const char *headers;  const char *tmp;  /* basic tests */  if (buf == NULL || buf[0]=='\0')    return -1;  tmp = strchr (buf, ':');  if (tmp == NULL)    return -1;  if (tmp - buf < 2)    return -1;  url->scheme = (char *) osip_malloc (tmp - buf + 1);  if (url->scheme == NULL)    return -1;  osip_strncpy (url->scheme, buf, tmp - buf);  if (strlen (url->scheme) < 3 ||      (0 != osip_strncasecmp (url->scheme, "sip", 3)       && 0 != osip_strncasecmp (url->scheme, "sips", 4)))    {				/* Is not a sipurl ! */      int i = strlen (tmp + 1);      if (i < 2)	return -1;      url->string = (char *) osip_malloc (i + 1);      if (url->string == NULL)	return -1;      osip_strncpy (url->string, tmp + 1, i);      return 0;    }  /*  law number 1:     if ('?' exists && is_located_after '@')     or   if ('?' exists && '@' is not there -no username-)     =====>  HEADER_PARAM EXIST     =====>  start at index(?)     =====>  end at the end of url   */  /* find the beginning of host */  username = strchr (buf, ':');  /* if ':' does not exist, the url is not valid */  if (username == NULL)    return -1;  host = strchr (buf, '@');  if (host == NULL)    host = username;  else    /* username exists */    {      password = next_separator (username + 1, ':', '@');      if (password == NULL)	password = host;      else	/* password exists */	{	  if (host - password < 2)	    return -1;	  url->password = (char *) osip_malloc (host - password);	  if (url->password == NULL)	    return -1;	  osip_strncpy (url->password, password + 1, host - password - 1);	  __osip_uri_unescape (url->password);	}      if (password - username < 2)	return -1;      {	url->username = (char *) osip_malloc (password - username);	if (url->username == NULL)	  return -1;	osip_strncpy (url->username, username + 1, password - username - 1);	__osip_uri_unescape (url->username);      }    }  /* search for header after host */  headers = strchr (host, '?');  if (headers == NULL)    headers = buf + strlen (buf);  else    /* headers exist */    osip_uri_parse_headers (url, headers);  /* search for params after host */  params = strchr (host, ';');	/* search for params after host */  if (params == NULL)    params = headers;  else    /* params exist */    {      char *tmpbuf;      if (headers - params + 1 < 2)	return -1;      tmpbuf = osip_malloc (headers - params + 1);      if (tmpbuf == NULL)	return -1;      tmpbuf = osip_strncpy (tmpbuf, params, headers - params);      osip_uri_parse_params (url, tmpbuf);      osip_free (tmpbuf);    }  port = params - 1;  while (port > host && *port != ']' && *port != ':')    port--;  if (*port == ':')    {      if (host == port)	port = params;      else	{	  if ((params - port < 2) || (params - port > 8))	    return -1;		/* error cases */	  url->port = (char *) osip_malloc (params - port);	  if (url->port == NULL)	    return -1;	  osip_strncpy (url->port, port + 1, params - port - 1);	  osip_clrspace (url->port);	}    }  else    port = params;  /* adjust port for ipv6 address */  tmp = port;  while (tmp > host && *tmp != ']')    tmp--;  if (*tmp == ']')    {      port = tmp;      while (host < port && *host != '[')	host++;      if (host >= port)	return -1;    }  if (port - host < 2)    return -1;  url->host = (char *) osip_malloc (port - host);  if (url->host == NULL)    return -1;  osip_strncpy (url->host, host + 1, port - host - 1);  osip_clrspace (url->host);  return 0;}voidosip_uri_set_scheme (osip_uri_t * url, char *scheme){  url->scheme = scheme;}char *osip_uri_get_scheme (osip_uri_t * url){  if (url == NULL)    return NULL;  return url->scheme;}voidosip_uri_set_username (osip_uri_t * url, char *username){  url->username = username;}char *osip_uri_get_username (osip_uri_t * url){  if (url == NULL)    return NULL;  return url->username;}voidosip_uri_set_password (osip_uri_t * url, char *password){  url->password = password;}char *osip_uri_get_password (osip_uri_t * url){  if (url == NULL)    return NULL;  return url->password;}voidosip_uri_set_host (osip_uri_t * url, char *host){  url->host = host;}char *osip_uri_get_host (osip_uri_t * url){  if (url == NULL)    return NULL;  return url->host;}voidosip_uri_set_port (osip_uri_t * url, char *port){  url->port = port;}char *osip_uri_get_port (osip_uri_t * url){  if (url == NULL)    return NULL;  return url->port;}intosip_uri_parse_headers (osip_uri_t * url, const char *headers){  char *and;  char *equal;  /* find '=' wich is the separator for one header */  /* find ';' wich is the separator for multiple headers */  equal = strchr (headers, '=');  and = strchr (headers + 1, '&');  if (equal == NULL)		/* each header MUST have a value */    return -1;  do    {      char *hname;      char *hvalue;      hname = (char *) osip_malloc (equal - headers);      if (hname == NULL)	return -1;      osip_strncpy (hname, headers + 1, equal - headers - 1);      __osip_uri_unescape (hname);      if (and != NULL)	{	  if (and - equal < 2)	    {	      osip_free (hname);	      return -1;	    }	  hvalue = (char *) osip_malloc (and - equal);	  if (hvalue == NULL)	    {	      osip_free (hname);	      return -1;	    }	  osip_strncpy (hvalue, equal + 1, and - equal - 1);	  __osip_uri_unescape (hvalue);	}      else	{			/* this is for the last header (no and...) */	  if (headers + strlen (headers) - equal + 1 < 2)	    {	      osip_free (hname);	      return -1;	    }	  hvalue = (char *) osip_malloc (headers + strlen (headers) - equal + 1);	  if (hvalue == NULL)	    {	      osip_free (hname);	      return -1;	    }	  osip_strncpy (hvalue, equal + 1, headers + strlen (headers) - equal);	  __osip_uri_unescape (hvalue);	}      osip_uri_uheader_add (url, hname, hvalue);      if (and == NULL)		/* we just set the last header */	equal = NULL;      else			/* continue on next header */	{	  headers = and;	  equal = strchr (headers, '=');	  and = strchr (headers + 1, '&');	  if (equal == NULL)	/* each header MUST have a value */	    return -1;	}    }  while (equal != NULL);  return 0;}intosip_uri_parse_params (osip_uri_t * url, const char *params){  char *pname;  char *pvalue;  const char *comma;  const char *equal;  /* find '=' wich is the separator for one param */  /* find ';' wich is the separator for multiple params */  equal = next_separator (params + 1, '=', ';');  comma = strchr (params + 1, ';');  while (comma != NULL)    {      if (equal == NULL)	{	  equal = comma;	  pvalue = NULL;	}      else	{	  if (comma - equal < 2)	    return -1;	  pvalue = (char *) osip_malloc (comma - equal);	  if (pvalue == NULL)	    return -1;	  osip_strncpy (pvalue, equal + 1, comma - equal - 1);	  __osip_uri_unescape (pvalue);	}      if (equal - params < 2)	{	  osip_free (pvalue);	  return -1;	}      pname = (char *) osip_malloc (equal - params);      if (pname == NULL)	{	  osip_free (pvalue);	  return -1;	}      osip_strncpy (pname, params + 1, equal - params - 1);      __osip_uri_unescape (pname);      osip_uri_uparam_add (url, pname, pvalue);      params = comma;      equal = next_separator (params + 1, '=', ';');      comma = strchr (params + 1, ';');    }  /* this is the last header (comma==NULL) */  comma = params + strlen (params);  if (equal == NULL)    {      equal = comma;		/* at the end */      pvalue = NULL;    }  else    {      if (comma - equal < 2)	return -1;      pvalue = (char *) osip_malloc (comma - equal);      if (pvalue == NULL)	return -1;      osip_strncpy (pvalue, equal + 1, comma - equal - 1);    }  if (equal - params < 2)    {      osip_free (pvalue);      return -1;    }  pname = (char *) osip_malloc (equal - params);  if (pname == NULL)    {      osip_free (pvalue);      return -1;    }  osip_strncpy (pname, params + 1, equal - params - 1);  osip_uri_uparam_add (url, pname, pvalue);  return 0;}intosip_uri_to_str (const osip_uri_t * url, char **dest){  char *buf;  int len;  int plen;  char *tmp;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品午夜在线| 亚洲女同女同女同女同女同69| 成人黄色av网站在线| 综合激情成人伊人| 日本一区二区免费在线| 久久久国际精品| 欧美激情一区二区三区全黄| 粗大黑人巨茎大战欧美成人| 国产99久久久国产精品潘金| 丰满岳乱妇一区二区三区| 国产精品自拍在线| 国产精品99久久久久久有的能看| 经典一区二区三区| 国产高清不卡二三区| 国产成人h网站| 91视频.com| 欧美日本在线视频| 337p亚洲精品色噜噜| 日韩免费观看高清完整版在线观看| 日韩一区二区不卡| 国产亚洲精品aa午夜观看| 国产精品色一区二区三区| 亚洲激情欧美激情| 美女网站一区二区| 国产不卡视频在线播放| 欧美在线色视频| 欧美精品久久一区| 99九九99九九九视频精品| 在线精品视频一区二区| 日韩欧美成人午夜| 中文字幕欧美日韩一区| 一区二区三区欧美久久| 老司机精品视频在线| 不卡的av中国片| 在线免费观看日韩欧美| www国产精品av| 樱花草国产18久久久久| 蜜臀av国产精品久久久久| 成人亚洲一区二区一| 欧美日韩国产在线播放网站| 久久嫩草精品久久久精品| 亚洲猫色日本管| 免费一级欧美片在线观看| 国产99精品国产| 日韩欧美亚洲国产精品字幕久久久| 成人欧美一区二区三区| 久久69国产一区二区蜜臀| 色999日韩国产欧美一区二区| 亚洲精品一区二区三区蜜桃下载 | 欧美一区二区三区的| 久久午夜国产精品| 亚洲成人www| 成人app软件下载大全免费| 日韩视频永久免费| 亚洲裸体在线观看| 国产精品小仙女| 欧美美女一区二区在线观看| 国产精品国产成人国产三级| 国产伦精品一区二区三区视频青涩| 欧美裸体bbwbbwbbw| 亚洲欧美另类久久久精品2019| 韩国视频一区二区| 欧美一个色资源| 五月婷婷综合在线| 色av成人天堂桃色av| 成人免费视频在线观看| 成人午夜电影小说| 精品国产麻豆免费人成网站| 亚洲电影你懂得| 欧美性大战久久久久久久| 一色桃子久久精品亚洲| 成人免费毛片aaaaa**| 久久夜色精品国产欧美乱极品| 爽好多水快深点欧美视频| 欧美亚洲综合另类| 亚洲伦理在线精品| 91香蕉视频在线| 一区二区三区在线免费视频| 91亚洲精品久久久蜜桃网站| 亚洲女厕所小便bbb| 色综合天天狠狠| 一片黄亚洲嫩模| 欧美人妖巨大在线| 日本成人在线网站| 久久综合九色综合欧美就去吻 | 欧美国产日本韩| 成人自拍视频在线| 亚洲欧洲韩国日本视频| 色综合久久久久久久久久久| 亚洲特黄一级片| 欧美午夜在线一二页| 午夜精品视频一区| 91 com成人网| 激情综合网天天干| 国产欧美一区在线| 99精品视频在线播放观看| 中文字幕一区二区三区在线播放| 91原创在线视频| 亚洲精品一二三| 国产激情一区二区三区| 自拍偷拍欧美激情| 欧美婷婷六月丁香综合色| 日韩精品欧美成人高清一区二区| 欧美一区欧美二区| 成人中文字幕合集| 日本亚洲最大的色成网站www| 久久蜜桃香蕉精品一区二区三区| 成人黄色免费短视频| 亚洲成a人v欧美综合天堂| 精品国精品自拍自在线| www.色综合.com| 日本亚洲电影天堂| 国产成人免费视频一区| 夜色激情一区二区| 国产精品不卡在线| 中文字幕欧美日韩一区| 欧美一区二区二区| 欧美亚洲高清一区| 91社区在线播放| 在线视频中文字幕一区二区| 色综合久久天天| 色悠久久久久综合欧美99| 972aa.com艺术欧美| 91在线国产观看| eeuss鲁片一区二区三区在线观看| 亚洲欧美日韩国产成人精品影院 | 成人性生交大片免费看在线播放| 久久精品国产在热久久| 国产在线精品免费| 国产一区二区三区久久久| 精品亚洲国内自在自线福利| 蜜桃久久精品一区二区| 国产九色sp调教91| 国产成人亚洲综合a∨婷婷| 粉嫩av亚洲一区二区图片| 91国内精品野花午夜精品| 欧美午夜精品理论片a级按摩| 欧美日韩久久一区| 日韩视频免费直播| 欧美激情在线免费观看| 日韩美女久久久| 亚洲成年人网站在线观看| 精品一区免费av| av日韩在线网站| 欧美三级三级三级爽爽爽| 欧美成va人片在线观看| 国产视频一区在线播放| 亚洲一二三区在线观看| 九九九精品视频| 色综合久久99| 欧美哺乳videos| 亚洲免费观看高清完整版在线观看 | 中文字幕高清不卡| 精品国产91洋老外米糕| 国产日产欧美一区二区视频| 亚洲私人黄色宅男| 奇米精品一区二区三区四区 | 亚洲猫色日本管| 久久99最新地址| 91麻豆国产福利在线观看| 日韩欧美亚洲国产另类| 国产精品看片你懂得| 日韩电影在线观看电影| 豆国产96在线|亚洲| 欧美日韩高清在线| 欧美午夜精品理论片a级按摩| 中文字幕一区二区三区四区 | 不卡视频在线看| 午夜精品久久久久久久99樱桃| 老司机一区二区| 日本特黄久久久高潮| 成人黄色片在线观看| 欧美日韩高清一区| 成人免费视频app| 717成人午夜免费福利电影| 国产欧美一区二区精品婷婷| 天堂影院一区二区| 色丁香久综合在线久综合在线观看| 久久久91精品国产一区二区精品| 一区二区三区日本| av激情综合网| 久久色成人在线| 韩国精品免费视频| 777午夜精品免费视频| 亚洲线精品一区二区三区八戒| 92国产精品观看| 中文字幕色av一区二区三区| 国产原创一区二区三区| 日韩精品专区在线影院重磅| 天堂成人国产精品一区| 欧美色偷偷大香| 一区二区三区成人| 欧美在线免费视屏| 亚洲人成在线播放网站岛国| 成人高清视频免费观看| 欧美激情在线观看视频免费| 国产99久久久精品| 国产精品久久久久久久岛一牛影视 | 欧美日韩一区二区三区高清| 亚洲天堂福利av|