Ejemplo n.º 1
0
void ep_delete (DDS_DomainParticipant part, DDS_BuiltinTopicKey_t *key)
{
	Topic		*tp;
	Endpoint	*ep, *xep, *prev;

	ep = ep_lookup (key);
	if (!ep) {
		printf ("Already deleted?\r\n");
		return;
	}
	printf ("* Delete %s (%s/%s)\r\n", (ep->writer) ? "writer" : "reader",
				ep->topic->topic_name, ep->topic->type_name);
	if (ep->writer)
		xep = ep->topic->writers;
	else
		xep = ep->topic->readers;

	/* Remove from topic endpoints list. */
	for (prev = NULL; xep; prev = xep, xep = xep->link)
		if (xep == ep) {

			/* Found it! */
			tp = ep->topic;
			if (!prev)
				if (ep->writer)
					tp->writers = ep->link;
				else
					tp->readers = ep->link;
			else
				prev->next = ep->link;

			/* If last writer and active reader: stop.  */
			if (ep->writer && !tp->writers && tp->active)
				stop_reader (part, tp);

			/* If no more readers nor writers, free topic. */
			if (!tp->readers && !tp->writers) {
				if (tp->ts)
					cleanup_reader (part, tp);
				free (tp->topic_name);
				free (tp->type_name);
				LIST_REMOVE (topics, *tp);
				free (tp);
			}
			break;
		}

	/* Free endpoint. */
	LIST_REMOVE (endpoints, *ep);
	free (ep);
}
Ejemplo n.º 2
0
int start_reader() {
  if(reader_tid)
    stop_reader();
  
  if(control_activate(&(incoming_messages.control))) {
    LOGE("%s: cannot activate incoming messages queue", __func__);
    return -1;
  }
  if(pthread_create(&reader_tid, NULL, reader, NULL)) {
    LOGE("%s: pthread_create: %s", __func__, strerror(errno));
    return -1;
  }
  return 0;
}
Ejemplo n.º 3
0
static int ti_restart(struct tip_cygwin *priv)
{
	/* kill handle to if */
	if (priv->tc_h)
		CloseHandle(priv->tc_h);

	/* stop reader */
	if (stop_reader(priv))
		return -1;

	/* reopen dev */
	if (ti_do_open_cygwin(priv))
		return -1;

	return start_reader(priv);
}
Ejemplo n.º 4
0
void t_ignore (const char *cmd, DDS_DomainParticipant part)
{
	Topic	*tp;
	char	spec [192];

	skip_blanks (&cmd);
	skip_string (&cmd, spec);
	if (spec [0]) {
		lock_take (topic_lock);
		LIST_FOREACH (topics, tp)
			if (tp->active &&
			    !nmatch (spec, tp->topic_name, NM_CASEFOLD))
				stop_reader (part, tp);
		lock_release (topic_lock);
	}
}
Ejemplo n.º 5
0
/**
 * @brief disconnect from UNIX socket
 */
void disconnect_unix(JNIEnv *env, jclass clazz _U_) {
  
  if(!connected)
    return;
  
  stop_notifier();
  
  pthread_mutex_lock(&write_lock);
  shutdown(sockfd, SHUT_RDWR);
  pthread_mutex_unlock(&write_lock);
  
  stop_reader();
  
  close(sockfd);
  
  connected = 0;
  
  on_disconnect(env);
}
Ejemplo n.º 6
0
static void ti_do_free(struct tif *ti)
{
	struct tip_cygwin *priv = ti_priv(ti);

	/* stop reader */
	stop_reader(priv);

	if (priv->tc_pipe[0]) {
		close(priv->tc_pipe[0]);
		close(priv->tc_pipe[1]);
	}

	/* close card */
	if (priv->tc_h) {
		ti_media_status(priv, 0);
		CloseHandle(priv->tc_h);
	}

	if (priv->tc_key)
		RegCloseKey(priv->tc_key);

	free(priv);
	free(ti);
}
Ejemplo n.º 7
0
/**
 * @brief connect to a cSploitd UNIX socket
 * @param jsocket_path path to the UNIX socket
 * @returns true on success, false on error.
 */
jboolean connect_unix(JNIEnv *env, jclass clazz _U_, jstring jsocket_path) {
  const char *socket_path;
  jboolean ret;
  struct sockaddr_un addr;
  
  if(connected)
    disconnect_unix(env, clazz);
  
  sockfd=-1;
  ret = JNI_FALSE;
  
  socket_path = (*env)->GetStringUTFChars(env, jsocket_path, NULL);
  
  if(!socket_path) goto jni_error;
  
  sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
  
  if(sockfd<0) {
    LOGE("%s: socket: %s", __func__, strerror(errno));
    goto cleanup; // nothing to close
  }
  
  memset(&addr, 0, sizeof(struct sockaddr_un));
  addr.sun_family = AF_UNIX;
  strncpy(addr.sun_path, socket_path, sizeof(addr.sun_path)-1);
  
  if(connect(sockfd, (struct sockaddr *) &addr, sizeof(addr))) {
    LOGE("%s: connect: %s", __func__, strerror(errno));
    goto error;
  }
  
  if(start_reader()) {
    LOGE("%s: cannot start reader", __func__);
    goto error;
  }
  
  if(start_notifier()) {
    LOGE("%s: cannot start notifier", __func__);
    goto error;
  }
  
  connected = 1;
  
  on_connect();
  
  ret = JNI_TRUE;
  
  goto cleanup;
  
  jni_error:
  
  if((*env)->ExceptionCheck(env)) {
    (*env)->ExceptionDescribe(env);
    (*env)->ExceptionClear(env);
  }
  
  error:
  
  stop_notifier();
  
  shutdown(sockfd, SHUT_WR);
  
  stop_reader();
  
  close(sockfd);
  sockfd = -1;
  
  cleanup:
  
  if(socket_path)
    (*env)->ReleaseStringUTFChars(env, jsocket_path, socket_path);
  
  return ret;
}