static void GetApplication(MessageHandler *handler, NETFILE *fp, ProcessNode *node) { int i; ConvFuncs *conv; conv = handler->serialize; LBS_EmitStart(iobuff); RecvLargeString(fp, iobuff); ON_IO_ERROR(fp, badio); ConvSetRecName(handler->conv, node->mcprec->name); conv->UnPackValue(handler->conv, LBS_Body(iobuff), node->mcprec->value); if (node->linkrec != NULL) { ConvSetRecName(handler->conv, node->linkrec->name); conv->UnPackValue(handler->conv, LBS_Body(iobuff), node->linkrec->value); } if (node->sparec != NULL) { ConvSetRecName(handler->conv, node->sparec->name); conv->UnPackValue(handler->conv, LBS_Body(iobuff), node->sparec->value); } for (i = 0; i < node->cWindow; i++) { if (node->scrrec[i] != NULL) { ConvSetRecName(handler->conv, node->scrrec[i]->name); conv->UnPackValue(handler->conv, LBS_Body(iobuff), node->scrrec[i]->value); } } DumpNode(node); badio: return; }
static void DumpByXML( ValueStruct *val, char *name) { CONVOPT *opt; unsigned char buff[SIZE_BUFF]; if ( val != NULL ) { opt = NewConvOpt(); ConvSetCodeset(opt,DUMP_CODE); ConvSetXmlType(opt,XML_TYPE1); ConvSetIndent(opt,TRUE); ConvSetType(opt,FALSE); ConvSetRecName(opt,name); memset(buff,0,SIZE_BUFF); XML_PackValue(opt,buff,val); printf("%s\n",buff); } }
static void ExecuteDB_Server(MessageHandler *handler) { RecordStruct *rec; ValueStruct *value, *ret; PathStruct *path; DB_Operation *op; size_t size; int rno, pno, ono; DBCOMM_CTRL ctrl; char *rname, *pname, *func; ConvFuncs *conv; InitializeCTRL(&ctrl); conv = handler->serialize; while (TRUE) { dbgmsg("read"); LBS_EmitStart(dbbuff); RecvLargeString(fpDBR, dbbuff); ON_IO_ERROR(fpDBR, badio); ConvSetRecName(handler->conv, recDBCTRL->name); InitializeValue(recDBCTRL->value); conv->UnPackValue(handler->conv, LBS_Body(dbbuff), recDBCTRL->value); rname = ValueStringPointer(GetItemLongName(recDBCTRL->value, "rname")); strncpy(ctrl.rname, rname, SIZE_NAME); value = NULL; ret = NULL; if ((rname != NULL) && ((rno = (int)(long)g_hash_table_lookup(DB_Table, rname)) != 0)) { ctrl.rno = rno - 1; rec = ThisDB[ctrl.rno]; value = rec->value; pname = ValueStringPointer(GetItemLongName(recDBCTRL->value, "pname")); strncpy(ctrl.pname, pname, SIZE_NAME); if ((pno = (int)(long)g_hash_table_lookup(rec->opt.db->paths, pname)) != 0) { ctrl.pno = pno - 1; path = rec->opt.db->path[pno - 1]; value = (path->args != NULL) ? path->args : value; } else { ctrl.pno = 0; path = NULL; } } else { rec = NULL; path = NULL; } func = ValueStringPointer(GetItemLongName(recDBCTRL->value, "func")); if (*func != 0) { if (path == NULL) { Error("path is NULL"); } else if ((ono = (int)(long)g_hash_table_lookup(path->opHash, func)) != 0) { op = path->ops[ono - 1]; value = (op->args != NULL) ? op->args : value; } if (rec != NULL) { ConvSetRecName(handler->conv, rec->name); } else { Error("rec is NULL"); } InitializeValue(value); conv->UnPackValue(handler->conv, LBS_Body(dbbuff), value); strncpy(ctrl.func, func, SIZE_FUNC); ret = ExecDB_Process(&ctrl, rec, value); } else { ctrl.rc = 0; } dbgmsg("write"); SetValueInteger(GetItemLongName(recDBCTRL->value, "rc"), ctrl.rc); ConvSetRecName(handler->conv, recDBCTRL->name); LBS_EmitStart(dbbuff); size = conv->SizeValue(handler->conv, recDBCTRL->value); LBS_ReserveSize(dbbuff, size, FALSE); conv->PackValue(handler->conv, LBS_Body(dbbuff), recDBCTRL->value); LBS_EmitEnd(dbbuff); SendLargeString(fpDBW, dbbuff); ON_IO_ERROR(fpDBW, badio); if (ret != NULL) { Send(fpDBW, conv->fsep, strlen(conv->fsep)); ON_IO_ERROR(fpDBW, badio); LBS_EmitStart(dbbuff); if (rec != NULL) { ConvSetRecName(handler->conv, rec->name); } size = conv->SizeValue(handler->conv, ret); LBS_ReserveSize(dbbuff, size, FALSE); conv->PackValue(handler->conv, LBS_Body(dbbuff), ret); LBS_EmitEnd(dbbuff); SendLargeString(fpDBW, dbbuff); ON_IO_ERROR(fpDBW, badio); FreeValueStruct(ret); } Send(fpDBW, conv->bsep, strlen(conv->bsep)); ON_IO_ERROR(fpDBW, badio); } badio: return; }
static void PutApplication(MessageHandler *handler, NETFILE *fp, ProcessNode *node) { int i; size_t size; ConvFuncs *conv; DumpNode(node); conv = handler->serialize; ConvSetRecName(handler->conv, node->mcprec->name); size = conv->SizeValue(handler->conv, node->mcprec->value); LBS_EmitStart(iobuff); LBS_ReserveSize(iobuff, size, FALSE); conv->PackValue(handler->conv, LBS_Body(iobuff), node->mcprec->value); LBS_EmitEnd(iobuff); SendLargeString(fp, iobuff); ON_IO_ERROR(fp, badio); Send(fp, conv->fsep, strlen(conv->fsep)); ON_IO_ERROR(fp, badio); if (node->linkrec != NULL) { ConvSetRecName(handler->conv, node->linkrec->name); size = conv->SizeValue(handler->conv, node->linkrec->value); LBS_EmitStart(iobuff); LBS_ReserveSize(iobuff, size, FALSE); conv->PackValue(handler->conv, LBS_Body(iobuff), node->linkrec->value); LBS_EmitEnd(iobuff); SendLargeString(fp, iobuff); ON_IO_ERROR(fp, badio); Send(fp, conv->fsep, strlen(conv->fsep)); ON_IO_ERROR(fp, badio); } if (node->sparec != NULL) { ConvSetRecName(handler->conv, node->sparec->name); size = conv->SizeValue(handler->conv, node->sparec->value); LBS_EmitStart(iobuff); LBS_ReserveSize(iobuff, size, FALSE); conv->PackValue(handler->conv, LBS_Body(iobuff), node->sparec->value); LBS_EmitEnd(iobuff); SendLargeString(fp, iobuff); ON_IO_ERROR(fp, badio); } for (i = 0; i < node->cWindow; i++) { LBS_EmitStart(iobuff); if (node->scrrec[i] != NULL) { ConvSetRecName(handler->conv, node->scrrec[i]->name); size = conv->SizeValue(handler->conv, node->scrrec[i]->value); if (size > 0) { Send(fp, conv->fsep, strlen(conv->fsep)); ON_IO_ERROR(fp, badio); } LBS_ReserveSize(iobuff, size, FALSE); conv->PackValue(handler->conv, LBS_Body(iobuff), node->scrrec[i]->value); } LBS_EmitEnd(iobuff); SendLargeString(fp, iobuff); ON_IO_ERROR(fp, badio); } Send(fp, conv->bsep, strlen(conv->bsep)); ON_IO_ERROR(fp, badio); badio: return; }