From 0de902286156e4b44c04f39dfe6bbc731dea0455 Mon Sep 17 00:00:00 2001 From: Georg Hopp Date: Sun, 17 Aug 2014 08:32:58 +0100 Subject: [PATCH] allow variable arguments for response and request generation --- include/tr/interface/protocol.h | 8 ++++---- src/i_protocol.c | 18 ++++++++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/include/tr/interface/protocol.h b/include/tr/interface/protocol.h index 0ecd349..364241c 100644 --- a/include/tr/interface/protocol.h +++ b/include/tr/interface/protocol.h @@ -32,8 +32,8 @@ #include "tr/proto_message.h" typedef TR_ProtoMessage (* fptr_TR_protoCreateMessage)(void *); -typedef TR_ProtoMessage (* fptr_TR_protoCreateRequest)(void *); -typedef TR_ProtoMessage (* fptr_TR_protoCreateResponse)(void *); +typedef TR_ProtoMessage (* fptr_TR_protoCreateRequest)(void *, va_list *); +typedef TR_ProtoMessage (* fptr_TR_protoCreateResponse)(void *, va_list *); typedef TR_RemoteData (* fptr_TR_protoCompose)(void *, TR_ProtoMessage); typedef size_t (* fptr_TR_protoParse)(void *, TR_ProtoMessage, TR_RemoteData); @@ -47,8 +47,8 @@ TR_INTERFACE(TR_Protocol) { }; TR_ProtoMessage TR_protoCreateMessage(void *, TR_Socket); -TR_ProtoMessage TR_protoCreateRequest(void *, TR_Socket); -TR_ProtoMessage TR_protoCreateResponse(void *, TR_Socket); +TR_ProtoMessage TR_protoCreateRequest(void *, TR_Socket, ...); +TR_ProtoMessage TR_protoCreateResponse(void *, TR_Socket, ...); size_t TR_protoParse(void *, TR_ProtoMessage, TR_RemoteData); TR_RemoteData TR_protoCompose(void *, TR_ProtoMessage); diff --git a/src/i_protocol.c b/src/i_protocol.c index feaaa1a..b30bb06 100644 --- a/src/i_protocol.c +++ b/src/i_protocol.c @@ -42,24 +42,34 @@ TR_protoCreateMessage(void * _this, TR_Socket remote) } TR_ProtoMessage -TR_protoCreateRequest(void * _this, TR_Socket remote) +TR_protoCreateRequest(void * _this, TR_Socket remote, ...) { TR_ProtoMessage callret; - TR_RETCALL(_this, TR_Protocol, createRequest, callret); + va_list params; + + va_start(params, remote); + TR_RETCALL(_this, TR_Protocol, createRequest, callret, params); if (callret != NULL) { callret->remote = remote; } + va_end(params); + return callret; } TR_ProtoMessage -TR_protoCreateResponse(void * _this, TR_Socket remote) +TR_protoCreateResponse(void * _this, TR_Socket remote, ...) { TR_ProtoMessage callret; - TR_RETCALL(_this, TR_Protocol, createResponse, callret); + va_list params; + + va_start(params, remote); + TR_RETCALL(_this, TR_Protocol, createResponse, callret, params); if (callret != NULL) { callret->remote = remote; } + va_end(params); + return callret; }