static void socket_connected(connmgr_request *req) { cccp_provider *cccp = req->data; lcb_connection_t conn = req->conn; struct lcb_nibufs_st nistrs; struct lcb_io_use_st use; struct negotiation_context *ctx; lcb_error_t err; free(req); cccp->cur_connreq = NULL; LOG(cccp, DEBUG, "CCCP Socket connected"); if (!conn) { mcio_error(cccp, LCB_CONNECT_ERROR); return; } lcb_connuse_easy(&use, cccp, io_read_handler, io_error_handler); lcb_connection_transfer_socket(conn, &cccp->connection, &use); conn = NULL; if (cccp->connection.protoctx) { /** Already have SASL */ if ((err = lcb_connection_reset_buffers(&cccp->connection)) != LCB_SUCCESS) { mcio_error(cccp, err); return; } request_config(cccp); return; } if (!lcb_get_nameinfo(&cccp->connection, &nistrs)) { mcio_error(cccp, LCB_EINTERNAL); return; } ctx = lcb_negotiation_create(&cccp->connection, cccp->base.parent->settings, PROVIDER_SETTING(&cccp->base, config_node_timeout), nistrs.remote, nistrs.local, &err); if (!ctx) { mcio_error(cccp, err); } ctx->complete = negotiation_done; ctx->data = cccp; cccp->connection.protoctx = ctx; cccp->connection.protoctx_dtor = (protoctx_dtor_t)lcb_negotiation_destroy; }
static void negotiation_done(struct negotiation_context *ctx, lcb_error_t err) { cccp_provider *cccp = ctx->data; struct lcb_io_use_st use; if (err != LCB_SUCCESS) { LOG(cccp, ERR, "CCCP SASL negotiation failed"); mcio_error(cccp, err); } else { LOG(cccp, DEBUG, "CCCP SASL negotiation done"); lcb_connuse_easy(&use, cccp, io_read_handler, io_error_handler); lcb_connection_use(&cccp->connection, &use); request_config(cccp); } }
void handle_init() { time_t clock = time(NULL); now = localtime(&clock); window = window_create(); window_stack_push(window, true /* Animated */); window_set_background_color(window, GColorBlack); date_layer = layer_create(GRect(0, 144, 144, 24)); layer_set_update_proc(date_layer, &date_layer_update_callback); layer_add_child(window_get_root_layer(window), date_layer); background_layer = layer_create(GRect(0, 0, 144, 144)); layer_set_update_proc(background_layer, &background_layer_update_callback); layer_add_child(window_get_root_layer(window), background_layer); logo = gbitmap_create_with_resource(RESOURCE_ID_IMAGE_LOGO); GRect frame = logo->bounds; grect_align(&frame, &GRect(0, 0, 144, 72), GAlignCenter, false); logo_layer = bitmap_layer_create(frame); bitmap_layer_set_bitmap (logo_layer, logo); layer_add_child(background_layer, bitmap_layer_get_layer(logo_layer)); hands_layer = layer_create(layer_get_frame(background_layer)); layer_set_update_proc(hands_layer, &hands_layer_update_callback); layer_add_child(background_layer, hands_layer); for (int i = 0; i < 22; i++) battery_images[i] = gbitmap_create_with_resource(RESOURCE_ID_IMAGE_BATTERY_0 + i); battery_layer = bitmap_layer_create(GRect(144-16-3, 3, 16, 10)); layer_add_child(window_get_root_layer(window), bitmap_layer_get_layer(battery_layer)); for (int i = 0; i < 2; i++) bluetooth_images[i] = gbitmap_create_with_resource(RESOURCE_ID_IMAGE_BLUETOOTH_OFF + i); bluetooth_layer = bitmap_layer_create(GRect(66, 0, 13, 13)); layer_add_child(background_layer, bitmap_layer_get_layer(bluetooth_layer)); #if DEBUG debug_layer = text_layer_create(GRect(0, 0, 32, 16)); strcpy(debug_buffer, ""); text_layer_set_text(debug_layer, debug_buffer); text_layer_set_text_color(debug_layer, GColorWhite); text_layer_set_background_color(debug_layer, GColorBlack); layer_add_child(window_get_root_layer(window), text_layer_get_layer(debug_layer)); #endif inverter_layer = inverter_layer_create(GRect(0, 0, 144, 168)); layer_add_child(window_get_root_layer(window), inverter_layer_get_layer(inverter_layer)); hour_path = gpath_create(&HOUR_POINTS); gpath_move_to(hour_path, GPoint(CENTER_X, CENTER_Y)); min_path = gpath_create(&MIN_POINTS); gpath_move_to(min_path, GPoint(CENTER_X, CENTER_Y)); sec_path = gpath_create(&SEC_POINTS); gpath_move_to(sec_path, GPoint(CENTER_X, CENTER_Y)); font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_30)); has_config = true; if (persist_exists(SECONDS_MODE)) seconds_mode = persist_read_int(SECONDS_MODE); else has_config = false; if (persist_exists(BATTERY_MODE)) battery_mode = persist_read_int(BATTERY_MODE); else has_config = false; if (persist_exists(DATE_MODE)) date_mode = persist_read_int(DATE_MODE); else has_config = false; if (persist_exists(BLUETOOTH_MODE)) bluetooth_mode = persist_read_int(BLUETOOTH_MODE); else has_config = false; if (has_config) APP_LOG(APP_LOG_LEVEL_DEBUG, "Loaded config"); tick_timer_service_subscribe(hide_seconds ? MINUTE_UNIT : SECOND_UNIT, &handle_tick); battery_state_service_subscribe(&handle_battery); handle_battery(battery_state_service_peek()); bluetooth_connection_service_subscribe(&handle_bluetooth); handle_bluetooth(bluetooth_connection_service_peek()); handle_inverter(); app_message_register_inbox_received(&handle_appmessage_receive); app_message_open(INBOX_SIZE, OUTBOX_SIZE); if (!has_config) request_config(); }