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 
37 {
38 
43 
48 
52  void *cls;
53 
54 };
55 
56 
62 static void
64 {
66 
67  if (NULL != ohh->cont)
68  ohh->cont (ohh->cls);
70 }
71 
72 
90  const struct GNUNET_MessageHeader *hello,
92  void *cont_cls)
93 {
96  struct GNUNET_MQ_Envelope *env;
97  struct GNUNET_PeerIdentity peer;
98 
99  if (GNUNET_OK !=
100  GNUNET_HELLO_get_id ((const struct GNUNET_HELLO_Message *) hello,
101  &peer))
102  {
103  GNUNET_break (0);
104  GNUNET_free (ohh);
105  return NULL;
106  }
107  ohh->mq = GNUNET_CLIENT_connect (cfg,
108  "transport",
109  NULL,
110  NULL,
111  ohh);
112  if (NULL == ohh->mq)
113  {
114  GNUNET_free (ohh);
115  return NULL;
116  }
117  ohh->cont = cont;
118  ohh->cls = cont_cls;
119  GNUNET_break (ntohs (hello->type) == GNUNET_MESSAGE_TYPE_HELLO);
120  env = GNUNET_MQ_msg_copy (hello);
123  ohh);
124  GNUNET_MQ_send (ohh->mq,
125  env);
126  return ohh;
127 }
128 
129 
135 void
137 {
138  GNUNET_MQ_destroy (ohh->mq);
139  GNUNET_free (ohh);
140 }
141 
142 
143 /* 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:668
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:653
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:901
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78
#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:774
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:85
The identity of the host (wraps the signing key of the peer).
configuration data
Definition: configuration.c:85
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:824
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:353
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.