int DoMessage(int id) { int status=0; static Message *(*processMessage)(Connection *,Message *) = 0; Connection *c=FindConnection(id,0); if (processMessage == 0) { DESCRIPTOR(MdsIpSrvShr,"MdsIpSrvShr"); DESCRIPTOR(procmsg,"ProcessMessage"); status = LibFindImageSymbol(&MdsIpSrvShr,&procmsg,&processMessage); } if (c && processMessage) { Message *msgptr = GetMdsMsg(id,&status); Message *ans=0; if (status & 1) { ans = (*processMessage)(c, msgptr); if (ans) { status = SendMdsMsg(id, ans, 0); free(ans); } } else CloseConnection(id); if (msgptr) free(msgptr); } return status; }
int GetAnswerInfoTS(int id, char *dtype, short *length, char *ndims, int *dims, int *numbytes, void * *dptr, void **mout) { int status; int i; Message *m; *mout = 0; *numbytes = 0; m = GetMdsMsg(id, &status); if (status != 1) { *dtype = 0; *length = 0; *ndims = 0; *numbytes = 0; *dptr = 0; if (m) { free(m); *mout=0; } return 0; } if (m->h.ndims) { *numbytes = m->h.length; for (i=0;i<m->h.ndims;i++) { #ifdef __CRAY dims[i] = i % 2 ? m->h.dims[i/2] & 0xffffffff : (*m)->h.dims[i/2] >> 32; #else dims[i] = m->h.dims[i]; #endif *numbytes *= dims[i]; #ifdef DEBUG printf("dim[%d] = %d\n",i,dims[i]); #endif } for (i=m->h.ndims;i < MAX_DIMS; i++) dims[i] = 0; }
Message *GetMdsMsgOOB(int id, int *status) { return GetMdsMsg(id, status); }