int usrloc_dmq_send_contact(ucontact_t* ptr, str aor, int action, dmq_node_t* node) { srjson_doc_t jdoc; srjson_InitDoc(&jdoc, NULL); int flags; jdoc.root = srjson_CreateObject(&jdoc); if(jdoc.root==NULL) { LM_ERR("cannot create json root\n"); goto error; } flags = ptr->flags; flags &= ~FL_RPL; srjson_AddNumberToObject(&jdoc, jdoc.root, "action", action); srjson_AddStrToObject(&jdoc, jdoc.root, "aor", aor.s, aor.len); srjson_AddStrToObject(&jdoc, jdoc.root, "ruid", ptr->ruid.s, ptr->ruid.len); srjson_AddStrToObject(&jdoc, jdoc.root, "c", ptr->c.s, ptr->c.len); srjson_AddStrToObject(&jdoc, jdoc.root, "received", ptr->received.s, ptr->received.len); srjson_AddStrToObject(&jdoc, jdoc.root, "path", ptr->path.s, ptr->path.len); srjson_AddStrToObject(&jdoc, jdoc.root, "callid", ptr->callid.s, ptr->callid.len); srjson_AddStrToObject(&jdoc, jdoc.root, "user_agent", ptr->user_agent.s, ptr->user_agent.len); srjson_AddStrToObject(&jdoc, jdoc.root, "instance", ptr->instance.s, ptr->instance.len); srjson_AddNumberToObject(&jdoc, jdoc.root, "expires", ptr->expires); srjson_AddNumberToObject(&jdoc, jdoc.root, "cseq", ptr->cseq); srjson_AddNumberToObject(&jdoc, jdoc.root, "flags", flags); srjson_AddNumberToObject(&jdoc, jdoc.root, "cflags", ptr->cflags); srjson_AddNumberToObject(&jdoc, jdoc.root, "q", ptr->q); srjson_AddNumberToObject(&jdoc, jdoc.root, "last_modified", ptr->last_modified); srjson_AddNumberToObject(&jdoc, jdoc.root, "methods", ptr->methods); srjson_AddNumberToObject(&jdoc, jdoc.root, "reg_id", ptr->reg_id); jdoc.buf.s = srjson_PrintUnformatted(&jdoc, jdoc.root); if(jdoc.buf.s==NULL) { LM_ERR("unable to serialize data\n"); goto error; } jdoc.buf.len = strlen(jdoc.buf.s); LM_DBG("sending serialized data %.*s\n", jdoc.buf.len, jdoc.buf.s); if (usrloc_dmq_send(&jdoc.buf, node)!=0) { goto error; } jdoc.free_fn(jdoc.buf.s); jdoc.buf.s = NULL; srjson_DestroyDoc(&jdoc); return 0; error: if(jdoc.buf.s!=NULL) { jdoc.free_fn(jdoc.buf.s); jdoc.buf.s = NULL; } srjson_DestroyDoc(&jdoc); return -1; }
int usrloc_dmq_request_sync() { srjson_doc_t jdoc; if(_dmq_usrloc_sync==0) return 0; LM_DBG("requesting sync from dmq peers\n"); srjson_InitDoc(&jdoc, NULL); jdoc.root = srjson_CreateObject(&jdoc); if(jdoc.root==NULL) { LM_ERR("cannot create json root\n"); goto error; } srjson_AddNumberToObject(&jdoc, jdoc.root, "action", DMQ_SYNC); jdoc.buf.s = srjson_PrintUnformatted(&jdoc, jdoc.root); if(jdoc.buf.s==NULL) { LM_ERR("unable to serialize data\n"); goto error; } jdoc.buf.len = strlen(jdoc.buf.s); LM_DBG("sending serialized data %.*s\n", jdoc.buf.len, jdoc.buf.s); if (usrloc_dmq_send(&jdoc.buf, 0)!=0) { goto error; } jdoc.free_fn(jdoc.buf.s); jdoc.buf.s = NULL; srjson_DestroyDoc(&jdoc); return 0; error: if(jdoc.buf.s!=NULL) { jdoc.free_fn(jdoc.buf.s); jdoc.buf.s = NULL; } srjson_DestroyDoc(&jdoc); return -1; }