예제 #1
0
void _init(void) {
  int loaded;
  int debug_mode = getcopyconfigitemintpositive("nterfacer", "debug", 0);
  
  nrl = nterface_open_log("nterfacer", "logs/nterfacer.log", debug_mode);

  loaded = load_permits();
  nterface_log(nrl, NL_INFO, "Loaded %d permit%s successfully.", loaded, loaded==1?"":"s");

  if(!loaded)
    return;

  nterfacer_events.on_accept = nterfacer_accept_event;
  nterfacer_events.on_line = nterfacer_line_event;
  nterfacer_events.on_disconnect = NULL;

  nterfacer_token = esocket_token();

  ping = register_service("nterfacer");
  if(!ping) {
    MemError();
  } else {
    register_handler(ping, "ping", 0, ping_handler);
  }

  accept_fd = setup_listening_socket();
  if(accept_fd == -1) {
    nterface_log(nrl, NL_ERROR, "Unable to setup listening socket!");
  } else {
    nterfacer_sock = esocket_add(accept_fd, ESOCKET_UNIX_DOMAIN, &nterfacer_events, nterfacer_token);
  }

  /* the main unix domain socket must NOT have a disconnect event. */
  nterfacer_events.on_disconnect = nterfacer_disconnect_event;
}
static jboolean setUpListeningSocketsNative(JNIEnv* env, jobject object) {
    ALOGV("%s", __FUNCTION__);
#ifdef HAVE_BLUETOOTH
    native_data_t *nat = get_native_data(env, object);

    nat->hf_ag_rfcomm_sock =
        setup_listening_socket(nat->hcidev, nat->hf_ag_rfcomm_channel);
    if (nat->hf_ag_rfcomm_sock < 0)
        return JNI_FALSE;

    nat->hs_ag_rfcomm_sock =
        setup_listening_socket(nat->hcidev, nat->hs_ag_rfcomm_channel);
    if (nat->hs_ag_rfcomm_sock < 0) {
        close(nat->hf_ag_rfcomm_sock);
        nat->hf_ag_rfcomm_sock = -1;
        return JNI_FALSE;
    }

    return JNI_TRUE;
#else
    return JNI_FALSE;
#endif /* HAVE_BLUETOOTH */
}