static ValueStruct * FETCH( DBG_Struct *dbg, DBCOMM_CTRL *ctrl, RecordStruct *rec, ValueStruct *args) { ValueStruct *ret,*v; char vname[256]; ENTER_FUNC; ret = NULL; ctrl->rc = MCP_BAD_OTHER; if (rec->type != RECORD_DB || !hasData){ ctrl->rc = MCP_BAD_ARG; return ret; } if (idx >= numData) { ctrl->rc = MCP_EOF; return ret; } if (sysdbvals == NULL) { ctrl->rc = MCP_EOF; return ret; } snprintf(vname,sizeof(vname),"values[%d]",idx); v = GetItemLongName(sysdbvals,vname); if (v != NULL) { ret = DuplicateValue(v,TRUE); } idx += 1; ctrl->rc = MCP_OK; LEAVE_FUNC; return ret; }
static ValueStruct * GETDATA( DBG_Struct *dbg, DBCOMM_CTRL *ctrl, RecordStruct *rec, ValueStruct *args) { ValueStruct *ret; PacketClass rc; ENTER_FUNC; ret = NULL; ctrl->rc = MCP_BAD_OTHER; if ( rec->type != RECORD_DB ) { ctrl->rc = MCP_BAD_ARG; } else { rc = SYSDB_GetData(NBCONN(dbg), args); if (rc == SESSION_CONTROL_OK) { ctrl->rc = MCP_OK; ret = DuplicateValue(args,TRUE); } else { ctrl->rc = MCP_BAD_OTHER; } } LEAVE_FUNC; return ret; }
static ValueStruct *_OpenXML(DBG_Struct *dbg, DBCOMM_CTRL *ctrl, RecordStruct *rec, ValueStruct *args) { int rc; ValueStruct *obj, *mode, *ret; char *buff; size_t size; xmlNodePtr root; DBG_Struct *mondbg; XMLpos = 0; XMLDoc = NULL; XMLmode = MODE_NONE; rc = MCP_BAD_OTHER; ret = NULL; if (rec->type != RECORD_DB) { rc = MCP_BAD_ARG; } else { if ((obj = GetItemLongName(args, "object")) != NULL && (mode = GetItemLongName(args, "mode")) != NULL) { XMLmode = ValueInteger(mode); if (XMLmode == MODE_WRITE) { XMLDoc = xmlNewDoc("1.0"); root = xmlNewDocNode(XMLDoc, NULL, "data", NULL); xmlDocSetRootElement(XMLDoc, root); ret = DuplicateValue(args, TRUE); rc = MCP_OK; } else { mondbg = GetDBG_monsys(); if (blob_export_mem(mondbg, ValueObjectId(obj), &buff, &size)) { if (size > 0) { XMLDoc = xmlReadMemory(buff, size, "http://www.montsuqi.org/", NULL, XML_PARSE_NOBLANKS | XML_PARSE_NOENT); if (XMLDoc != NULL) { rc = MCP_OK; } } xfree(buff); } } } else { rc = MCP_BAD_ARG; } } if (ctrl != NULL) { ctrl->rc = rc; } return ret; }
extern ValueStruct *MCP_GetDB_Define(char *name) { char buff[SIZE_LONGNAME + 1]; int rno, pno, ono; RecordStruct *rec; PathStruct *path; DB_Operation *op; ValueStruct *val, *ret; char *p, *pname, *oname; strcpy(buff, name); if ((p = strchr(buff, ':')) != NULL) { *p = 0; pname = p + 1; if ((p = strchr(pname, ':')) != NULL) { *p = 0; oname = p + 1; } else { oname = NULL; } } else { oname = NULL; pname = NULL; } val = NULL; if ((rno = (int)(long)g_hash_table_lookup(DB_Table, name)) != 0) { rec = ThisDB[rno - 1]; val = rec->value; if ((pname != NULL) && ((pno = (int)(long)g_hash_table_lookup( rec->opt.db->paths, pname)) != 0)) { path = rec->opt.db->path[pno - 1]; val = (path->args != NULL) ? path->args : val; if ((oname != NULL) && ((ono = (int)(long)g_hash_table_lookup(path->opHash, oname)) != 0)) { op = path->ops[ono - 1]; val = (op->args != NULL) ? op->args : val; } } } if (val != NULL) { ret = DuplicateValue(val, FALSE); } else { ret = NULL; } return (ret); }
static ValueStruct *_CloseXML(DBG_Struct *dbg, DBCOMM_CTRL *ctrl, RecordStruct *rec, ValueStruct *args) { ValueStruct *obj, *ret; xmlChar *buff; int size; DBG_Struct *mondbg; buff = NULL; ret = NULL; if (rec->type != RECORD_DB) { ctrl->rc = MCP_BAD_ARG; return NULL; } if ((obj = GetItemLongName(args, "object")) == NULL) { ctrl->rc = MCP_BAD_ARG; return NULL; } if (XMLDoc == NULL) { ctrl->rc = MCP_BAD_OTHER; return NULL; } ctrl->rc = MCP_OK; if (XMLmode == MODE_WRITE) { xmlDocDumpFormatMemoryEnc(XMLDoc, &buff, &size, "UTF-8", 0); if (buff != NULL) { mondbg = GetDBG_monsys(); ValueObjectId(obj) = blob_import_mem(mondbg, 0, "XMLIO.xml", "application/xml", 0, buff, size); if (ValueObjectId(obj) != GL_OBJ_NULL) { ret = DuplicateValue(args, TRUE); ctrl->rc = MCP_OK; } else { Warning("monblob_import_mem failure"); ctrl->rc = MCP_BAD_OTHER; } } xfree(buff); } xmlFreeDoc(XMLDoc); XMLDoc = NULL; XMLpos = 0; XMLmode = MODE_NONE; return ret; }
static ValueStruct *_ReadXML(DBG_Struct *dbg, DBCOMM_CTRL *ctrl, RecordStruct *rec, ValueStruct *args) { xmlNodePtr node; xmlNodePtr root; ValueStruct *ret; int i; ret = NULL; ctrl->rc = MCP_BAD_OTHER; if (rec->type != RECORD_DB) { ctrl->rc = MCP_BAD_ARG; return NULL; } if (XMLDoc == NULL || XMLmode != MODE_READ) { return NULL; } root = xmlDocGetRootElement(XMLDoc); if (root == NULL || root->children == NULL) { return NULL; } for (node = root->children, i = 0; node != NULL; node = node->next, i++) { root = NULL; if (i == XMLpos) { root = node; break; } } XMLpos++; if (root == NULL) { return NULL; } ret = DuplicateValue(args, FALSE); ctrl->rc = XMLNode2Value(ret, root); #ifdef TRACE DumpValueStruct(ret); #endif return (ret); }
extern int main( int argc, char **argv) { #define SIZE_DATA 128 char name[SIZE_DATA]; unsigned char *p; int i; ValueStruct *val , *val2; unsigned char *buff; char method[SIZE_LONGNAME+1]; FILE *fp; RecordDir = "."; RecParserInit(); val = BuildMcpArea(10); /* set */ printf("***** Value setting *****\n"); SetValueString(GetItemLongName(val,"func"),"aaa",SRC_CODE); SetValueString(GetItemLongName(val,"rc"),"0",SRC_CODE); SetValueString(GetItemLongName(val,"dc.window"),"1 Ë",SRC_CODE); SetValueString(GetItemLongName(val,"dc.widget"),"widget",SRC_CODE); SetValueString(GetItemLongName(val,"dc.event"),"1002 ",SRC_CODE); SetValueString(GetItemLongName(val,"dc.fromwin"),"fromwin",SRC_CODE); SetValueString(GetItemLongName(val,"dc.status"),"status",SRC_CODE); SetValueString(GetItemLongName(val,"dc.puttype"),"puttype",SRC_CODE); SetValueString(GetItemLongName(val,"dc.term"),"term",SRC_CODE); SetValueString(GetItemLongName(val,"dc.user"),"user",SRC_CODE); for ( i = 0 ; i < N_PATH ; i ++ ) { sprintf(name,"db.path[%d].blocks",i); SetValueInteger(GetItemLongName(val,name),i); sprintf(name,"db.path[%d].rname",i); SetValueInteger(GetItemLongName(val,name),i); sprintf(name,"db.path[%d].pname",i); SetValueInteger(GetItemLongName(val,name),i); sprintf(name,"db.path[%d].name",i); SetValueString(GetItemLongName(val,name),name,SRC_CODE); } SetValueString(GetItemLongName(val,"private.count"),"1",SRC_CODE); for ( i = 0 ; i < 100 ; i ++ ) { sprintf(name,"private.swindow[%d]",i); SetValueString(GetItemLongName(val,name),name,SRC_CODE); } for ( i = 0 ; i < ValueArraySize(GetItemLongName(val,"private.state")) ; i ++ ) { sprintf(name,"private.state[%d]",i); SetValueString(GetItemLongName(val,name),name,SRC_CODE); } for ( i = 0 ; i < ValueArraySize(GetItemLongName(val,"private.index")) ; i ++ ) { sprintf(name,"private.index[%d]",i); SetValueString(GetItemLongName(val,name),name,SRC_CODE); } SetValueString(GetItemLongName(val,"private.pstatus"),"1",SRC_CODE); SetValueString(GetItemLongName(val,"private.pputtype"),"2",SRC_CODE); SetValueString(GetItemLongName(val,"private.prc"),"3",SRC_CODE); buff = xmalloc(SIZE_BUFF); memset(buff,0,SIZE_BUFF); for ( p = buff, i = 0 ; i < 256 ; i ++ , p ++) { *p = (unsigned char)i; } SetValueBinary(GetItemLongName(val,"bin"),buff,256); printf("***** SOAP ****\n"); memset(buff,0,SIZE_BUFF); SOAP_PackValue(buff,val,"Put","mcp","http://oreore",TRUE,FALSE); printf("%s\n",buff); fp = fopen("test.SOAP","w"); fprintf(fp,"%s\n",buff); fclose(fp); val2 = DuplicateValue(val,FALSE); SOAP_UnPackValue(val2,(char *)buff,method); printf("method = [%s]\n",method); DumpByXML(val2,"mcparea"); SOAP_PackValue(buff,val,"Put","mcp","http://oreore",TRUE,FALSE); val2 = SOAP_LoadValue((char *)buff,method); printf("method = [%s]\n",method); DumpByXML(val2,"mcparea"); //DumpValueStruct(val2); return (0); }