コード例 #1
0
ファイル: presence.c プロジェクト: GreenfieldTech/kamailio
/*! \brief
 *  rpc cmd: presence.refreshWatchers
 *			\<presentity_uri>
 *			\<event>
 *          \<refresh_type> // can be:  = 0 -> watchers autentification type or
 *									  != 0 -> publish type //
 *		* */
void rpc_presence_refresh_watchers(rpc_t* rpc, void* ctx)
{
	str pres_uri = {0,0};
	str event = {0,0 };
	str file_uri = {0, 0};
	str filename = {0, 0};
	unsigned int refresh_type;
	int pn;

	LM_DBG("initiation refresh of watchers\n");

	pn = rpc->scan(ctx, "SSu*SS", &pres_uri, &event, &refresh_type,
				&file_uri, &filename);
	if(pn < 3) {
		rpc->fault(ctx, 500, "Not enough parameters");
		return;
	}

	if(pres_uri.s == NULL || pres_uri.len== 0) {
		LM_ERR("empty uri\n");
		rpc->fault(ctx, 500, "Empty presentity URI");
		return;
	}

	if(event.s== NULL || event.len== 0) {
		LM_ERR( "empty event parameter\n");
		rpc->fault(ctx, 500, "Empty event parameter");
		return;
	}
	LM_DBG("event '%.*s'\n",  event.len, event.s);

	if(refresh_type == 2) {
		if(pn<5) {
			LM_ERR( "empty file uri or name parameters\n");
			rpc->fault(ctx, 500, "No file uri or name parameters");
			return;

		}
		if(file_uri.s== NULL || file_uri.len== 0) {
			LM_ERR( "empty file uri parameter\n");
			rpc->fault(ctx, 500, "Empty file uri parameter");
			return;
		}

		if(filename.s== NULL || filename.len== 0) {
			LM_ERR( "empty file name parameter\n");
			rpc->fault(ctx, 500, "Empty file name parameter");
			return;
		}
	}

	if(pres_refresh_watchers(&pres_uri, &event, refresh_type,
				file_uri.len ? &file_uri: NULL,
				filename.len ? &filename : NULL)<0) {
		rpc->fault(ctx, 500, "Execution failed");
		return;

	}
}
コード例 #2
0
ファイル: presence.c プロジェクト: AlessioCasco/kamailio
static int w_pres_refresh_watchers5(struct sip_msg *msg, char *puri,
		char *pevent, char *ptype, char *furi, char *fname)
{
	str pres_uri, event, file_uri, filename;
	int refresh_type;

	if(fixup_get_svalue(msg, (gparam_p)puri, &pres_uri)!=0)
	{
		LM_ERR("invalid uri parameter");
		return -1;
	}

	if(fixup_get_svalue(msg, (gparam_p)pevent, &event)!=0)
	{
		LM_ERR("invalid event parameter");
		return -1;
	}

	if(fixup_get_ivalue(msg, (gparam_p)ptype, &refresh_type)!=0)
	{
		LM_ERR("no type value\n");
		return -1;
	}

	if(fixup_get_svalue(msg, (gparam_p)furi, &file_uri)!=0)
	{
		LM_ERR("invalid file uri parameter");
		return -1;
	}

	if(fixup_get_svalue(msg, (gparam_p)fname, &filename)!=0)
	{
		LM_ERR("invalid filename parameter");
		return -1;
	}

	if (refresh_type != 2)
	{
		LM_ERR("Wrong number of parameters for type %d\n", refresh_type);
		return -1;
	}

	if(pres_refresh_watchers(&pres_uri, &event, refresh_type, &file_uri, &filename)<0)
		return -1;

	return 1;
}
コード例 #3
0
ファイル: presence.c プロジェクト: AlessioCasco/kamailio
/**
 * wrapper for pres_refresh_watchers to use in config
 */
