GNUnet  0.10.x
transport_api_offer_hello.c
Go to the documentation of this file.
1 /*
2  This file is part of GNUnet.
3  Copyright (C) 2009-2013, 2016 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 
26 #include "platform.h"
27 #include "gnunet_util_lib.h"
28 #include "gnunet_hello_lib.h"
29 #include "gnunet_protocols.h"
31 
32 
41 
46 
50  void *cls;
51 };
52 
53 
59 static void
61 {
63 
64  if (NULL != ohh->cont)
65  ohh->cont(ohh->cls);
67 }
68 
69 
87  const struct GNUNET_MessageHeader *hello,
89  void *cont_cls)
90 {
93  struct GNUNET_MQ_Envelope *env;
94  struct GNUNET_PeerIdentity peer;
95 
96  if (GNUNET_OK !=
97  GNUNET_HELLO_get_id((const struct GNUNET_HELLO_Message *)hello,
98  &peer))
99  {
100  GNUNET_break(0);
101  GNUNET_free(ohh);
102  return NULL;
103  }
104  ohh->mq = GNUNET_CLIENT_connect(cfg,
105  "transport",
106  NULL,
107  NULL,
108  ohh);
109  if (NULL == ohh->mq)
110  {
111  GNUNET_free(ohh);
112  return NULL;
113  }
114  ohh->cont = cont;
115  ohh->cls = cont_cls;
116  GNUNET_break(ntohs(hello->type) == GNUNET_MESSAGE_TYPE_HELLO);
117  env = GNUNET_MQ_msg_copy(hello);
120  ohh);
121  GNUNET_MQ_send(ohh->mq,
122  env);
123  return ohh;
124 }
125 
126 
132 void
134 {
135  GNUNET_MQ_destroy(ohh->mq);
136  GNUNET_free(ohh);
137 }
138 
139 
140 /* end of transport_api_offer_hello.c */
int GNUNET_HELLO_get_id(const struct GNUNET_HELLO_Message *hello, struct GNUNET_PeerIdentity *peer)
Get the peer identity from a HELLO message.
Definition: hello.c:662
struct GNUNET_MQ_Envelope * GNUNET_MQ_msg_copy(const struct GNUNET_MessageHeader *hdr)
Create a new envelope by copying an existing message.
Definition: mq.c:651
A HELLO message is used to exchange information about transports with other peers.
Entry in linked list for all offer-HELLO requests.
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:900
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
#define GNUNET_new(type)
Allocate a struct or union of the given type.
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
void(* GNUNET_SCHEDULER_TaskCallback)(void *cls)
Signature of the main function of a task.
void GNUNET_MQ_notify_sent(struct GNUNET_MQ_Envelope *ev, GNUNET_SCHEDULER_TaskCallback cb, void *cb_cls)
Call a callback once the envelope has been sent, that is, sending it can not be canceled anymore...
Definition: mq.c:772
void GNUNET_TRANSPORT_offer_hello_cancel(struct GNUNET_TRANSPORT_OfferHelloHandle *ohh)
Cancel the request to transport to offer the HELLO message.
static struct GNUNET_CONFIGURATION_Handle * cfg
Our configuration.
Definition: gnunet-arm.c:104
struct GNUNET_MQ_Envelope * env
Definition: 005.c:1
Handle to a message queue.
Definition: mq.c:84
The identity of the host (wraps the signing key of the peer).
configuration data
Definition: configuration.c:83
struct GNUNET_TRANSPORT_OfferHelloHandle * GNUNET_TRANSPORT_offer_hello(const struct GNUNET_CONFIGURATION_Handle *cfg, const struct GNUNET_MessageHeader *hello, GNUNET_SCHEDULER_TaskCallback cont, void *cont_cls)
Offer the transport service the HELLO of another peer.
Header for all communications.
void GNUNET_MQ_destroy(struct GNUNET_MQ_Handle *mq)
Destroy the message queue.
Definition: mq.c:821
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:351
static void finished_hello(void *cls)
Done sending HELLO message to the service, notify application.
#define GNUNET_MESSAGE_TYPE_HELLO
HELLO message with friend only flag used for communicating peer addresses.
struct GNUNET_MQ_Handle * mq
Transport service handle we use for transmission.
GNUNET_SCHEDULER_TaskCallback cont
Function to call once we are done.
#define GNUNET_free(ptr)
Wrapper around free.