X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Fserver_mst.c;h=0a686a079e6323e44ef949a774fd4c6ef991c21c;hb=60de5f48cbfc3868570284e91415ca7e06c390e1;hp=1523de91a96c5d509fbd0addc75a25f697326f1b;hpb=a5ca53b73e643a0e62ded4ac9595bff38d08cb0b;p=oweals%2Fgnunet.git diff --git a/src/util/server_mst.c b/src/util/server_mst.c index 1523de91a..0a686a079 100644 --- a/src/util/server_mst.c +++ b/src/util/server_mst.c @@ -1,10 +1,10 @@ /* This file is part of GNUnet. - (C) 2010 Christian Grothoff (and other contributing authors) + Copyright (C) 2010 GNUnet e.V. GNUnet 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 2, or (at your + by the Free Software Foundation; either version 3, or (at your option) any later version. GNUnet is distributed in the hope that it will be useful, but @@ -14,8 +14,8 @@ You should have received a copy of the GNU General Public License along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /** @@ -25,11 +25,7 @@ */ #include "platform.h" -#include "gnunet_common.h" -#include "gnunet_connection_lib.h" -#include "gnunet_scheduler_lib.h" -#include "gnunet_server_lib.h" -#include "gnunet_time_lib.h" +#include "gnunet_util_lib.h" #if HAVE_UNALIGNED_64_ACCESS @@ -85,7 +81,7 @@ struct GNUNET_SERVER_MessageStreamTokenizer * Create a message stream tokenizer. * * @param cb function to call on completed messages - * @param cb_cls closure for cb + * @param cb_cls closure for @a cb * @return handle to tokenizer */ struct GNUNET_SERVER_MessageStreamTokenizer * @@ -94,7 +90,7 @@ GNUNET_SERVER_mst_create (GNUNET_SERVER_MessageTokenizerCallback cb, { struct GNUNET_SERVER_MessageStreamTokenizer *ret; - ret = GNUNET_malloc (sizeof (struct GNUNET_SERVER_MessageStreamTokenizer)); + ret = GNUNET_new (struct GNUNET_SERVER_MessageStreamTokenizer); ret->hdr = GNUNET_malloc (GNUNET_SERVER_MIN_BUFFER_SIZE); ret->curr_buf = GNUNET_SERVER_MIN_BUFFER_SIZE; ret->cb = cb; @@ -110,17 +106,18 @@ GNUNET_SERVER_mst_create (GNUNET_SERVER_MessageTokenizerCallback cb, * @param mst tokenizer to use * @param client_identity ID of client for which this is a buffer * @param buf input data to add - * @param size number of bytes in buf + * @param size number of bytes in @a buf * @param purge should any excess bytes in the buffer be discarded * (i.e. for packet-based services like UDP) * @param one_shot only call callback once, keep rest of message in buffer - * @return GNUNET_OK if we are done processing (need more data) - * GNUNET_NO if one_shot was set and we have another message ready - * GNUNET_SYSERR if the data stream is corrupt + * @return #GNUNET_OK if we are done processing (need more data) + * #GNUNET_NO if @a one_shot was set and we have another message ready + * #GNUNET_SYSERR if the data stream is corrupt */ int GNUNET_SERVER_mst_receive (struct GNUNET_SERVER_MessageStreamTokenizer *mst, - void *client_identity, const char *buf, size_t size, + void *client_identity, + const char *buf, size_t size, int purge, int one_shot) { const struct GNUNET_MessageHeader *hdr; @@ -221,7 +218,8 @@ do_align: if (one_shot == GNUNET_YES) one_shot = GNUNET_SYSERR; mst->off += want; - mst->cb (mst->cb_cls, client_identity, hdr); + if (GNUNET_SYSERR == mst->cb (mst->cb_cls, client_identity, hdr)) + return GNUNET_SYSERR; if (mst->off == mst->pos) { /* reset to beginning of buffer, it's free right now! */ @@ -261,7 +259,8 @@ do_align: } if (one_shot == GNUNET_YES) one_shot = GNUNET_SYSERR; - mst->cb (mst->cb_cls, client_identity, hdr); + if (GNUNET_SYSERR == mst->cb (mst->cb_cls, client_identity, hdr)) + return GNUNET_SYSERR; buf += want; size -= want; }