Exemple #1
0
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;
}
Exemple #2
0
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);
	}
}
Exemple #3
0
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;
}
Exemple #4
0
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;
}