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

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

?? nua_register.c

?? this is simple sip stack.
?? C
?? 第 1 頁 / 共 3 頁
字號:
    if (pair)      /* Don't use protocol if we have both udp and tcp */      protocol = NULL /*, v2[0].v_next = &v2[1], v2[1] = *pair */;    else      protocol = via->v_protocol /*, v2[0].v_next = NULL */;    contact = sip_contact_create_from_via_with_transport(home, v, NULL, protocol);    /* v = sip_via_dup(home, v2); */    if (!contact) {      su_free(home, nr);      break;    }    nr->nr_ready = 1, nr->nr_default = 1, nr->nr_public = public;    nr->nr_secure = contact->m_url->url_type == url_sips;    nr->nr_contact = contact;    /* nr->nr_via = v; */    SU_DEBUG_9(("nua_register: Adding contact URL '%s' to list.\n", contact->m_url->url_host));    ++nr_items;    nr->nr_next = *next, nr->nr_prev = next; *next = nr, next = &nr->nr_next;    nr->nr_list = list;  }  su_home_deinit(autohome);  return 0;}staticvoid nua_stack_tport_update(nua_t *nua, nta_agent_t *nta){#if 0  nua_registration_t *default_oc;  nua_registration_t const *defaults = nua->nua_registrations;  sip_via_t *via = nta_agent_via(nta);  default_oc = outbound_by_aor(defaults, NULL, 1);  if (default_oc) {    assert(default_oc->nr_via);    outbound_contacts_from_via(default_oc,				       via,				       via->v_next);    /* refresh_register(nua_handle_t *nh, nua_dialog_usage_t *du, sip_time_t now); */  }#endif  return;}nua_registration_t *nua_registration_by_aor(nua_registration_t const *list,					    sip_from_t const *aor,					    url_t const *remote_uri,					    int only_default){  sip_from_t *alt_aor = NULL, _alt_aor[1];  int sips_aor = aor && aor->a_url->url_type == url_sips;  int sips_uri = remote_uri && remote_uri->url_type == url_sips;  nua_registration_t const *nr, *public = NULL, *any = NULL;  nua_registration_t const *namewise = NULL, *sipswise = NULL;  if (only_default || aor == NULL) {    /* Ignore AoR, select only by remote_uri */    for (nr = list; nr; nr = nr->nr_next) {      if (!nr->nr_ready)	continue;      if (only_default && !nr->nr_default)	continue;      if (sips_uri ? nr->nr_secure : !nr->nr_secure) 	return (nua_registration_t *)nr;      if (!public && nr->nr_public)	public = nr;      if (!any)	any = nr;    }    if (public)      return (nua_registration_t *)public;    if (any)      return (nua_registration_t *)any;    return NULL;  }  if (!sips_aor && aor)    alt_aor = memcpy(_alt_aor, aor, sizeof _alt_aor);  for (nr = list; nr; nr = nr->nr_next) {    if (!nr->nr_ready)      continue;    if (nr->nr_aor) {      if (aor && url_cmp(nr->nr_aor->a_url, aor->a_url) == 0)	return (nua_registration_t *)nr;      if (!namewise && alt_aor && url_cmp(nr->nr_aor->a_url, aor->a_url) == 0)	namewise = nr;    }    if (!sipswise && (sips_aor || sips_uri) ? nr->nr_secure : !nr->nr_secure)       sipswise = nr;    if (!public && nr->nr_public)      public = nr;    if (!any)      any = nr;  }  if (namewise)    return (nua_registration_t *)namewise;  if (sipswise)    return (nua_registration_t *)sipswise;  /* XXX -      should we do some policing whether sips_aor or sips_uri can be used     with sip contact?  */  if (public)    return (nua_registration_t *)public;  if (any)    return (nua_registration_t *)any;  return NULL;}nua_registration_t *nua_registration_for_msg(nua_registration_t const *list, sip_t const *sip){  sip_from_t const *aor;  url_t *uri;  if (sip == NULL)    return NULL;  if (sip->sip_request) {    aor = sip->sip_from;    uri = sip->sip_request->rq_url;  }  else {    /* This is much hairier! */    aor = sip->sip_to;    if (sip->sip_record_route)      uri = sip->sip_record_route->r_url;    else if (sip->sip_contact)      uri = sip->sip_contact->m_url;    else      uri = sip->sip_from->a_url;    assert(uri != ((sip_contact_t *)NULL)->m_url);  }  return nua_registration_by_aor(list, aor, uri, 0);}/** Return Contact usable in dialogs */sip_contact_t const *nua_registration_contact(nua_registration_t const *nr){  if (nr->nr_by_stack && nr->nr_ob) {    sip_contact_t const *m = outbound_dialog_contact(nr->nr_ob);    if (m)      return m;  }  return nr->nr_contact;}/** Return initial route. */sip_route_t const *nua_registration_route(nua_registration_t const *nr){  return nr ? nr->nr_route : NULL;}sip_contact_t const *nua_stack_get_contact(nua_registration_t const *nr){  nr = nua_registration_by_aor(nr, NULL, NULL, 1);  return nr ? nr->nr_contact : NULL;}/** Add a Contact (and Route) header to request (or response) */int nua_registration_add_contact(nua_handle_t *nh,				 msg_t *msg,				 sip_t *sip,				 int add_contact,				 int add_service_route){  nua_registration_t *nr = NULL;  if (!add_contact && !add_service_route)    return 0;  if (nh == NULL || msg == NULL)    return -1;  if (sip == NULL)    sip = sip_object(msg);  if (nr == NULL)    nr = nua_registration_for_msg(nh->nh_nua->nua_registrations, sip);  if (nr == NULL)    return -1;  if (add_contact) {    sip_contact_t const *m = nua_registration_contact(nr);    if (!m || msg_header_add_dup(msg, (msg_pub_t *)sip, (void const *)m) < 0)      return -1;  }  if (add_service_route && !sip->sip_status) {    sip_route_t const *sr = nua_registration_route(nr);    if (msg_header_add_dup(msg, (msg_pub_t *)sip, (void const *)sr) < 0)      return -1;  }  return 0;}/** Add a registration to list of contacts */int nua_registration_add(nua_registration_t **list,			 nua_registration_t *nr){  assert(list && nr);  if (nr->nr_list == NULL) {    nua_registration_t *next = *list;    if (next)      next->nr_prev = &nr->nr_next;    nr->nr_next = next, nr->nr_prev = list, nr->nr_list = list;    *list = nr;  }  return 0;}/** Remove from list of registrations */void nua_registration_remove(nua_registration_t *nr){  if ((*nr->nr_prev = nr->nr_next))    nr->nr_next->nr_prev = nr->nr_prev;  nr->nr_next = NULL, nr->nr_prev = NULL, nr->nr_list = NULL;}/** Set address-of-record. */int nua_registration_set_aor(su_home_t *home,			     nua_registration_t *nr,			     sip_from_t const *aor){  sip_from_t *new_aor, *old_aor;  if (!home || !nr || !aor)    return -1;  new_aor = sip_from_dup(home, aor);  if (!new_aor)    return -1;  old_aor = nr->nr_aor;  nr->nr_aor = new_aor;  msg_header_free(home, (void *)old_aor);  return 0;}/** Set contact. */int nua_registration_set_contact(su_home_t *home,				 nua_registration_t *nr,				 sip_contact_t const *application_contact,				 int terminating){  sip_contact_t *m = NULL, *previous;  url_t *uri;  if (!home || !nr)    return -1;  uri = nr->nr_aor ? nr->nr_aor->a_url : NULL;      previous = nr->nr_contact;  if (application_contact) {    m = sip_contact_dup(home, application_contact);  }  else if (terminating && nr->nr_contact) {    return 0;  }  else {    nua_registration_t *nr0;        nr0 = nua_registration_by_aor(*nr->nr_list, NULL, uri, 1);    if (nr0)      m = sip_contact_dup(home, nr0->nr_contact);  }  if (!m)    return -1;  nr->nr_contact = m;  nr->nr_by_stack = !application_contact;  msg_header_free(home, (void *)previous);  return 0;}/** Mark registration as ready */void nua_registration_set_ready(nua_registration_t *nr, int ready){  nr->nr_ready = ready;}/** @internal Hook for processing incoming request by registration. * * This is used for keepalive/validate OPTIONS. */int nua_registration_process_request(nua_registration_t *list,				     nta_incoming_t *irq,				     sip_t const *sip){  sip_call_id_t *i;  nua_registration_t *nr;  if (!outbound_targeted_request(sip))    return 0;  /* Process by outbound... */  i = sip->sip_call_id;  for (nr = list; nr; nr = nr->nr_next) {    outbound_t *ob = nr->nr_ob;    if (ob)      if (outbound_process_request(ob, irq, sip))	return 501;		/* Just in case  */  }  return 481;			/* Call/Transaction does not exist */}/**@internal * Fix contacts for un-REGISTER. * * Remove (possible non-zero) "expires" parameters from contacts and extra * contacts, add Expire: 0. */staticvoid unregister_expires_contacts(msg_t *msg, sip_t *sip){  sip_contact_t *m;  int unregister_all;  if (msg == NULL || sip == NULL)    return;  /* Remove payload */  while (sip->sip_payload)    sip_header_remove(msg, sip, (sip_header_t *)sip->sip_payload);  while (sip->sip_content_type)    sip_header_remove(msg, sip, (sip_header_t *)sip->sip_content_type);  for (m = sip->sip_contact; m; m = m->m_next) {    if (m->m_url->url_type == url_any)      break;    msg_header_remove_param(m->m_common, "expires");#if 0    msg_header_add_param(msg_home(msg), m->m_common, "expires=0");#endif  }  unregister_all = m && (m != sip->sip_contact || m->m_next);  sip_add_tl(msg, sip,             /* Remove existing contacts */             TAG_IF(unregister_all, SIPTAG_CONTACT(NONE)),             /* Add '*' contact: 0 */             TAG_IF(unregister_all, SIPTAG_CONTACT_STR("*")),             SIPTAG_EXPIRES_STR("0"),             TAG_END());}/** Outbound requests us to refres registration */static int nua_stack_outbound_refresh(nua_handle_t *nh,				      outbound_t *ob){  nua_dialog_usage_t *du = nua_dialog_usage_get(nh->nh_ds, nua_register_usage, NULL);  if (du)    nua_dialog_usage_refresh(nh, du, 1);  return 0;}/** @internal Callback from outbound_t */static int nua_stack_outbound_status(nua_handle_t *nh, outbound_t *ob,				     int status, char const *phrase,				     tag_type_t tag, tag_value_t value, ...){  ta_list ta;  ta_start(ta, tag, value);  nua_stack_event(nh->nh_nua, nh, NULL,		  nua_i_outbound, status, phrase,		  ta_tags(ta));  ta_end(ta);  return 0;}/** @internal Callback from outbound_t */static int nua_stack_outbound_failed(nua_handle_t *nh, outbound_t *ob,				     int status, char const *phrase,				     tag_type_t tag, tag_value_t value, ...){  ta_list ta;  ta_start(ta, tag, value);  nua_stack_event(nh->nh_nua, nh, NULL,		  nua_i_outbound, status, phrase,		  ta_tags(ta));  ta_end(ta);  return 0;}/** @internal Callback for obtaining credentials for keepalive */static int nua_stack_outbound_credentials(nua_handle_t *nh, 					  auth_client_t **auc){  return auc_copy_credentials(auc, nh->nh_auth);}/** @internal Return a string describing our features. */static char *nua_handle_features(nua_handle_t *nh){  char *retval = NULL;  su_strlst_t *l = su_strlst_create(NULL);  su_home_t *home = su_strlst_home(l);  if (!l)    return NULL;  if (NH_PGET(nh, callee_caps)) {    sip_allow_t const *allow = NH_PGET(nh, allow);    if (allow) {      /* Skip ";" if this is first one */      su_strlst_append(l, ";methods=\"" + (su_strlst_len(l) == 0));      if (allow->k_items) {        int i;        for (i = 0; allow->k_items[i]; i++) {          su_strlst_append(l, allow->k_items[i]);          if (allow->k_items[i + 1])            su_strlst_append(l, ",");        }      }      su_strlst_append(l, "\"");    }    if (nh->nh_soa) {      char **media = soa_media_features(nh->nh_soa, 0, home);      while (*media) {        if (su_strlst_len(l))          su_strlst_append(l, ";");        su_strlst_append(l, *media++);      }    }  }  if (su_strlst_len(l))    retval = su_strlst_join(l, nh->nh_home, "");  su_strlst_destroy(l);  return retval;}static int nua_stack_outbound_features(nua_handle_t *nh, outbound_t *ob){  char *features;  int retval;  if (!nh)    return -1;  if (!ob)    return 0;  features = nua_handle_features(nh);  retval = outbound_set_features(ob, features);  su_free(nh->nh_home, features);  return retval;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
性感美女久久精品| 久久久91精品国产一区二区精品| 国产99久久久久| 成人爽a毛片一区二区免费| 国产成人在线色| 99国产精品久久久久| 99热在这里有精品免费| 色婷婷综合视频在线观看| 在线视频欧美精品| 日韩一区二区三免费高清| 这里是久久伊人| 国产日韩欧美一区二区三区乱码 | 亚洲国产欧美日韩另类综合| 亚洲美女一区二区三区| 亚洲午夜电影在线观看| 美女国产一区二区| 波多野结衣中文字幕一区二区三区 | 欧美视频一区二区三区在线观看| 91色婷婷久久久久合中文| 欧美日韩黄色影视| 中文字幕精品三区| 亚洲国产成人av网| 成人av在线看| 久久天天做天天爱综合色| 综合久久国产九一剧情麻豆| 日本不卡高清视频| 99久久99久久综合| 久久久亚洲高清| 日本色综合中文字幕| 成人高清视频在线| 国产午夜精品一区二区三区视频 | 欧美成人在线直播| 亚洲综合自拍偷拍| 99精品视频一区二区| 日韩欧美视频在线| 日韩av电影免费观看高清完整版| 成人国产精品免费观看| 久久久美女毛片| 国产很黄免费观看久久| 日韩欧美一区二区三区在线| 婷婷久久综合九色综合绿巨人| av高清不卡在线| 一区二区视频在线看| av成人免费在线观看| 亚洲视频免费在线观看| 91原创在线视频| 亚洲另类在线制服丝袜| 96av麻豆蜜桃一区二区| 亚洲精品乱码久久久久久久久| 亚洲电影欧美电影有声小说| jlzzjlzz国产精品久久| 自拍偷拍亚洲欧美日韩| 欧美中文字幕一区| 九色|91porny| 国产精品免费丝袜| 欧美亚洲综合另类| 麻豆国产欧美一区二区三区| 精品国产乱码久久| 99久久精品免费看| 午夜伦欧美伦电影理论片| 欧美电影免费观看高清完整版在线观看 | 久久久综合网站| 色婷婷av一区二区三区大白胸| 午夜欧美一区二区三区在线播放| 欧美日韩国产另类一区| 国产电影一区在线| 亚洲国产va精品久久久不卡综合 | 五月天精品一区二区三区| 精品sm捆绑视频| 欧美性猛片xxxx免费看久爱| 精品一区二区免费| 亚洲国产一区二区三区青草影视| 欧美一区二区三区在线| 粉嫩av亚洲一区二区图片| 日韩在线卡一卡二| 亚洲另类春色校园小说| 26uuu国产日韩综合| 欧美在线观看18| 波多野结衣亚洲一区| 久久99久久久久| 青草国产精品久久久久久| 亚洲另类春色国产| 亚洲综合色婷婷| 一区二区三区丝袜| 一区二区三区在线免费播放| 国产精品美女久久久久久2018| 日韩精品最新网址| 欧美xxxxxxxxx| 久久久久久久久久看片| 在线视频欧美精品| 午夜视频在线观看一区| 一级做a爱片久久| 一区二区在线看| 日韩电影免费一区| 看电视剧不卡顿的网站| 免费不卡在线观看| 国产专区综合网| 91玉足脚交白嫩脚丫在线播放| 色综合中文综合网| 久久99精品久久久久久国产越南 | 欧美另类高清zo欧美| 精品剧情在线观看| 久久婷婷色综合| 国产精品久久三区| 午夜亚洲福利老司机| 久久精品国产精品青草| 国产精品一区二区三区网站| 一本一本久久a久久精品综合麻豆| 色视频成人在线观看免| 精品第一国产综合精品aⅴ| 国产嫩草影院久久久久| 日韩精品电影一区亚洲| 成人免费看片app下载| 欧美精品久久久久久久多人混战| 精品国产乱码久久久久久久久 | 国产精品一品二品| 91精品婷婷国产综合久久 | 精品一区二区在线观看| 欧美视频一区二区三区| 日本一区二区三区高清不卡| 一区二区在线电影| 成人免费看的视频| 色94色欧美sute亚洲线路一ni| 在线视频国内一区二区| 亚洲天堂av一区| 成人a区在线观看| 午夜欧美电影在线观看| 色拍拍在线精品视频8848| 久久久午夜精品| 国产一区999| 久久久久国产精品麻豆ai换脸 | 欧美老女人第四色| 亚洲一二三四区不卡| 欧美性做爰猛烈叫床潮| 亚洲丝袜美腿综合| 欧洲人成人精品| 亚州成人在线电影| 欧美一级片在线观看| 乱中年女人伦av一区二区| 欧美v国产在线一区二区三区| 六月婷婷色综合| 中文字幕av资源一区| 99视频精品在线| 亚洲成人午夜电影| 欧美大片一区二区三区| 国产99精品视频| 亚洲视频香蕉人妖| 欧美一区二区黄色| 国产成人精品三级麻豆| 亚洲天堂精品在线观看| 欧美日韩和欧美的一区二区| 九九视频精品免费| 国产精品家庭影院| 日韩欧美在线1卡| 成人h精品动漫一区二区三区| 亚洲一区二区在线观看视频| 欧美videofree性高清杂交| 97精品电影院| 国产成人夜色高潮福利影视| 亚洲一区影音先锋| 欧美韩国一区二区| 日韩欧美中文字幕精品| 另类小说一区二区三区| 亚洲第一搞黄网站| 国产日韩欧美一区二区三区乱码| 欧美色精品天天在线观看视频| 国产精品综合二区| 免费在线观看视频一区| 一级精品视频在线观看宜春院| 在线成人小视频| www.日韩精品| 成人h动漫精品一区二区| 国产一区二区三区黄视频| 美女网站色91| 久久99国产精品麻豆| 日本美女视频一区二区| 亚洲一区二区三区美女| 亚洲最大色网站| 亚洲精品国产无天堂网2021| 亚洲人成网站精品片在线观看| 日本一区二区三级电影在线观看| 精品国产免费人成电影在线观看四季| 正在播放亚洲一区| 欧美大片在线观看一区| 2024国产精品| 国产精品全国免费观看高清| 国产欧美精品国产国产专区| 国产精品成人免费| 一区二区三区精品| 日本成人在线一区| 国产精品一区二区久激情瑜伽| aaa欧美日韩| 欧美一级日韩不卡播放免费| 久久久www成人免费毛片麻豆| 国产欧美精品在线观看| 亚洲激情欧美激情| 看片网站欧美日韩| 91小宝寻花一区二区三区| 欧美三级中文字幕在线观看| 日韩精品影音先锋|