diff options
Diffstat (limited to 'src/microspdy/internal.h')
-rw-r--r-- | src/microspdy/internal.h | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/src/microspdy/internal.h b/src/microspdy/internal.h new file mode 100644 index 00000000..e618a5a7 --- /dev/null +++ b/src/microspdy/internal.h @@ -0,0 +1,198 @@ +/* + This file is part of libmicrospdy + Copyright Copyright (C) 2012 Andrey Uzunov + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +/** + * @file microspdy/internal.h + * @brief internal functions and macros for the framing layer + * @author Andrey Uzunov + */ + +#ifndef INTERNAL_H_H +#define INTERNAL_H_H + +#include "platform.h" +#include "microspdy.h" + +/** + * size of read buffers for each connection + * must be at least the size of SPDY_MAX_SUPPORTED_FRAME_SIZE + */ +#define SPDYF_BUFFER_SIZE 8192 + +/** + * initial size of window for each stream (this is for the data + * within data frames that can be handled) + */ +#define SPDYF_INITIAL_WINDOW_SIZE 65536 + +/** + * number of frames written to the socket at once. After X frames + * everything should be run again. In this way the application can + * response to more important requests while a big file is still + * being transmitted to the client + */ +#define SPDYF_NUM_SENT_FRAMES_AT_ONCE 10 + + +/** + * Handler for fatal errors. + */ +extern SPDY_PanicCallback spdyf_panic; + + +/** + * Closure argument for "mhd_panic". + */ +extern void *spdyf_panic_cls; + + +/** + * Trigger 'panic' action based on fatal errors. + * + * @param msg error message (const char *) + */ +#define SPDYF_PANIC(msg) \ + spdyf_panic (spdyf_panic_cls, __FILE__, __LINE__, msg) + + +/** + * Asserts the validity of an expression. + * + * @param expr (bool) + * @param msg message to print on error (const char *) + */ +#define SPDYF_ASSERT(expr, msg) \ + if(!(expr)){\ + SPDYF_PANIC(msg);\ + abort();\ + } + + +/** + * Convert 24 bit integer from host byte order to network byte order. + * + * @param n input value (int32_t) + * @return converted value (uint32_t) + */ +#if HAVE_BIG_ENDIAN +#define HTON24(n) n +#else +#define HTON24(n) (((((uint32_t)(n) & 0xFF)) << 16)\ + | (((uint32_t)(n) & 0xFF00))\ + | ((((uint32_t)(n) & 0xFF0000)) >> 16)) +#endif + + +/** + * Convert 24 bit integer from network byte order to host byte order. + * + * @param n input value (int32_t) + * @return converted value (uint32_t) + */ +#if HAVE_BIG_ENDIAN +#define NTOH24(n) n +#else +#define NTOH24(n) (((((uint32_t)(n) & 0xFF)) << 16)\ + | (((uint32_t)(n) & 0xFF00))\ + | ((((uint32_t)(n) & 0xFF0000)) >> 16)) +#endif + + +/** + * Convert 31 bit integer from network byte order to host byte order. + * + * @param n input value (int32_t) + * @return converted value (uint32_t) + */ +#if HAVE_BIG_ENDIAN +#define NTOH31(n) n +#else +#define NTOH31(n) (((((uint32_t)(n) & 0x7F)) << 24) | \ + ((((uint32_t)(n) & 0xFF00)) << 8) | \ + ((((uint32_t)(n) & 0xFF0000)) >> 8) | \ + ((((uint32_t)(n) & 0xFF000000)) >> 24)) +#endif + + +/** + * Convert 31 bit integer from host byte order to network byte order. + * + * @param n input value (int32_t) + * @return converted value (uint32_t) + */ +#if HAVE_BIG_ENDIAN +#define HTON31(n) n +#else +#define HTON31(n) (((((uint32_t)(n) & 0xFF)) << 24) | \ + ((((uint32_t)(n) & 0xFF00)) << 8) | \ + ((((uint32_t)(n) & 0xFF0000)) >> 8) | \ + ((((uint32_t)(n) & 0x7F000000)) >> 24)) +#endif + + +/** + * Print formatted debug value. + * + * @param fmt format (const char *) + * @param ... args for format + */ +#define SPDYF_DEBUG(fmt, ...) do { \ + fprintf (stdout, "%s\n%u: ",__FILE__, __LINE__);\ + fprintf(stdout,fmt,##__VA_ARGS__);\ + fprintf(stdout,"\n");\ + fflush(stdout); } while (0) + + +/** + * Print stream for debuging. + * + * @param strm (void *) + * @param size (int) + */ +#define SPDYF_PRINT_STREAM(strm, size) do { \ + int ___i;\ + for(___i=0;___i<size;___i++){\ + fprintf(stdout,"%x ",*((uint8_t *) strm + ___i));\ + fflush(stdout);\ + }\ + fprintf(stdout,"\n");\ + } while (0) + + +/** + * Print message and raise SIGINT for debug purposes. + * + * @param msg message (const char *) + */ +#define SPDYF_SIGINT(msg) do { \ + fprintf(stdout,"%i : %s\n", __LINE__,__FILE__);\ + fprintf(stdout,msg);\ + fprintf(stdout,"\n");\ + fflush(stdout);\ + raise(SIGINT); } while (0) + + +/** + * Returns monotonic time, to be used for session timeouts. + * + * @return time in milliseconds + */ +unsigned long long +SPDYF_monotonic_time(void); + +#endif |