static lcb_error_t mcio_error(cccp_provider *cccp, lcb_error_t err) { lcb_log(LOGARGS(cccp, ERR), "Got I/O Error=0x%x", err); release_socket(cccp, err == LCB_NOT_SUPPORTED); return schedule_next_request(cccp, err, 0); }
static lcb_error_t mcio_error(cccp_provider *cccp, lcb_error_t err) { lcb_log(LOGARGS(cccp, ERR), "Got I/O Error=0x%x", err); if (err == LCB_AUTH_ERROR && cccp->base.parent->config == NULL) { lcb_confmon_provider_failed(&cccp->base, err); return err; } release_socket(cccp, err == LCB_NOT_SUPPORTED); return schedule_next_request(cccp, err, 0); }
static lcb_error_t cccp_pause(clconfig_provider *pb) { cccp_provider *cccp = (cccp_provider *)pb; if (!cccp->server_active) { return LCB_SUCCESS; } cccp->server_active = 0; release_socket(cccp, 0); lcb_timer_disarm(cccp->timer); return LCB_SUCCESS; }
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { UNREFERENCED_PARAMETER(lpReserved); switch(ul_reason_for_call){ case DLL_PROCESS_ATTACH: InitCommonControls(); init_socket(); __instance = hModule; break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: release_socket(); break; } return TRUE; }
static void cccp_cleanup(clconfig_provider *pb) { cccp_provider *cccp = (cccp_provider *)pb; release_socket(cccp, 0); lcb_connection_cleanup(&cccp->connection); if (cccp->config) { lcb_clconfig_decref(cccp->config); } if (cccp->nodes) { hostlist_destroy(cccp->nodes); } if (cccp->timer) { lcb_timer_destroy(NULL, cccp->timer); } if (cccp->cmdcookie) { cccp->cmdcookie->ignore_errors = 1; } free(cccp); }
static void io_read_handler(lcb_connection_t conn) { packet_info pi; cccp_provider *cccp = conn->data; lcb_string jsonstr; lcb_error_t err; int rv; lcb_host_t curhost; memset(&pi, 0, sizeof(pi)); rv = lcb_packet_read_ringbuffer(&pi, conn->input); if (rv < 0) { LOG(cccp, ERR, "Couldn't parse packet!?"); mcio_error(cccp, LCB_EINTERNAL); return; } else if (rv == 0) { lcb_sockrw_set_want(conn, LCB_READ_EVENT, 1); lcb_sockrw_apply_want(conn); return; } if (PACKET_STATUS(&pi) != PROTOCOL_BINARY_RESPONSE_SUCCESS) { lcb_log(LOGARGS(cccp, ERR), "CCCP Packet responded with 0x%x; nkey=%d, nbytes=%lu, cmd=0x%x, seq=0x%x", PACKET_STATUS(&pi), PACKET_NKEY(&pi), PACKET_NBODY(&pi), PACKET_OPCODE(&pi), PACKET_OPAQUE(&pi)); switch (PACKET_STATUS(&pi)) { case PROTOCOL_BINARY_RESPONSE_NOT_SUPPORTED: case PROTOCOL_BINARY_RESPONSE_UNKNOWN_COMMAND: mcio_error(cccp, LCB_NOT_SUPPORTED); break; default: mcio_error(cccp, LCB_PROTOCOL_ERROR); break; } return; } if (!PACKET_NBODY(&pi)) { mcio_error(cccp, LCB_PROTOCOL_ERROR); return; } if (lcb_string_init(&jsonstr)) { mcio_error(cccp, LCB_CLIENT_ENOMEM); return; } if (lcb_string_append(&jsonstr, PACKET_BODY(&pi), PACKET_NBODY(&pi))) { mcio_error(cccp, LCB_CLIENT_ENOMEM); return; } curhost = *lcb_connection_get_host(&cccp->connection); lcb_packet_release_ringbuffer(&pi, conn->input); release_socket(cccp, 1); err = lcb_cccp_update(&cccp->base, curhost.host, &jsonstr); lcb_string_release(&jsonstr); if (err == LCB_SUCCESS) { lcb_timer_disarm(cccp->timer); cccp->server_active = 0; } else { schedule_next_request(cccp, LCB_PROTOCOL_ERROR, 0); } }