70 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			70 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#ifndef IO_H
							 | 
						||
| 
								 | 
							
								#define IO_H
							 | 
						||
| 
								 | 
							
								/*=========================================================================*\
							 | 
						||
| 
								 | 
							
								* Input/Output abstraction
							 | 
						||
| 
								 | 
							
								* LuaSocket toolkit
							 | 
						||
| 
								 | 
							
								*
							 | 
						||
| 
								 | 
							
								* This module defines the interface that LuaSocket expects from the
							 | 
						||
| 
								 | 
							
								* transport layer for streamed input/output. The idea is that if any
							 | 
						||
| 
								 | 
							
								* transport implements this interface, then the buffer.c functions
							 | 
						||
| 
								 | 
							
								* automatically work on it.
							 | 
						||
| 
								 | 
							
								*
							 | 
						||
| 
								 | 
							
								* The module socket.h implements this interface, and thus the module tcp.h
							 | 
						||
| 
								 | 
							
								* is very simple.
							 | 
						||
| 
								 | 
							
								\*=========================================================================*/
							 | 
						||
| 
								 | 
							
								#include <stdio.h>
							 | 
						||
| 
								 | 
							
								#include "lua.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "timeout.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace NS_SLUA {    
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* IO error codes */
							 | 
						||
| 
								 | 
							
								enum {
							 | 
						||
| 
								 | 
							
								    IO_DONE = 0,        /* operation completed successfully */
							 | 
						||
| 
								 | 
							
								    IO_TIMEOUT = -1,    /* operation timed out */
							 | 
						||
| 
								 | 
							
								    IO_CLOSED = -2,     /* the connection has been closed */
							 | 
						||
| 
								 | 
							
									IO_UNKNOWN = -3     
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* interface to error message function */
							 | 
						||
| 
								 | 
							
								typedef const char *(*p_error) (
							 | 
						||
| 
								 | 
							
								    void *ctx,          /* context needed by send */
							 | 
						||
| 
								 | 
							
								    int err             /* error code */
							 | 
						||
| 
								 | 
							
								);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* interface to send function */
							 | 
						||
| 
								 | 
							
								typedef int (*p_send) (
							 | 
						||
| 
								 | 
							
								    void *ctx,          /* context needed by send */
							 | 
						||
| 
								 | 
							
								    const char *data,   /* pointer to buffer with data to send */
							 | 
						||
| 
								 | 
							
								    size_t count,       /* number of bytes to send from buffer */
							 | 
						||
| 
								 | 
							
								    size_t *sent,       /* number of bytes sent uppon return */
							 | 
						||
| 
								 | 
							
								    p_timeout tm        /* timeout control */
							 | 
						||
| 
								 | 
							
								);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* interface to recv function */
							 | 
						||
| 
								 | 
							
								typedef int (*p_recv) (
							 | 
						||
| 
								 | 
							
								    void *ctx,          /* context needed by recv */
							 | 
						||
| 
								 | 
							
								    char *data,         /* pointer to buffer where data will be writen */
							 | 
						||
| 
								 | 
							
								    size_t count,       /* number of bytes to receive into buffer */
							 | 
						||
| 
								 | 
							
								    size_t *got,        /* number of bytes received uppon return */
							 | 
						||
| 
								 | 
							
								    p_timeout tm        /* timeout control */
							 | 
						||
| 
								 | 
							
								);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* IO driver definition */
							 | 
						||
| 
								 | 
							
								typedef struct t_io_ {
							 | 
						||
| 
								 | 
							
								    void *ctx;          /* context needed by send/recv */
							 | 
						||
| 
								 | 
							
								    p_send send;        /* send function pointer */
							 | 
						||
| 
								 | 
							
								    p_recv recv;        /* receive function pointer */
							 | 
						||
| 
								 | 
							
								    p_error error;      /* strerror function */
							 | 
						||
| 
								 | 
							
								} t_io;
							 | 
						||
| 
								 | 
							
								typedef t_io *p_io;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void io_init(p_io io, p_send send, p_recv recv, p_error error, void *ctx);
							 | 
						||
| 
								 | 
							
								const char *io_strerror(int err);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} // end NS_SLUA
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif /* IO_H */
							 | 
						||
| 
								 | 
							
								
							 |