static int w_pres_refresh_watchers(struct sip_msg *msg, char *puri,
		char *pevent, char *ptype)
{
	str pres_uri;
	str event;
	int refresh_type;

	if(fixup_get_svalue(msg, (gparam_p)puri, &pres_uri)!=0)
	{
		LM_ERR("invalid uri parameter");
		return -1;
	}

	if(fixup_get_svalue(msg, (gparam_p)pevent, &event)!=0)
	{
		LM_ERR("invalid uri parameter");
		return -1;
	}

	if(fixup_get_ivalue(msg, (gparam_p)ptype, &refresh_type)!=0)
	{
		LM_ERR("no type value\n");
		return -1;
	}

	if (refresh_type == 2)
	{
		LM_ERR("Wrong number of parameters for type 2\n");
		return -1;
	}

	if(pres_refresh_watchers(&pres_uri, &event, refresh_type, NULL, NULL)<0)
		return -1;

	return 1;
}
コード例 #4
0
ファイル: presence.c プロジェクト: AlessioCasco/kamailio
static struct mi_root* mi_refreshWatchers(struct mi_root* cmd, void* param)
{
	struct mi_node* node= NULL;
	str pres_uri, event, file_uri = {0, 0}, filename = {0, 0};
	unsigned int refresh_type;

	LM_DBG("start\n");
	
	node = cmd->node.kids;
	if(node == NULL)
		return 0;

	/* Get presentity URI */
	pres_uri = node->value;
	if(pres_uri.s == NULL || pres_uri.len== 0)
	{
		LM_ERR( "empty uri\n");
		return init_mi_tree(404, "Empty presentity URI", 20);
	}
	
	node = node->next;
	if(node == NULL)
		return 0;
	event= node->value;
	if(event.s== NULL || event.len== 0)
	{
		LM_ERR( "empty event parameter\n");
		return init_mi_tree(400, "Empty event parameter", 21);
	}
	LM_DBG("event '%.*s'\n",  event.len, event.s);
	
	node = node->next;
	if(node == NULL)
		return 0;
	if(node->value.s== NULL || node->value.len== 0)
	{
		LM_ERR( "empty refresh type parameter\n");
		return init_mi_tree(400, "Empty refresh type parameter", 28);
	}
	if(str2int(&node->value, &refresh_type)< 0)
	{
		LM_ERR("converting string to int\n");
		goto error;
	}

	if (refresh_type == 2)
	{
		node = node->next;
		if(node == NULL)
			return 0;
		file_uri = node->value;
		if(file_uri.s== NULL || file_uri.len== 0)
		{
			LM_ERR( "empty file uri parameter\n");
			return init_mi_tree(400, "Empty file uri parameter", 24);
		}

		node = node->next;
		if(node == NULL)
			return 0;
		filename = node->value;
		if(filename.s== NULL || filename.len== 0)
		{
			LM_ERR( "empty file name parameter\n");
			return init_mi_tree(400, "Empty file name parameter", 25);
		}
	}

	if(node->next!= NULL)
	{
		LM_ERR( "Too many parameters\n");
		return init_mi_tree(400, "Too many parameters", 19);
	}

	if(pres_refresh_watchers(&pres_uri, &event, refresh_type,
					file_uri.len ? &file_uri: NULL,
					filename.len ? &filename : NULL)<0)
		return 0;
	
	return init_mi_tree(200, "OK", 2);

error:
	return 0;
}
コード例 #5
0
ファイル: presence.c プロジェクト: GreenfieldTech/kamailio
int ki_pres_refresh_watchers_file(sip_msg_t *msg, str *pres, str *event,
		int type, str *file_uri, str *filename)
{
	return pres_refresh_watchers(pres, event, type, file_uri, filename);
}
コード例 #6
0
ファイル: presence.c プロジェクト: GreenfieldTech/kamailio
int ki_pres_refresh_watchers(sip_msg_t *msg, str *pres, str *event, int type)
{
	return pres_refresh_watchers(pres, event, type, NULL, NULL);
}