1 /* 2 This file is part of libmicrospdy 3 Copyright Copyright (C) 2013 Andrey Uzunov 4 5 This program is free software: you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation, either version 3 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. 17 */ 18 19 /** 20 * @file io_raw.h 21 * @brief IO for SPDY without TLS. 22 * @author Andrey Uzunov 23 */ 24 25 #ifndef IO_RAW_H 26 #define IO_RAW_H 27 28 #include "platform.h" 29 30 31 /** 32 * Must be called only once in the program. 33 * 34 */ 35 void 36 SPDYF_raw_global_init(); 37 38 39 /** 40 * Should be called 41 * at the end of the program. 42 * 43 */ 44 void 45 SPDYF_raw_global_deinit(); 46 47 48 /** 49 * Must be called when the daemon starts. 50 * 51 * @param daemon SPDY_Daemon 52 * @return SPDY_YES on success or SPDY_NO on error 53 */ 54 int 55 SPDYF_raw_init(struct SPDY_Daemon *daemon); 56 57 58 /** 59 * Should be called 60 * when the deamon is stopped. 61 * 62 * @param daemon SPDY_Daemon which is being stopped 63 */ 64 void 65 SPDYF_raw_deinit(struct SPDY_Daemon *daemon); 66 67 68 /** 69 * Must be called 70 * after the connection has been accepted. 71 * 72 * @param session SPDY_Session whose socket will be used 73 * @return SPDY_NO if some funcs fail. SPDY_YES otherwise 74 */ 75 int 76 SPDYF_raw_new_session(struct SPDY_Session *session); 77 78 79 /** 80 * Should be called 81 * closing session's socket. 82 * 83 * @param session SPDY_Session whose socket is used 84 */ 85 void 86 SPDYF_raw_close_session(struct SPDY_Session *session); 87 88 89 /** 90 * Reading from socket. Reads available data and put it to the 91 * buffer. 92 * 93 * @param session for which data is received 94 * @param buffer where data from the socket will be written to 95 * @param size of the buffer 96 * @return number of bytes (at most size) read from the connection 97 * 0 if the other party has closed the connection 98 * SPDY_IO_ERROR code on error 99 */ 100 int 101 SPDYF_raw_recv(struct SPDY_Session *session, 102 void * buffer, 103 size_t size); 104 105 106 /** 107 * Writing to socket. Writes the data given into the buffer to the 108 * socket. 109 * 110 * @param session whose context is used 111 * @param buffer from where data will be written to the socket 112 * @param size number of bytes to be taken from the buffer 113 * @return number of bytes (at most size) from the buffer that has been 114 * written to the connection 115 * 0 if the other party has closed the connection 116 * SPDY_IO_ERROR code on error 117 */ 118 int 119 SPDYF_raw_send(struct SPDY_Session *session, 120 const void * buffer, 121 size_t size); 122 123 124 /** 125 * Checks if there is data staying in the buffers of the underlying 126 * system that waits to be read. Always returns SPDY_NO, as we do not 127 * use a subsystem here. 128 * 129 * @param session which is checked 130 * @return SPDY_YES if data is pending or SPDY_NO otherwise 131 */ 132 int 133 SPDYF_raw_is_pending(struct SPDY_Session *session); 134 135 136 /** 137 * Sets TCP_CORK. 138 * 139 * @param session 140 * @return SPDY_NO if writing must not happen in the call; 141 * SPDY_YES otherwise 142 */ 143 int 144 SPDYF_raw_before_write(struct SPDY_Session *session); 145 146 147 /** 148 * Unsets TCP_CORK. 149 * 150 * @param session 151 * @param was_written has the same value as the write function for the 152 * session will return 153 * @return returned value will be used by the write function to return 154 */ 155 int 156 SPDYF_raw_after_write(struct SPDY_Session *session, int was_written); 157 158 #endif 159