/** * Creates a server connection object. * * Note: the method sets native connection handle directly to * <code>handle<code> field of <code>L2CAPNotifierImpl</code> object. * * @param imtu receive MTU or <code>-1</code> if not specified * @param omtu transmit MTU or <code>-1</code> if not specified * @param auth <code>true</code> if authication is required * @param authz <code>true</code> if authorization is required * @param enc <code>true</code> indicates * what connection must be encrypted * @param master <code>true</code> if client requires to be * a connection's master * @return reserved PSM to listen for incoming connections on * @throws IOException if any I/O error occurs */ KNIEXPORT KNI_RETURNTYPE_INT Java_com_sun_midp_io_j2me_btl2cap_L2CAPNotifierImpl_create0(void) { int imtu = (int)KNI_GetParameterAsInt(1); int omtu = (int)KNI_GetParameterAsInt(2); javacall_bool auth = (KNI_GetParameterAsBoolean(3) == KNI_TRUE) ? JAVACALL_TRUE : JAVACALL_FALSE; javacall_bool authz = (KNI_GetParameterAsBoolean(4) == KNI_TRUE) ? JAVACALL_TRUE : JAVACALL_FALSE; javacall_bool enc = (KNI_GetParameterAsBoolean(5) == KNI_TRUE) ? JAVACALL_TRUE : JAVACALL_FALSE; javacall_bool master = (KNI_GetParameterAsBoolean(6) == KNI_TRUE) ? JAVACALL_TRUE : JAVACALL_FALSE; javacall_handle handle = BT_INVALID_HANDLE; int psm = BT_L2CAP_INVALID_PSM; REPORT_INFO(LC_PROTOCOL, "btl2cap_notif::create"); // Need revisit: add resource counting /* if (midpCheckResourceLimit(RSC_TYPE_BT_SER, 1) == 0) { const char* pMsg = "Resource limit exceeded for BT server sockets"; REPORT_INFO(LC_PROTOCOL, pMsg); KNI_ThrowNew(midpIOException, EXCEPTION_MSG(pMsg)); } else { */ /* create L2CAP server connection */ if (javacall_bt_l2cap_create_server(imtu, omtu, auth, authz, enc, master, &handle, &psm) == JAVACALL_FAIL) { REPORT_ERROR(LC_PROTOCOL, "L2CAP notifier creation failed in btl2cap_notif::create"); KNI_ThrowNew(midpIOException, EXCEPTION_MSG("Can not create L2CAP notifier ")); KNI_ReturnInt(BT_L2CAP_INVALID_PSM); } KNI_StartHandles(1); KNI_DeclareHandle(thisHandle); KNI_GetThisPointer(thisHandle); /* store native connection handle to Java object */ KNI_SetIntField(thisHandle, notifHandleID, (jint)handle); // Need revisit: add resource counting /* if (midpIncResourceCount(RSC_TYPE_BT_SER, 1) == 0) { REPORT_INFO(LC_PROTOCOL, "BT Server: Resource limit update error"); } */ // } REPORT_INFO2(LC_PROTOCOL, "btl2cap_notif::create notifier created" ", port = %d, handle = %d\n", psm, handle); KNI_EndHandles(); KNI_ReturnInt(psm); }
javacall_handle bt_push_start_server(const bt_port_t *port) { int psm, cn; bt_params_t *params; bt_push_t *push = find_push(port, NULL); if (push == NULL || push->server != BT_INVALID_HANDLE) { return BT_INVALID_HANDLE; } if (javacall_bt_sddb_update_record(&push->record.id, push->record.classes, push->record.data, push->record.size) != JAVACALL_OK) { return BT_INVALID_HANDLE; } params = &push->params; switch (port->protocol) { case BT_L2CAP: if (javacall_bt_l2cap_create_server(params->rmtu, params->tmtu, params->authenticate, params->authorize, params->encrypt, params->master, &push->server, &psm) != JAVACALL_OK) { return BT_INVALID_HANDLE; } javacall_bt_sddb_update_psm(push->record.id, psm); javacall_bt_l2cap_listen(push->server); break; case BT_SPP: case BT_GOEP: if (javacall_bt_rfcomm_create_server(params->authenticate, params->authorize, params->encrypt, params->master, &push->server, &cn) != JAVACALL_OK) { return BT_INVALID_HANDLE; } javacall_bt_sddb_update_channel(push->record.id, cn); javacall_bt_rfcomm_listen(push->server); break; default: return BT_INVALID_HANDLE; } javacall_bt_stack_set_service_classes(javacall_bt_sddb_get_service_classes(0)); return push->server; }