예제 #1
0
파일: tcaRef.c 프로젝트: Paresh1693/carmen
/* New version: install after Rich finishes testing with the Hero simulator */
X_IPC_REF_STATUS_TYPE x_ipcReferenceStatus(X_IPC_REF_PTR ref)
{
  X_IPC_REF_STATUS_TYPE status;

  (void)x_ipcQueryCentral(X_IPC_REF_STATUS_QUERY, (void *)&(ref->refId),
			(void *)&status);

  return status;
}
예제 #2
0
static FORMAT_PTR Named_Format(Format_Parse_Ptr parser, TokenPtr Token)
{ 
  NAMED_FORMAT_PTR namedFormat;
  FORMAT_PTR format;
  
  if (parser->formatStack == NULL) {
    parser->formatStack = x_ipc_strListCreate();
  }
  
  if (x_ipc_strListMemberItem(Token->value.str, parser->formatStack)) {
    /* found a recursive definition. just return pointer */
    return new_n_formatter(Token->value.str);
  }
  
  x_ipc_strListPush(strdup(Token->value.str), parser->formatStack);

  LOCK_M_MUTEX;
  namedFormat = 
    (NAMED_FORMAT_PTR)x_ipc_hashTableFind(Token->value.str,
				    GET_M_GLOBAL(formatNamesTable));
  UNLOCK_M_MUTEX;
  if (!namedFormat) {
#ifdef NMP_IPC
    if (GET_C_GLOBAL(serverRead) != CENTRAL_SERVER_ID) {
      if (x_ipcQueryCentral(X_IPC_NAMED_FORM_QUERY,
			  &Token->value.str, &format) != Success ||
	  !format) {
        X_IPC_MOD_WARNING2("Warning: Named Format %s is not registered\n%s\n",
			   Token->value.str, parser->ParseString);
        format = new_f_formatter(BadFormatFMT, NULL);
      }
    } else
#endif
      {
	X_IPC_MOD_WARNING2("Warning: Named Format %s is not registered\n%s\n",
			   Token->value.str, parser->ParseString);
	format = new_f_formatter(BadFormatFMT, NULL);
      }
  } else {
    /* Need to use the named formatter -- parse it now */
    if (!namedFormat->parsed) {
      namedFormat->format = 
	(FORMAT_PTR)ParseFormatString(namedFormat->definition);
      namedFormat->parsed = TRUE;
    }
    format = copyFormatter(namedFormat->format);
  }
  
  x_ipcFree((void *)x_ipc_strListPopItem(parser->formatStack));
  return format;
}
예제 #3
0
파일: ipc.c 프로젝트: Paresh1693/carmen
int IPC_numHandlers (const char *msgName)
{
  DIRECT_MSG_TYPE directInfo;
  X_IPC_RETURN_VALUE_TYPE status;
  int num;

  if (!msgName || strlen(msgName) == 0) {
    ipcSetError(IPC_Null_Argument); return -1;
  } else if (!X_IPC_CONNECTED()) {
    ipcSetError(IPC_Not_Connected); return -1;
  } else {
    status = x_ipcQueryCentral(X_IPC_DIRECT_MSG_QUERY, (void *)&msgName,
			       (void *)&directInfo);
    if (status == Success) {
      num = directInfo.numHandlers;
      x_ipcFreeReply(X_IPC_DIRECT_MSG_QUERY, &directInfo);
    } else {
      num = 0;
    }
    return num;
  }
}
예제 #4
0
파일: sendMsg.c 프로젝트: Paresh1693/carmen
void x_ipc_classModInitialize(void)
{
  X_IPC_MSG_CLASS_TYPE msg_class;
  CLASS_FORM_PTR classForm=NULL;
  
  /* 31-Aug-90: fedor: more and more difficult to do 
     query msg ref with a QueryClass format of "int" */
  
  msg_class = GoalClass;
  if (x_ipcQueryCentral(X_IPC_CLASS_INFO_QUERY, (void *)&msg_class,
			(void *)&classForm) == Success) {
    LOCK_M_MUTEX;
    ADD_CLASS_FORMAT(&msg_class, classForm);
    UNLOCK_M_MUTEX;
  }
  
  msg_class = CommandClass;
  if (x_ipcQueryCentral(X_IPC_CLASS_INFO_QUERY, (void *)&msg_class,
		      (void *)&classForm) == Success) {
    LOCK_M_MUTEX;
    ADD_CLASS_FORMAT(&msg_class, classForm);
    UNLOCK_M_MUTEX;
  }
  
  msg_class = ExceptionClass;
  if (x_ipcQueryCentral(X_IPC_CLASS_INFO_QUERY, (void *)&msg_class,
		      (void *)&classForm) == Success) {
    LOCK_M_MUTEX;
    ADD_CLASS_FORMAT(&msg_class, classForm);
    UNLOCK_M_MUTEX;
  }
  
  msg_class = PointMonitorClass;
  if (x_ipcQueryCentral(X_IPC_CLASS_INFO_QUERY, (void *)&msg_class,
		      (void *)&classForm) == Success) {
    LOCK_M_MUTEX;
    ADD_CLASS_FORMAT(&msg_class, classForm);
    UNLOCK_M_MUTEX;
  }
  
  msg_class = PollingMonitorClass;
  if (x_ipcQueryCentral(X_IPC_CLASS_INFO_QUERY, (void *)&msg_class,
		      (void *)&classForm) == Success) {
    LOCK_M_MUTEX;
    ADD_CLASS_FORMAT(&msg_class, classForm);
    UNLOCK_M_MUTEX;
  }
  
  msg_class = DemonMonitorClass;
  if (x_ipcQueryCentral(X_IPC_CLASS_INFO_QUERY, (void *)&msg_class,
		      (void *)&classForm) == Success) {
    LOCK_M_MUTEX;
    ADD_CLASS_FORMAT(&msg_class, classForm);
    UNLOCK_M_MUTEX;
  }
  
  msg_class = ExecHndClass;
  if (x_ipcQueryCentral(X_IPC_CLASS_INFO_QUERY, (void *)&msg_class,
		      (void *)&classForm) == Success) {
    LOCK_M_MUTEX;
    ADD_CLASS_FORMAT(&msg_class, classForm);
    UNLOCK_M_MUTEX;
  }
  
  msg_class = FailureClass;
  if (x_ipcQueryCentral(X_IPC_CLASS_INFO_QUERY, (void *)&msg_class,
		      (void *)&classForm) == Success) {
    LOCK_M_MUTEX;
    ADD_CLASS_FORMAT(&msg_class, classForm);
    UNLOCK_M_MUTEX;
  }
  
  msg_class = FireDemonClass;
  if (x_ipcQueryCentral(X_IPC_CLASS_INFO_QUERY, (void *)&msg_class,
		      (void *)&classForm) == Success) {
    LOCK_M_MUTEX;
    ADD_CLASS_FORMAT(&msg_class, classForm);
    UNLOCK_M_MUTEX;
  }
  
  msg_class = MultiQueryClass;
  if (x_ipcQueryCentral(X_IPC_CLASS_INFO_QUERY, (void *)&msg_class,
		      (void *)&classForm) == Success) {
    LOCK_M_MUTEX;
    ADD_CLASS_FORMAT(&msg_class, classForm);
    UNLOCK_M_MUTEX;
  }
}
예제 #5
0
파일: tcaRef.c 프로젝트: Paresh1693/carmen
int x_ipcReferenceStatus(X_IPC_REF_PTR ref)
{
  int status = -1;
  (void)x_ipcQueryCentral(X_IPC_REF_STATUS_QUERY, &(ref->refId), &status);
  return status;
}