/** * \file * * \author Georg Hopp * * \copyright * Copyright © 2014 Georg Hopp * * 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 . */ #ifndef __TR_COMM_END_POINT_H__ #define __TR_COMM_END_POINT_H__ #include #include "trbase.h" #include "trevent.h" #include "trdata.h" /* * Read ahead limits. * These values should be conficurable in the future. */ #define CEP_WRITE_BUFFER_THRESHOLD 512 * 1024 #define CEP_DEFAULT_READ_SIZE 128 * 1024 TR_CLASS(TR_CommEndPoint) { TR_EXTENDS(TR_EventSubject); void * protocol; // will be type TR_Protocol as soon as it is there. TR_Socket transport; int do_close; TR_Queue write_buffer; size_t write_buffer_size; size_t read_chunk_size; // bytes }; TR_INSTANCE_INIT(TR_CommEndPoint); TR_CLASSVARS_DECL(TR_CommEndPoint) { TR_CV_EXTENDS(TR_EventSubject); }; #define TR_CEP_EVENT_DO_READ 0 // IoHandler #define TR_CEP_EVENT_DO_WRITE 1 // IoHandler #define TR_CEP_EVENT_READ_BLOCK 2 // CommManager #define TR_CEP_EVENT_WRITE_BLOCK 3 // CommManager #define TR_CEP_EVENT_WBUF_FULL 4 // CommManager #define TR_CEP_EVENT_NEW_DATA 5 // ProtocolHandler #define TR_CEP_EVENT_NEW_MSG 6 // Application #define TR_CEP_EVENT_MSG_READY 7 // ProtocolHandler #define TR_CEP_EVENT_DATA_READY 8 // CommManager #define TR_CEP_EVENT_DATA_END 9 // CommManager #define TR_CEP_EVENT_SHUT_READ 10 // CommManager #define TR_CEP_EVENT_SHUT_WRITE 11 // CommManager #define TR_CEP_EVENT_CLOSE 12 // CommManager #define TR_CEP_EVENT_IO_DONE 13 // CommManager #define TR_CEP_EVENT_MAX ((size_t)TR_CEP_EVENT_IO_DONE) #define TR_cepSetClose(ep) ((ep)->do_close = 1) #define TR_cepHasProto(ep, proto) (TR_INSTANCE_OF(proto, TR_cepGetProto(ep))) #define TR_cepGetProto(ep) ((ep)->protocol) #define TR_cepGetHandle(ep) ((ep)->transport->handle) #define TR_cepHasPendingData(ep) (! TR_queueEmpty((ep)->write_buffer)) #define TR_cepNextWriteData(ep) (TR_queueGet(this->write_buffer)) void TR_cepAppendReadData(TR_CommEndPoint, TR_RemoteData); void TR_cepAppendWriteData(TR_CommEndPoint, TR_RemoteData); int TR_commEndPointRead(TR_CommEndPoint, TR_RemoteData *); int TR_cepWriteBuffered(TR_CommEndPoint, size_t *); #endif // __TR_COMM_END_POINT_H__ // vim: set ts=4 sw=4: