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

📄 plugin.c

📁 partysip 插件开发 用于实时在线管理
💻 C
📖 第 1 页 / 共 2 页
字号:
  /* search a related package */  osip_message_header_get_byname(request, "event", 0, &event);  if (event==NULL || event->hvalue==NULL)    {      /* serach for compact form of Event header: "o" */      osip_message_header_get_byname(request, "o", 0, &event);      if (event==NULL || event->hvalue==NULL)	{	  OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_INFO2, NULL,				  "%s plugin: missing event header in SUBSCRIBE request!\n", PLUGIN_NAME));	}    }  /* default is presence */  if (event==NULL || event->hvalue==NULL)    osip_strncpy(eventp, "presence", 8);  else    snprintf(eventp, 256, event->hvalue);      if (0==osip_strcasecmp(eventp, "presence"))    { }  else    {#if 0      psp_request_set_uas_status (psp_req, 489);      psp_request_set_mode (psp_req, PSP_UAS_MODE);      psp_request_set_state (psp_req, PSP_MANDATE);#endif            /* not handled on server */      psp_request_set_state (psp_req, PSP_CONTINUE);      OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_WARNING, NULL,			      "%s plugin: unsupported package extension (%s)!\n", PLUGIN_NAME, event->hvalue));      return 0;    }   /* reject message where attachment type is not supported */  if (osip_list_eol(request->accepts, 0))    {      /* the default one is always accepted */    }  else    {      int found=0;      pos=0;      accept=NULL;      while (!osip_list_eol(request->accepts, pos))	{	  accept = (osip_accept_t *) osip_list_get(request->accepts, pos);	  if (accept!=NULL && accept->type!=NULL	      && accept->subtype!=NULL	      && 0==osip_strcasecmp(eventp, "presence")	      && 0==osip_strcasecmp(accept->type, "application")	      && 0==osip_strcasecmp(accept->subtype, "pidf+xml"))	    {	      found=1;	      break;	    }	  else if (accept!=NULL && accept->type!=NULL	      && accept->subtype!=NULL	      && 0==osip_strcasecmp(eventp, "presence")	      && 0==osip_strcasecmp(accept->type, "application")	      && 0==osip_strcasecmp(accept->subtype, "xpidf+xml"))	    {	      found=1;	      break;	    }	  pos++;	}      if (found==0)	{	  psp_request_set_uas_status (psp_req, 415);	  psp_request_set_mode (psp_req, PSP_UAS_MODE);	  psp_request_set_state (psp_req, PSP_MANDATE);	  return 0;	}    }    if (request->from==NULL      ||request->from->url==NULL      ||request->from->url->username==NULL      ||request->from->url->host==NULL      ||request->req_uri==NULL      ||request->req_uri->username==NULL      ||request->req_uri->host==NULL)    {      OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_WARNING, NULL,			      "%s plugin: no defined target for SUBSCRIBE request\n", PLUGIN_NAME));      psp_request_set_uas_status (psp_req, 400);      psp_request_set_mode (psp_req, PSP_UAS_MODE);      psp_request_set_state (psp_req, PSP_MANDATE);      return 0;    }  /* is user authorized to view subscription? */  i = module_subscribe_authorize_user(request->from, request->req_uri, eventp);  if (i>=300)    {      psp_request_set_uas_status (psp_req, i);      psp_request_set_mode (psp_req, PSP_UAS_MODE);      psp_request_set_state (psp_req, PSP_MANDATE);      return 0;    }  osip_from_param_get_byname (request->to, "tag", &tag_to);#define MIN_EXPIRES_HEADER 500  osip_message_header_get_byname(request, "expires",				 0,				 &expires);  if (expires!=NULL && expires->hvalue!=NULL      && 0==osip_strcasecmp(expires->hvalue, "0"))    {      OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_WARNING, NULL,			      "%s plugin: dialog for SUBSCRIBE is closed\n", PLUGIN_NAME));      if (tag_to==NULL || tag_to->gvalue==NULL)	{	  psp_request_set_uas_status (psp_req, 423); /* too short??? */	  psp_request_set_mode (psp_req, PSP_UAS_MODE);	  psp_request_set_state (psp_req, PSP_MANDATE);	  return 0;	}      /* delete subscription */      module_subscribe_delete_subscription(tag_to->gvalue,request->from,request->to, eventp);      psp_request_set_uas_status (psp_req, 200); /* close subscription */      psp_request_set_mode (psp_req, PSP_UAS_MODE);      psp_request_set_state (psp_req, PSP_MANDATE);      return 0;    }  else if (expires!=NULL && expires->hvalue!=NULL	   && 0!=osip_strcasecmp(expires->hvalue, "0"))    {      int exp = atoi(expires->hvalue);      if (exp<MIN_EXPIRES_HEADER)	{	  OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_WARNING, NULL,				  "%s plugin: SUBSCRIBE within dialog\n", PLUGIN_NAME));	  psp_request_set_uas_status (psp_req, 423);	  psp_request_set_mode (psp_req, PSP_UAS_MODE);	  psp_request_set_state (psp_req, PSP_MANDATE);	  return 0;	}    }  if (tag_to!=NULL && tag_to->gvalue!=NULL )    {      /* subscription should already exist! */            /* is there any dialog for this to tag */      i = module_subscribe_dialog_exist(tag_to->gvalue, eventp);      if (i!=0)	{	  psp_request_set_uas_status (psp_req, 481);	  psp_request_set_mode (psp_req, PSP_UAS_MODE);	  psp_request_set_state (psp_req, PSP_MANDATE);	  return 0;	}            OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_WARNING, NULL,			      "%s plugin: SUBSCRIBE within dialog\n",			      PLUGIN_NAME));      psp_request_set_uas_status (psp_req, 200);      psp_request_set_mode (psp_req, PSP_UAS_MODE);      psp_request_set_state (psp_req, PSP_MANDATE);      return 0;    }  i = module_subscribe_authorize_user(request->from, request->req_uri, eventp);  if (i>=300)    {      psp_request_set_uas_status (psp_req, i);      psp_request_set_mode (psp_req, PSP_UAS_MODE);      psp_request_set_state (psp_req, PSP_MANDATE);      return 0;    }  psp_request_set_uas_status (psp_req, 202);  psp_request_set_mode (psp_req, PSP_UAS_MODE);  psp_request_set_state (psp_req, PSP_MANDATE);  OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_WARNING, NULL,                          "%s plugin: accepted subscription!\n",			  PLUGIN_NAME));  return 0;}intcb_plugin_complete_2xxanswer (psp_request_t * psp_req, osip_message_t * response)   /* HOOK MIDDLE */{  osip_message_t *request;  osip_header_t *expires;  request = psp_request_get_request(psp_req);  if (!MSG_IS_SUBSCRIBE (request))    {      /* bug?? */      psp_request_set_state (psp_req, PSP_CONTINUE);      return 0;    }  if (0 != psp_core_is_responsible_for_this_domain (request->						    req_uri))    {      /* this module only handle SUBSCRIBE to local users */      psp_request_set_state (psp_req, PSP_CONTINUE);      return 0;    }  OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_INFO4, NULL,			  "mysqldb_auth plugin: complete answer in this 2xx for SUBSCRIBE!\n"));    osip_message_header_get_byname(response, "expires", 0, &expires);  if (expires==NULL || expires->hvalue==NULL)    {    }    osip_message_header_get_byname(request, "expires", 0, &expires);  if (expires==NULL || expires->hvalue==NULL)    {      osip_message_set_expires(response, "900");    }  else if (expires!=NULL && expires->hvalue!=NULL	   && 0==osip_strcasecmp(expires->hvalue, "0"))    {      OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_WARNING, NULL,			      "%s plugin: dialog for SUBSCRIBE is closed\n", PLUGIN_NAME));      osip_message_set_expires(response, expires->hvalue);      return 0;    }  else    {      osip_message_set_expires(response, expires->hvalue);    }    module_subscribe_store_dialog(request, response);    psp_request_set_state (psp_req, PSP_CONTINUE);  return 0;}intcb_plugin_complete_4xxanswer (psp_request_t * psp_req, osip_message_t * response)   /* HOOK MIDDLE */{  int status = psp_request_get_uas_status (psp_req);  osip_message_t *request;  request = psp_request_get_request(psp_req);  if (!MSG_IS_SUBSCRIBE (request))    {      /* bug?? */      psp_request_set_state (psp_req, PSP_CONTINUE);      return 0;    }  if (0 != psp_core_is_responsible_for_this_domain (request->						    req_uri))    {      /* this module only handle SUBSCRIBE to local users */      psp_request_set_state (psp_req, PSP_CONTINUE);      return 0;    }  OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_INFO4, NULL,                          "%s plugin: complete answer in this 2xx for SUBSCRIBE!\n",			  PLUGIN_NAME));  if (status==423)    {      osip_message_set_header(response, "Min-Expires", "900");    }  if (status==415)    {      osip_message_set_accept(response, "application/pidf+xml");    }	    psp_request_set_state (psp_req, PSP_CONTINUE);  return 0;}

⌨️ 快捷键说明

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