static enum pubnub_res parse_pubnub_result(struct pubnub_ *pb) { enum pubnub_res pbres = PNR_OK; switch (pb->trans) { case PBTT_SUBSCRIBE: if (pbcc_parse_subscribe_response(&pb->core) != 0) { PUBNUB_LOG_WARNING("parse_subscribe failed\n"); pbres = PNR_FORMAT_ERROR; } break; case PBTT_PUBLISH: pbres = pbcc_parse_publish_response(&pb->core); if (pbres != PNR_OK) { PUBNUB_LOG_WARNING("parse_publish failed\n"); } break; case PBTT_TIME: if (pbcc_parse_time_response(&pb->core) != 0) { PUBNUB_LOG_WARNING("parse_time failed\n"); pbres = PNR_FORMAT_ERROR; } break; case PBTT_HISTORY: if (pbcc_parse_history_response(&pb->core) != 0) { PUBNUB_LOG_WARNING("parse_history failed\n"); pbres = PNR_FORMAT_ERROR; } break; case PBTT_LEAVE: case PBTT_HERENOW: case PBTT_GLOBAL_HERENOW: case PBTT_WHERENOW: case PBTT_SET_STATE: case PBTT_STATE_GET: case PBTT_HEARTBEAT: if (pbcc_parse_presence_response(&pb->core) != 0) { PUBNUB_LOG_WARNING("parse_presence failed\n"); pbres = PNR_FORMAT_ERROR; } break; case PBTT_REMOVE_CHANNEL_GROUP: case PBTT_REMOVE_CHANNEL_FROM_GROUP: case PBTT_ADD_CHANNEL_TO_GROUP: case PBTT_LIST_CHANNEL_GROUP: pbres = pbcc_parse_channel_registry_response(&pb->core); if (pbres != PNR_OK) { PUBNUB_LOG_WARNING("parse_channel_registry failed\n"); } break; default: break; } return pbres; }
static void finish(struct pubnub_ *pb) { enum pubnub_res pbres = PNR_OK; pb->core.http_reply[pb->core.http_buf_len] = '\0'; PUBNUB_LOG_TRACE("finish('%s')\n", pb->core.http_reply); switch (pb->trans) { case PBTT_SUBSCRIBE: if (pbcc_parse_subscribe_response(&pb->core) != 0) { PUBNUB_LOG_WARNING("parse_subscribe failed\n"); pbres = PNR_FORMAT_ERROR; } break; case PBTT_PUBLISH: pbres = pbcc_parse_publish_response(&pb->core); if (pbres != PNR_OK) { PUBNUB_LOG_WARNING("parse_publish failed\n"); } break; case PBTT_TIME: if (pbcc_parse_time_response(&pb->core) != 0) { PUBNUB_LOG_WARNING("parse_time failed\n"); pbres = PNR_FORMAT_ERROR; } break; case PBTT_HISTORY: if (pbcc_parse_history_response(&pb->core) != 0) { PUBNUB_LOG_WARNING("parse_history failed\n"); pbres = PNR_FORMAT_ERROR; } break; case PBTT_LEAVE: case PBTT_HERENOW: case PBTT_GLOBAL_HERENOW: case PBTT_WHERENOW: case PBTT_SET_STATE: case PBTT_STATE_GET: case PBTT_HEARTBEAT: if (pbcc_parse_presence_response(&pb->core) != 0) { PUBNUB_LOG_WARNING("parse_presence failed\n"); pbres = PNR_FORMAT_ERROR; } break; case PBTT_REMOVE_CHANNEL_GROUP: case PBTT_REMOVE_CHANNEL_FROM_GROUP: case PBTT_ADD_CHANNEL_TO_GROUP: case PBTT_LIST_CHANNEL_GROUP: pbres = pbcc_parse_channel_registry_response(&pb->core); if (pbres != PNR_OK) { PUBNUB_LOG_WARNING("parse_channel_registry failed\n"); } break; default: break; } if ((PNR_OK == pbres) && ((pb->http_code / 100) != 2)) { pbres = PNR_HTTP_ERROR; } outcome_detected(pb, pbres); }