1. jsontxt = NSA_CMD pjs->jsoninput = jsontxt; pjs->pjson = json_token_parse(pjs->jsoninput); ns_json_in_cmd(pjs, pjs->pjson, &pjcmdroot);
  2. ns_jsonstate_t
  3. ns_jsoncmd_t
  4. pjsreq = new (ns_jsonrequest_t); pjsreq->pjroot_cmd = pjroot_cmd; ns_json_out_cmd(pjs, pjsreq);
  5. ns_generateresponse(pjsreq, pjsreq->pjerr);
  6. ns_jsonrequest_t
  7. ns_json_out_response(pjreq, pjerr, pjson_resp);
  8. foreach ($pjname,$pjvalue) (pjson) { pjsoncmd = ns_jsonobj2jsoncmd($pjvalue, NULL); Append to (pjroot_cmd); } *ppjcmd = pjroot_cmd;
  9. 1. foreach pjsoncmd (pjroot_cmd) { pjreq->pjcur_cmd = pjsoncmd; 2. dispatch(pjsoncmd->pcmd); a) if (pjreq->pjerr) { pjreq->cmdstate = CMDSTATE_ERROR; NSTHROW(e, rc, msg, backtrace, object, objtype); } 3. pjsoncmd->revert_cmd = revertcmd(pjsoncmd->pcmd); 4. foreach pjchild (pjsoncmd) { e = ns_json_out_cmd(pjs, pjreq->pjchild, pjreq); if (pjreq->cmdstate == CMDSTATE_ERROR) break; } if (pjreq->cmdstate == CMDSTATE_ERROR) break; } return (e);
  10. ns_jsonobj2jsoncmd pjsoncmd = []; pjarray = json_oject_array($pjvalue); foreach pjobj (pjarray) { 1. parguids = Parse arguids; 2. pgetcmd = ($name, parguids); 3. Execute pgetcmd and check if exists. 4. pcmd = (exists)?psetcmd:paddcmd; 5. Parse rest arguments and fill into pcmd; 6. pjcurr_cmd->pcmd = pcmd; pjcurr_cmd->parent_cmd = parent_cmd; 7. Append(pjsoncmd, pjcurr_cmd); 8. foreach (pjobj has "obj" as $pjname) { a) Append(pjcurr_cmd->pjchild, ns_jsonobj2jsoncmd($pjvalue(pjobj), pjcurr_cmd); } 9. If (parent_pcmd) { 1. Generate pbindcmd using (pjcurr_pcmd, parent_pcmd, bind_properties); 2. Append(pjsoncmd, pbindcmd); } } return (pjsoncmd);
  11. ns_json_out_cmd(ns_jsonstate_t pjs, ns_jsonrequest_t *pjreq, ns_jsoncmd_t *pjroot_cmd);
  12. ns_json_in_cmd(ns_jsonstate_t *pjs, ns_json_t *pjson, ns_jsoncmd_t **ppjcmd)
  13. Outpupt
  14. Error codes
  15. global context
    1. error message
    2. jsontxt
    3. json_object
    4. json_mode
    5. root_pcmds
    6. cur_ctx
  16. local context
    1. pcmd
    2. pcmdresp_list
    3. revert_cmd
    4. error message
    5. list_pcmds