00001
00002
00003
00004
00005
00006
00007
00008
00014 #ifndef __GEARMAN_PACKET_H__
00015 #define __GEARMAN_PACKET_H__
00016
00017 #ifdef __cplusplus
00018 extern "C" {
00019 #endif
00020
00036 struct gearman_packet_st
00037 {
00038 struct {
00039 bool allocated LIBGEARMAN_BITFIELD;
00040 bool complete LIBGEARMAN_BITFIELD;
00041 bool free_data LIBGEARMAN_BITFIELD;
00042 } options;
00043 enum gearman_magic_t
00044 {
00045 GEARMAN_MAGIC_TEXT,
00046 GEARMAN_MAGIC_REQUEST,
00047 GEARMAN_MAGIC_RESPONSE
00048 } magic;
00049 gearman_command_t command;
00050 uint8_t argc;
00051 size_t args_size;
00052 size_t data_size;
00053 gearman_universal_st *universal;
00054 gearman_packet_st *next;
00055 gearman_packet_st *prev;
00056 char *args;
00057 const void *data;
00058 char *arg[GEARMAN_MAX_COMMAND_ARGS];
00059 size_t arg_size[GEARMAN_MAX_COMMAND_ARGS];
00060 char args_buffer[GEARMAN_ARGS_BUFFER_SIZE];
00061 };
00062
00063 #ifdef GEARMAN_CORE
00064
00068 extern GEARMAN_INTERNAL_API
00069 gearman_command_info_st gearman_command_info_list[GEARMAN_COMMAND_MAX];
00070
00071
00081 GEARMAN_INTERNAL_API
00082 gearman_packet_st *gearman_packet_create(gearman_universal_st *gearman,
00083 gearman_packet_st *packet);
00084
00091 GEARMAN_INTERNAL_API
00092 void gearman_packet_free(gearman_packet_st *packet);
00093
00124 GEARMAN_INTERNAL_API
00125 gearman_return_t gearman_packet_create_args(gearman_universal_st *gearman,
00126 gearman_packet_st *packet,
00127 enum gearman_magic_t magic,
00128 gearman_command_t command,
00129 const void *args[],
00130 const size_t args_size[],
00131 size_t args_count);
00132
00136 GEARMAN_INTERNAL_API
00137 gearman_return_t gearman_packet_create_arg(gearman_packet_st *packet,
00138 const void *arg, size_t arg_size);
00139
00143 GEARMAN_INTERNAL_API
00144 gearman_return_t gearman_packet_pack_header(gearman_packet_st *packet);
00145
00149 GEARMAN_INTERNAL_API
00150 gearman_return_t gearman_packet_unpack_header(gearman_packet_st *packet);
00151
00155 GEARMAN_INTERNAL_API
00156 size_t gearman_packet_pack(const gearman_packet_st *packet, gearman_connection_st *con,
00157 void *data, size_t data_size,
00158 gearman_return_t *ret_ptr);
00159
00163 GEARMAN_INTERNAL_API
00164 size_t gearman_packet_unpack(gearman_packet_st *packet, gearman_connection_st *con,
00165 const void *data, size_t data_size,
00166 gearman_return_t *ret_ptr);
00167
00172 GEARMAN_INTERNAL_API
00173 void gearman_packet_give_data(gearman_packet_st *packet, const void *data,
00174 size_t data_size);
00175
00180 GEARMAN_INTERNAL_API
00181 void *gearman_packet_take_data(gearman_packet_st *packet, size_t *data_size);
00182
00183 #endif
00184
00187 #ifdef __cplusplus
00188 }
00189 #endif
00190
00191 #endif