/*! \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; } }
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; }
/** * 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; }
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; }
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); }
int ki_pres_refresh_watchers(sip_msg_t *msg, str *pres, str *event, int type) { return pres_refresh_watchers(pres, event, type, NULL, NULL); }