Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00016 #include "common.h"
00017
00018 drizzle_return_t drizzle_state_loop(drizzle_con_st *con)
00019 {
00020 drizzle_return_t ret;
00021
00022 while (!drizzle_state_none(con))
00023 {
00024 ret= con->state_stack[con->state_current - 1](con);
00025 if (ret != DRIZZLE_RETURN_OK)
00026 {
00027 if (ret != DRIZZLE_RETURN_IO_WAIT && ret != DRIZZLE_RETURN_PAUSE &&
00028 ret != DRIZZLE_RETURN_ERROR_CODE)
00029 {
00030 drizzle_con_close(con);
00031 }
00032
00033 return ret;
00034 }
00035 }
00036
00037 return DRIZZLE_RETURN_OK;
00038 }
00039
00040 drizzle_return_t drizzle_state_packet_read(drizzle_con_st *con)
00041 {
00042 drizzle_log_debug(con->drizzle, "drizzle_state_packet_read");
00043
00044 if (con->buffer_size < 4)
00045 {
00046 drizzle_state_push(con, drizzle_state_read);
00047 return DRIZZLE_RETURN_OK;
00048 }
00049
00050 con->packet_size= drizzle_get_byte3(con->buffer_ptr);
00051
00052 if (con->packet_number != con->buffer_ptr[3])
00053 {
00054 drizzle_set_error(con->drizzle, "drizzle_state_packet_read",
00055 "bad packet number:%u:%u", con->packet_number,
00056 con->buffer_ptr[3]);
00057 return DRIZZLE_RETURN_BAD_PACKET_NUMBER;
00058 }
00059
00060 drizzle_log_debug(con->drizzle, "packet_size= %zu, packet_number= %u",
00061 con->packet_size, con->packet_number);
00062
00063 con->packet_number++;
00064
00065 con->buffer_ptr+= 4;
00066 con->buffer_size-= 4;
00067
00068 drizzle_state_pop(con);
00069 return DRIZZLE_RETURN_OK;
00070 }