提交 9baf90364f06f68d42344bf982911e5a1853363c

作者 LJH 李佳桓
1 个父辈 c7be7fc5

add

正在显示 1 个修改的文件 包含 235 行增加0 行删除
  1 +/*
  2 + * This file is adapted from libevent.
  3 + */
  4 +
  5 +/*
  6 + * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
  7 + * All rights reserved.
  8 + *
  9 + * Redistribution and use in source and binary forms, with or without
  10 + * modification, are permitted provided that the following conditions
  11 + * are met:
  12 + * 1. Redistributions of source code must retain the above copyright
  13 + * notice, this list of conditions and the following disclaimer.
  14 + * 2. Redistributions in binary form must reproduce the above copyright
  15 + * notice, this list of conditions and the following disclaimer in the
  16 + * documentation and/or other materials provided with the distribution.
  17 + * 3. The name of the author may not be used to endorse or promote products
  18 + * derived from this software without specific prior written permission.
  19 + *
  20 + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  21 + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  22 + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  23 + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  24 + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  25 + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  26 + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  27 + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  28 + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  29 + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  30 + */
  31 +
  32 +#ifndef __spwin32buffer_hpp__
  33 +#define __spwin32buffer_hpp__
  34 +
  35 +#include <sys/types.h>
  36 +#include <stdarg.h>
  37 +
  38 +#define sp_evbuffer_new spwin32buffer_new
  39 +#define sp_evbuffer_free spwin32buffer_free
  40 +#define sp_evbuffer_add spwin32buffer_add
  41 +#define sp_evbuffer_drain spwin32buffer_drain
  42 +#define sp_evbuffer_expand spwin32buffer_expand
  43 +#define sp_evbuffer_readline spwin32buffer_readline
  44 +#define sp_evbuffer_remove spwin32buffer_remove
  45 +#define sp_evbuffer_add_vprintf spwin32buffer_add_vprintf
  46 +
  47 +typedef struct spwin32buffer sp_buffer_t;
  48 +
  49 +#ifdef __cplusplus
  50 +extern "C" {
  51 +#endif
  52 +
  53 +typedef unsigned char u_char;
  54 +
  55 +/* These functions deal with buffering input and output */
  56 +
  57 +struct spwin32buffer {
  58 + u_char *buffer;
  59 + u_char *orig_buffer;
  60 +
  61 + size_t misalign;
  62 + size_t totallen;
  63 + size_t off;
  64 +
  65 + void (*cb)(struct spwin32buffer *, size_t, size_t, void *);
  66 + void *cbarg;
  67 +};
  68 +
  69 +#define EVBUFFER_LENGTH(x) (x)->off
  70 +#define EVBUFFER_DATA(x) (x)->buffer
  71 +#define EVBUFFER_INPUT(x) (x)->input
  72 +#define EVBUFFER_OUTPUT(x) (x)->output
  73 +
  74 +/**
  75 + Allocate storage for a new spwin32buffer.
  76 +
  77 + @return a pointer to a newly allocated spwin32buffer struct, or NULL if an error
  78 + occurred
  79 + */
  80 +struct spwin32buffer *spwin32buffer_new(void);
  81 +
  82 +
  83 +/**
  84 + Deallocate storage for an spwin32buffer.
  85 +
  86 + @param pointer to the spwin32buffer to be freed
  87 + */
  88 +void spwin32buffer_free(struct spwin32buffer *);
  89 +
  90 +
  91 +/**
  92 + Expands the available space in an event buffer.
  93 +
  94 + Expands the available space in the event buffer to at least datlen
  95 +
  96 + @param buf the event buffer to be expanded
  97 + @param datlen the new minimum length requirement
  98 + @return 0 if successful, or -1 if an error occurred
  99 +*/
  100 +int spwin32buffer_expand(struct spwin32buffer *, size_t);
  101 +
  102 +
  103 +/**
  104 + Append data to the end of an spwin32buffer.
  105 +
  106 + @param buf the event buffer to be appended to
  107 + @param data pointer to the beginning of the data buffer
  108 + @param datlen the number of bytes to be copied from the data buffer
  109 + */
  110 +int spwin32buffer_add(struct spwin32buffer *, const void *, size_t);
  111 +
  112 +
  113 +
  114 +/**
  115 + Read data from an event buffer and drain the bytes read.
  116 +
  117 + @param buf the event buffer to be read from
  118 + @param data the destination buffer to store the result
  119 + @param datlen the maximum size of the destination buffer
  120 + @return the number of bytes read
  121 + */
  122 +int spwin32buffer_remove(struct spwin32buffer *, void *, size_t);
  123 +
  124 +
  125 +/**
  126 + * Read a single line from an event buffer.
  127 + *
  128 + * Reads a line terminated by either '\r\n', '\n\r' or '\r' or '\n'.
  129 + * The returned buffer needs to be freed by the caller.
  130 + *
  131 + * @param buffer the spwin32buffer to read from
  132 + * @return pointer to a single line, or NULL if an error occurred
  133 + */
  134 +char *spwin32buffer_readline(struct spwin32buffer *);
  135 +
  136 +
  137 +/**
  138 + Move data from one spwin32buffer into another spwin32buffer.
  139 +
  140 + This is a destructive add. The data from one buffer moves into
  141 + the other buffer. The destination buffer is expanded as needed.
  142 +
  143 + @param outbuf the output buffer
  144 + @param inbuf the input buffer
  145 + @return 0 if successful, or -1 if an error occurred
  146 + */
  147 +int spwin32buffer_add_buffer(struct spwin32buffer *, struct spwin32buffer *);
  148 +
  149 +
  150 +/**
  151 + Append a formatted string to the end of an spwin32buffer.
  152 +
  153 + @param buf the spwin32buffer that will be appended to
  154 + @param fmt a format string
  155 + @param ... arguments that will be passed to printf(3)
  156 + @return 0 if successful, or -1 if an error occurred
  157 + */
  158 +int spwin32buffer_add_printf(struct spwin32buffer *, const char *fmt, ...)
  159 +#ifdef __GNUC__
  160 + __attribute__((format(printf, 2, 3)))
  161 +#endif
  162 +;
  163 +
  164 +
  165 +/**
  166 + Append a va_list formatted string to the end of an spwin32buffer.
  167 +
  168 + @param buf the spwin32buffer that will be appended to
  169 + @param fmt a format string
  170 + @param ap a varargs va_list argument array that will be passed to vprintf(3)
  171 + @return 0 if successful, or -1 if an error occurred
  172 + */
  173 +int spwin32buffer_add_vprintf(struct spwin32buffer *, const char *fmt, va_list ap);
  174 +
  175 +
  176 +/**
  177 + Remove a specified number of bytes data from the beginning of an spwin32buffer.
  178 +
  179 + @param buf the spwin32buffer to be drained
  180 + @param len the number of bytes to drain from the beginning of the buffer
  181 + @return 0 if successful, or -1 if an error occurred
  182 + */
  183 +void spwin32buffer_drain(struct spwin32buffer *, size_t);
  184 +
  185 +
  186 +/**
  187 + Write the contents of an spwin32buffer to a file descriptor.
  188 +
  189 + The spwin32buffer will be drained after the bytes have been successfully written.
  190 +
  191 + @param buffer the spwin32buffer to be written and drained
  192 + @param fd the file descriptor to be written to
  193 + @return the number of bytes written, or -1 if an error occurred
  194 + @see spwin32buffer_read()
  195 + */
  196 +int spwin32buffer_write(struct spwin32buffer *, int);
  197 +
  198 +
  199 +/**
  200 + Read from a file descriptor and store the result in an spwin32buffer.
  201 +
  202 + @param buf the spwin32buffer to store the result
  203 + @param fd the file descriptor to read from
  204 + @param howmuch the number of bytes to be read
  205 + @return the number of bytes read, or -1 if an error occurred
  206 + @see spwin32buffer_write()
  207 + */
  208 +int spwin32buffer_read(struct spwin32buffer *, int, int);
  209 +
  210 +
  211 +/**
  212 + Find a string within an spwin32buffer.
  213 +
  214 + @param buffer the spwin32buffer to be searched
  215 + @param what the string to be searched for
  216 + @param len the length of the search string
  217 + @return a pointer to the beginning of the search string, or NULL if the search failed.
  218 + */
  219 +u_char *spwin32buffer_find(struct spwin32buffer *, const u_char *, size_t);
  220 +
  221 +/**
  222 + Set a callback to invoke when the spwin32buffer is modified.
  223 +
  224 + @param buffer the spwin32buffer to be monitored
  225 + @param cb the callback function to invoke when the spwin32buffer is modified
  226 + @param cbarg an argument to be provided to the callback function
  227 + */
  228 +void spwin32buffer_setcb(struct spwin32buffer *, void (*)(struct spwin32buffer *, size_t, size_t, void *), void *);
  229 +
  230 +#ifdef __cplusplus
  231 +}
  232 +#endif
  233 +
  234 +#endif
  235 +
... ...
注册登录 后发表评论