GNUnet 0.21.1
fs_list_indexed.c
Go to the documentation of this file.
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2003, 2004, 2006, 2009 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
27#include "platform.h"
28#include "gnunet_constants.h"
29
30#include "gnunet_fs_service.h"
31#include "gnunet_protocols.h"
32#include "fs_api.h"
33
34
39{
44
49
54
59
63 void *cont_cls;
64};
65
66
74static void
76 const struct GNUNET_MessageHeader *msg)
77{
78 struct GNUNET_FS_GetIndexedContext *gic = cls;
79
80 (void) gic->iterator (gic->iterator_cls,
81 NULL,
82 NULL);
84}
85
86
94static int
96 const struct IndexInfoMessage *iim)
97{
98 uint16_t msize = ntohs (iim->header.size) - sizeof(*iim);
99 const char *filename;
100
101 filename = (const char *) &iim[1];
102 if (filename[msize - 1] != '\0')
103 {
104 GNUNET_break (0);
105 return GNUNET_SYSERR;
106 }
107 return GNUNET_OK;
108}
109
110
118static void
120 const struct IndexInfoMessage *iim)
121{
122 struct GNUNET_FS_GetIndexedContext *gic = cls;
123 const char *filename;
124
125 filename = (const char *) &iim[1];
126 if (GNUNET_OK !=
128 filename,
129 &iim->file_id))
130 {
132 return;
133 }
134}
135
136
145static void
147 enum GNUNET_MQ_Error error)
148{
149 struct GNUNET_FS_GetIndexedContext *gic = cls;
150
152 "Failed to receive response from `%s' service (error code is %d).\n",
153 "fs",
154 error);
155 (void) gic->iterator (gic->iterator_cls,
156 NULL,
157 NULL);
159}
160
161
165 void *iterator_cls)
166{
170 GNUNET_MQ_hd_fixed_size (index_info_end,
173 gic),
174 GNUNET_MQ_hd_var_size (index_info,
176 struct IndexInfoMessage,
177 gic),
179 };
180 struct GNUNET_MQ_Envelope *env;
182
184 "fs",
185 handlers,
187 h);
188 if (NULL == gic->mq)
189 {
191 _ ("Failed to not connect to `%s' service.\n"),
192 "fs");
194 return NULL;
195 }
196 gic->iterator = iterator;
197 gic->iterator_cls = iterator_cls;
201 env);
202 return gic;
203}
204
205
211void
213{
216}
217
218
219/* end of fs_list_indexed.c */
struct GNUNET_MQ_MessageHandlers handlers[]
Definition: 003.c:1
struct GNUNET_MessageHeader * msg
Definition: 005.c:2
struct GNUNET_MQ_Envelope * env
Definition: 005.c:1
shared definitions for the FS library
static void handle_index_info(void *cls, const struct IndexInfoMessage *iim)
Function called on each response from the FS service with information about indexed files.
static void mq_error_handler(void *cls, enum GNUNET_MQ_Error error)
Generic error handler, called with the appropriate error code and the same closure specified at the c...
static int check_index_info(void *cls, const struct IndexInfoMessage *iim)
Check validity of response from the FS service with information about indexed files.
static void handle_index_info_end(void *cls, const struct GNUNET_MessageHeader *msg)
Function called on each response from the FS service with information about indexed files.
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:99
static char * filename
static struct GNUNET_FS_GetIndexedContext * gic
Handle for the index listing operation.
Definition: gnunet-fs.c:42
API for file sharing via GNUnet.
Constants for network protocols.
struct GNUNET_MQ_Handle * GNUNET_CLIENT_connect(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *service_name, const struct GNUNET_MQ_MessageHandler *handlers, GNUNET_MQ_ErrorHandler error_handler, void *error_handler_cls)
Create a message queue to connect to a GNUnet service.
Definition: client.c:1057
struct GNUNET_FS_GetIndexedContext * GNUNET_FS_get_indexed_files(struct GNUNET_FS_Handle *h, GNUNET_FS_IndexedFileProcessor iterator, void *iterator_cls)
Iterate over all indexed files.
void GNUNET_FS_get_indexed_files_cancel(struct GNUNET_FS_GetIndexedContext *gic)
Cancel iteration over all indexed files.
int(* GNUNET_FS_IndexedFileProcessor)(void *cls, const char *filename, const struct GNUNET_HashCode *file_id)
Type of a function called by GNUNET_FS_get_indexed_files.
#define GNUNET_log(kind,...)
@ GNUNET_OK
@ GNUNET_SYSERR
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur.
@ GNUNET_ERROR_TYPE_WARNING
#define GNUNET_new(type)
Allocate a struct or union of the given type.
#define GNUNET_free(ptr)
Wrapper around free.
GNUNET_MQ_Error
Error codes for the queue.
void GNUNET_MQ_send(struct GNUNET_MQ_Handle *mq, struct GNUNET_MQ_Envelope *ev)
Send a message with the given message queue.
Definition: mq.c:304
#define GNUNET_MQ_handler_end()
End-marker for the handlers array.
#define GNUNET_MQ_msg(mvar, type)
Allocate a GNUNET_MQ_Envelope.
Definition: gnunet_mq_lib.h:78
#define GNUNET_MQ_hd_var_size(name, code, str, ctx)
#define GNUNET_MQ_hd_fixed_size(name, code, str, ctx)
void GNUNET_MQ_destroy(struct GNUNET_MQ_Handle *mq)
Destroy the message queue.
Definition: mq.c:683
#define GNUNET_MESSAGE_TYPE_FS_INDEX_LIST_GET
Request from client for list of indexed files.
#define GNUNET_MESSAGE_TYPE_FS_INDEX_LIST_ENTRY
Reply to client with an indexed file name.
#define GNUNET_MESSAGE_TYPE_FS_INDEX_LIST_END
Reply to client indicating end of list.
void(* GNUNET_SCHEDULER_TaskCallback)(void *cls)
Signature of the main function of a task.
#define _(String)
GNU gettext support macro.
Definition: platform.h:178
const struct GNUNET_CONFIGURATION_Handle * cfg
The configuration that we are using.
Definition: arm_api.c:112
Context for GNUNET_FS_get_indexed_files().
void * cont_cls
Closure for cont.
void * iterator_cls
Closure for iterator.
GNUNET_SCHEDULER_TaskCallback cont
Continuation to trigger at the end.
GNUNET_FS_IndexedFileProcessor iterator
Function to call for each indexed file.
struct GNUNET_MQ_Handle * mq
Connection to the FS service.
Master context for most FS operations.
Definition: fs_api.h:1070
Handle to a message queue.
Definition: mq.c:87
Message handler for a specific message type.
Header for all communications.
uint16_t size
The length of the struct (in bytes, including the length field itself), in big-endian format.
Message send by FS service in response to a request asking for a list of all indexed files.
Definition: fs.h:197
struct GNUNET_HashCode file_id
Hash of the indexed file.
Definition: fs.h:212
struct GNUNET_MessageHeader header
Message type will be GNUNET_MESSAGE_TYPE_FS_INDEX_LIST_ENTRY.
Definition: fs.h:202