static void APISession( TermNode *term) { SessionData *data; APIData *api; char ld[SIZE_NAME+1]; char window[SIZE_NAME+1]; char user[SIZE_USER+1]; char host[SIZE_HOST+1]; data = NULL; RecvnString(term->fp, sizeof(ld), ld); ON_IO_ERROR(term->fp,badio); RecvnString(term->fp, sizeof(window), window); ON_IO_ERROR(term->fp,badio); RecvnString(term->fp, sizeof(user), user); ON_IO_ERROR(term->fp,badio); RecvnString(term->fp, sizeof(host), host); ON_IO_ERROR(term->fp,badio); data = InitAPISession(user,ld,window,host); if (data != NULL) { data->term = term; data->retry = 0; api = data->apidata; RecvLBS(term->fp, api->rec); data = Process(data); api = data->apidata; SendPacketClass(term->fp, api->status); ON_IO_ERROR(term->fp,badio2); if (api->status == WFC_API_OK) { SendLBS(term->fp, api->rec); ON_IO_ERROR(term->fp,badio2); } CloseNet(term->fp); badio2: FreeSessionData(data); } else { SendPacketClass(term->fp,WFC_API_NOT_FOUND); ON_IO_ERROR(term->fp,badio2); CloseNet(term->fp); } badio: ; }
PacketClass SYSDB_GetDataAll(NETFILE *fp, int *size, ValueStruct *vals) { PacketClass rc; LargeByteString *buf; rc = SESSION_CONTROL_NG; buf = NewLBS(); SendPacketClass(fp, SYSDATA_SYSDB); ON_IO_ERROR(fp, badio); SendPacketClass(fp, SYSDB_GET_DATA_ALL); ON_IO_ERROR(fp, badio); rc = RecvPacketClass(fp); *size = RecvInt(fp); RecvLBS(fp, buf); NativeUnPackValue(NULL, LBS_Body(buf), vals); badio: FreeLBS(buf); return rc; }
static PacketClass SYSDB_RequestCommon(NETFILE *fp, PacketClass pc, ValueStruct *val) { PacketClass rc; LargeByteString *buf; rc = SESSION_CONTROL_NG; buf = NewLBS(); LBS_ReserveSize(buf, NativeSizeValue(NULL, val), FALSE); NativePackValue(NULL, LBS_Body(buf), val); SendPacketClass(fp, SYSDATA_SYSDB); ON_IO_ERROR(fp, badio); SendPacketClass(fp, pc); ON_IO_ERROR(fp, badio); SendLBS(fp, buf); ON_IO_ERROR(fp, badio); rc = RecvPacketClass(fp); RecvLBS(fp, buf); NativeUnPackValue(NULL, LBS_Body(buf), val); badio: FreeLBS(buf); return rc; }
static SessionData * ReadTerminal( NETFILE *fp, SessionData *data) { LD_Node *ld; Bool fExit; int c; LargeByteString *scrdata; int i; ENTER_FUNC; fExit = FALSE; while (!fExit) { switch (c = RecvPacketClass(fp)) { case WFC_DATA: dbgmsg("recv DATA"); if (data != NULL) { RecvnString(fp,SIZE_NAME,data->hdr->window); ON_IO_ERROR(fp,badio); RecvnString(fp,SIZE_NAME,data->hdr->widget); ON_IO_ERROR(fp,badio); RecvnString(fp,SIZE_NAME,data->hdr->event); ON_IO_ERROR(fp,badio); data->w.sp = RecvInt(fp); ON_IO_ERROR(fp,badio); for (i=0;i<data->w.sp ;i++) { data->w.s[i].puttype = RecvChar(fp); ON_IO_ERROR(fp,badio); RecvnString(fp,SIZE_NAME,data->w.s[i].window); ON_IO_ERROR(fp,badio); } dbgprintf("window = [%s]",data->hdr->window); dbgprintf("widget = [%s]",data->hdr->widget); dbgprintf("event = [%s]",data->hdr->event); ld = g_hash_table_lookup(ComponentHash,data->hdr->window); if (ld != NULL) { dbgprintf("ld = [%s]",ld->info->name); dbgprintf("window = [%s]",data->hdr->window); scrdata = GetScreenData(data,data->hdr->window); if (scrdata != NULL) { SendPacketClass(fp,WFC_OK); ON_IO_ERROR(fp,badio); dbgmsg("send OK"); if (RecvPacketClass(fp) == WFC_DATA) { RecvLBS(fp,scrdata);ON_IO_ERROR(fp,badio); } data->hdr->puttype = SCREEN_NULL; } else { Error("invalid window [%s]",data->hdr->window); } if (data->ld != ld) { ChangeLD(data,ld); } } else { Error("component [%s] not found.",data->hdr->window); fExit = TRUE; } } else { fExit = TRUE; } break; case WFC_OK: dbgmsg("OK"); fExit = TRUE; break; case WFC_END: dbgmsg("END"); if ((ld = g_hash_table_lookup(APS_Hash, "session")) != NULL) { strncpy(data->hdr->window,"session_end", sizeof(data->hdr->window)); data->hdr->widget[0] = 0; sprintf(data->hdr->event,"SESSIONEND"); data->hdr->puttype = SCREEN_NULL; ChangeLD(data,ld); data->status = SESSION_STATUS_END; } else { data->status = SESSION_STATUS_ABORT; } fExit = TRUE; break; default: Warning("Invalid PacketClass in ReadTerminal [%X]", c); SendPacketClass(fp,WFC_NOT);ON_IO_ERROR(fp,badio); fExit = TRUE; data->status = SESSION_STATUS_ABORT; break; } } badio: LEAVE_FUNC; return(data); }