Communication protocol handler for the taskrambler framework. This does not contain specific protocol implementations but the abstract code to handle them.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

83 lines
2.8 KiB

/**
* \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 <http://www.gnu.org/licenses/>.
*/
#ifndef __TR_COMM_END_POINT_H__
#define __TR_COMM_END_POINT_H__
#include <sys/types.h>
#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 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_MAX ((size_t)TR_CEP_EVENT_CLOSE)
#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: