libdrizzle Developer Documentation

state.c
Go to the documentation of this file.
1/*
2 * Drizzle Client & Protocol Library
3 *
4 * Copyright (C) 2008 Eric Day (eday@oddments.org)
5 * All rights reserved.
6 *
7 * Use and distribution licensed under the BSD license. See
8 * the COPYING file in this directory for full text.
9 */
10
16#include "common.h"
17
19{
21
22 while (!drizzle_state_none(con))
23 {
24 ret= con->state_stack[con->state_current - 1](con);
25 if (ret != DRIZZLE_RETURN_OK)
26 {
27 if (ret != DRIZZLE_RETURN_IO_WAIT && ret != DRIZZLE_RETURN_PAUSE &&
29 {
31 }
32
33 return ret;
34 }
35 }
36
37 return DRIZZLE_RETURN_OK;
38}
39
41{
42 drizzle_log_debug(con->drizzle, "drizzle_state_packet_read");
43
44 if (con->buffer_size < 4)
45 {
47 return DRIZZLE_RETURN_OK;
48 }
49
51
52 if (con->packet_number != con->buffer_ptr[3])
53 {
54 drizzle_set_error(con->drizzle, "drizzle_state_packet_read",
55 "bad packet number:%u:%u", con->packet_number,
56 con->buffer_ptr[3]);
58 }
59
60 drizzle_log_debug(con->drizzle, "packet_size= %zu, packet_number= %u",
61 con->packet_size, con->packet_number);
62
63 con->packet_number++;
64
65 con->buffer_ptr+= 4;
66 con->buffer_size-= 4;
67
69 return DRIZZLE_RETURN_OK;
70}
System Include Files.
static void drizzle_state_pop(drizzle_con_st *con)
Definition conn_local.h:73
static void drizzle_state_push(drizzle_con_st *con, drizzle_state_fn *function)
Definition conn_local.h:57
static bool drizzle_state_none(drizzle_con_st *con)
Definition conn_local.h:45
void drizzle_con_close(drizzle_con_st *con)
Definition conn.c:57
drizzle_return_t
Definition constants.h:69
@ DRIZZLE_RETURN_ERROR_CODE
Definition constants.h:87
@ DRIZZLE_RETURN_PAUSE
Definition constants.h:72
@ DRIZZLE_RETURN_OK
Definition constants.h:70
@ DRIZZLE_RETURN_IO_WAIT
Definition constants.h:71
@ DRIZZLE_RETURN_BAD_PACKET_NUMBER
Definition constants.h:79
static void drizzle_log_debug(drizzle_st *drizzle, const char *format,...)
void drizzle_set_error(drizzle_st *drizzle, const char *function, const char *format,...)
Definition drizzle.c:633
#define drizzle_get_byte3(__buffer)
Definition constants.h:455
drizzle_return_t drizzle_state_packet_read(drizzle_con_st *con)
Definition state.c:40
drizzle_return_t drizzle_state_read(drizzle_con_st *con)
Definition conn.c:897
drizzle_return_t drizzle_state_loop(drizzle_con_st *con)
Definition state.c:18
uint8_t packet_number
Definition structs.h:76
drizzle_st * drizzle
Definition structs.h:103
size_t packet_size
Definition structs.h:96
uint8_t * buffer_ptr
Definition structs.h:98
uint8_t state_current
Definition structs.h:78
size_t buffer_size
Definition structs.h:92
drizzle_state_fn * state_stack[DRIZZLE_STATE_STACK_SIZE]
Definition structs.h:120