Gearman Developer Documentation

libgearman/packet.h
Go to the documentation of this file.
00001 /* Gearman server and library
00002  * Copyright (C) 2008 Brian Aker, Eric Day
00003  * All rights reserved.
00004  *
00005  * Use and distribution licensed under the BSD license.  See
00006  * the COPYING file in the parent directory for full text.
00007  */
00008 
00014 #ifndef __GEARMAN_PACKET_H__
00015 #define __GEARMAN_PACKET_H__
00016 
00017 #ifdef __cplusplus
00018 extern "C" {
00019 #endif
00020 
00033 enum gearman_magic_t
00034 {
00035   GEARMAN_MAGIC_TEXT,
00036   GEARMAN_MAGIC_REQUEST,
00037   GEARMAN_MAGIC_RESPONSE
00038 };
00039 
00043 struct gearman_packet_st
00044 {
00045   struct {
00046     bool allocated LIBGEARMAN_BITFIELD;
00047     bool complete LIBGEARMAN_BITFIELD;
00048     bool free_data LIBGEARMAN_BITFIELD;
00049   } options;
00050   enum gearman_magic_t magic;
00051   gearman_command_t command;
00052   uint8_t argc;
00053   size_t args_size;
00054   size_t data_size;
00055   gearman_universal_st *universal;
00056   gearman_packet_st *next;
00057   gearman_packet_st *prev;
00058   char *args;
00059   const void *data;
00060   char *arg[GEARMAN_MAX_COMMAND_ARGS];
00061   size_t arg_size[GEARMAN_MAX_COMMAND_ARGS];
00062   char args_buffer[GEARMAN_ARGS_BUFFER_SIZE];
00063 };
00064 
00065 #ifdef GEARMAN_CORE
00066 
00070 extern GEARMAN_INTERNAL_API
00071 gearman_command_info_st gearman_command_info_list[GEARMAN_COMMAND_MAX];
00072 
00073 
00083 GEARMAN_INTERNAL_API
00084 gearman_packet_st *gearman_packet_create(gearman_universal_st *gearman,
00085                                          gearman_packet_st *packet);
00086 
00093 GEARMAN_INTERNAL_API
00094 void gearman_packet_free(gearman_packet_st *packet);
00095 
00126 GEARMAN_INTERNAL_API
00127 gearman_return_t gearman_packet_create_args(gearman_universal_st *gearman,
00128                                             gearman_packet_st *packet,
00129                                             enum gearman_magic_t magic,
00130                                             gearman_command_t command,
00131                                             const void *args[],
00132                                             const size_t args_size[],
00133                                             size_t args_count);
00134 
00138 GEARMAN_INTERNAL_API
00139 gearman_return_t gearman_packet_create_arg(gearman_packet_st *packet,
00140                                            const void *arg, size_t arg_size);
00141 
00145 GEARMAN_INTERNAL_API
00146 gearman_return_t gearman_packet_pack_header(gearman_packet_st *packet);
00147 
00151 GEARMAN_INTERNAL_API
00152 gearman_return_t gearman_packet_unpack_header(gearman_packet_st *packet);
00153 
00157 GEARMAN_INTERNAL_API
00158 size_t gearman_packet_pack(const gearman_packet_st *packet, gearman_connection_st *con,
00159                            void *data, size_t data_size,
00160                            gearman_return_t *ret_ptr);
00161 
00165 GEARMAN_INTERNAL_API
00166 size_t gearman_packet_unpack(gearman_packet_st *packet, gearman_connection_st *con,
00167                              const void *data, size_t data_size,
00168                              gearman_return_t *ret_ptr);
00169 
00174 GEARMAN_INTERNAL_API
00175 void gearman_packet_give_data(gearman_packet_st *packet, const void *data,
00176                               size_t data_size);
00177 
00182 GEARMAN_INTERNAL_API
00183 void *gearman_packet_take_data(gearman_packet_st *packet, size_t *data_size);
00184 
00185 #endif /* GEARMAN_CORE */
00186 
00189 #ifdef __cplusplus
00190 }
00191 #endif
00192 
00193 #endif /* __GEARMAN_PACKET_H__ */