예제 #1
0
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;
}
예제 #2
0
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;
  }
예제 #3
0
Message *GetMdsMsgOOB(int id, int *status) {
  return GetMdsMsg(id, status);
}