Main Page | Modules | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

gmsg.h File Reference


Detailed Description

Gnutella Messages.

Author:
Raphael Manfredi
Date:
2002-2003

#include "gnutella.h"
#include "pmsg.h"
#include "if/core/search.h"

Go to the source code of this file.

Defines

#define gmsg_function(p)   (((struct gnutella_header *) p)->function)
#define gmsg_hops(p)   (((struct gnutella_header *) p)->hops)

Functions

void gmsg_init (void)
 Initialization of the Gnutella message structures.

const gchar * gmsg_name (guint function)
 Convert message function number into name.

pmsg_tgmsg_to_pmsg (gconstpointer msg, guint32 size)
 Construct regular PDU descriptor from message.

pmsg_tgmsg_to_ctrl_pmsg (gconstpointer msg, guint32 size)
 Construct control PDU descriptor from message.

pmsg_tgmsg_to_ctrl_pmsg_extend (gconstpointer msg, guint32 size, pmsg_free_t free_cb, gpointer arg)
 Construct extended control PDU (with free routine) from message.

pmsg_tgmsg_split_to_pmsg (gconstpointer head, gconstpointer data, guint32 size)
 Construct PDU from header and data.

pmsg_tgmsg_split_to_pmsg_extend (gconstpointer head, gconstpointer data, guint32 size, pmsg_free_t free_cb, gpointer arg)
 Construct extended PDU (with free routine) from header and data.

void gmsg_mb_sendto_all (const GSList *sl, pmsg_t *mb)
 Broadcast message to all nodes in the list.

void gmsg_mb_sendto_one (struct gnutella_node *n, pmsg_t *mb)
 Send message to one node.

void gmsg_sendto_one (struct gnutella_node *n, gconstpointer msg, guint32 size)
 Send message to one node.

void gmsg_ctrl_sendto_one (struct gnutella_node *n, gconstpointer msg, guint32 size)
 Send control message to one node.

void gmsg_split_sendto_one (struct gnutella_node *n, gconstpointer head, gconstpointer data, guint32 size)
 Send message consisting of header and data to one node.

void gmsg_sendto_all (const GSList *l, gconstpointer msg, guint32 size)
 Broadcast message to all nodes in the list.

void gmsg_split_sendto_all (const GSList *l, gconstpointer head, gconstpointer data, guint32 size)
 Send message consisting of header and data to all the nodes in the list.

void gmsg_split_sendto_all_but_one (const GSList *sl, const struct gnutella_node *n, gconstpointer head, gconstpointer data, guint32 size)
 Send message consisting of header and data to all nodes in the list but one node.

void gmsg_sendto_route (struct gnutella_node *n, struct route_dest *rt)
 Send message held in current node according to route specification.

gboolean gmsg_can_drop (gconstpointer pdu, gint size)
 Test whether the Gnutella message can be safely dropped on the connection.

gboolean gmsg_is_oob_query (gconstpointer msg)
 Check whether query message starting at `msg' is flagged for OOB hit delivery.

gboolean gmsg_split_is_oob_query (gconstpointer head, gconstpointer data)
 Check whether query message split between header and data is flagged for OOB hit delivery.

gint gmsg_cmp (gconstpointer pdu1, gconstpointer pdu2)
 Perform a priority comparison between two messages, given as the whole PDU.

gchar * gmsg_infostr (gconstpointer head)
gchar * gmsg_infostr_full (gconstpointer message)
gchar * gmsg_infostr_full_split (gconstpointer head, gconstpointer data)
void gmsg_install_presend (pmsg_t *mb)
 Install "pre-send" callback for certain types of messages.

void gmsg_log_dropped (gconstpointer head, const gchar *reason,...) G_GNUC_PRINTF(2
void gmsg_log_bad (const struct gnutella_node *n, const gchar *reason,...) G_GNUC_PRINTF(2
void gmsg_sendto_route_ggep (struct gnutella_node *n, struct route_dest *rt, guint32 regular_size)
 Same as gmsg_sendto_route() but if the node did not claim support of GGEP extensions in pings, pongs and pushes, strip the GGEP payload before forwarding the message.

void gmsg_sendto_one_ggep (struct gnutella_node *n, gconstpointer msg, guint32 size, guint32 regular_size)
 Send message to one node, stripping the GGEP part if the node cannot grok GGEP extensions.

void gmsg_ctrl_sendto_one_ggep (struct gnutella_node *n, gconstpointer msg, guint32 size, guint32 regular_size)
 Send control message to one node.

void gmsg_sendto_all_ggep (const GSList *sl, gconstpointer msg, guint32 size, guint32 regular_size)
 Broadcast message to all nodes in the list, sending only a stripped down version without the trailing GGEP extension to nodes not advertising GGEP support.

void gmsg_search_sendto_one (struct gnutella_node *n, gnet_search_t sh, gconstpointer msg, guint32 size)
 Send our search message to one node.

void gmsg_search_sendto_all (const GSList *l, gnet_search_t sh, gconstpointer msg, guint32 size)
 Broadcast our search message to all nodes in the list.


Define Documentation

#define gmsg_function  )     (((struct gnutella_header *) p)->function)
 

#define gmsg_hops  )     (((struct gnutella_header *) p)->hops)
 


Function Documentation

gboolean gmsg_can_drop gconstpointer  pdu,
gint  size
 

Test whether the Gnutella message can be safely dropped on the connection.

We're given the whole PDU, not just the payload.

Dropping of messages only happens when the connection is flow-controlled, and there's not enough room in the queue.

gint gmsg_cmp gconstpointer  pdu1,
gconstpointer  pdu2
 

Perform a priority comparison between two messages, given as the whole PDU.

Returns:
algebraic -1/0/+1 depending on relative order.

void gmsg_ctrl_sendto_one struct gnutella_node n,
gconstpointer  msg,
guint32  size
 

Send control message to one node.

A control message is inserted ahead any other queued regular data.

void gmsg_ctrl_sendto_one_ggep struct gnutella_node n,
gconstpointer  msg,
guint32  size,
guint32  regular_size
 

Send control message to one node.

A control message is inserted ahead any other queued regular data.

gchar* gmsg_infostr gconstpointer  head  ) 
 

Returns:
formatted static string:
msg_type (payload length) [hops=x, TTL=x]

gchar* gmsg_infostr_full gconstpointer  message  ) 
 

Returns:
formatted static string:
msg_type (payload length) [hops=x, TTL=x]

that can also decompile vendor messages given a pointer on the whole message that contains the leading header immediately followed by the payload of that message.

gchar* gmsg_infostr_full_split gconstpointer  head,
gconstpointer  data
 

Returns:
formatted static string:
msg_type (payload length) [hops=x, TTL=x]

that can also decompile vendor messages given a pointer on the header and on the data of the message (which may not be consecutive in memory).

void gmsg_init void   ) 
 

Initialization of the Gnutella message structures.

void gmsg_install_presend pmsg_t mb  ) 
 

Install "pre-send" callback for certain types of messages.

gboolean gmsg_is_oob_query gconstpointer  msg  ) 
 

Check whether query message starting at `msg' is flagged for OOB hit delivery.

void gmsg_log_bad const struct gnutella_node n,
const gchar *  reason,
... 
 

void gmsg_log_dropped gconstpointer  head,
const gchar *  reason,
... 
 

void gmsg_mb_sendto_all const GSList *  sl,
pmsg_t mb
 

Broadcast message to all nodes in the list.

The supplied mb is cloned for each node to which it is sent. It is up to the caller to free that mb, if needed, upon return.

void gmsg_mb_sendto_one struct gnutella_node n,
pmsg_t mb
 

Send message to one node.

The supplied mb is NOT cloned, it is up to the caller to ensure that a private instance is supplied.

const gchar* gmsg_name guint  function  ) 
 

Convert message function number into name.

void gmsg_search_sendto_all const GSList *  l,
gnet_search_t  sh,
gconstpointer  msg,
guint32  size
 

Broadcast our search message to all nodes in the list.

void gmsg_search_sendto_one struct gnutella_node n,
gnet_search_t  sh,
gconstpointer  msg,
guint32  size
 

Send our search message to one node.

void gmsg_sendto_all const GSList *  l,
gconstpointer  msg,
guint32  size
 

Broadcast message to all nodes in the list.

void gmsg_sendto_all_ggep const GSList *  sl,
gconstpointer  msg,
guint32  size,
guint32  regular_size
 

Broadcast message to all nodes in the list, sending only a stripped down version without the trailing GGEP extension to nodes not advertising GGEP support.

void gmsg_sendto_one struct gnutella_node n,
gconstpointer  msg,
guint32  size
 

Send message to one node.

void gmsg_sendto_one_ggep struct gnutella_node n,
gconstpointer  msg,
guint32  size,
guint32  regular_size
 

Send message to one node, stripping the GGEP part if the node cannot grok GGEP extensions.

void gmsg_sendto_route struct gnutella_node n,
struct route_dest rt
 

Send message held in current node according to route specification.

void gmsg_sendto_route_ggep struct gnutella_node n,
struct route_dest rt,
guint32  regular_size
 

Same as gmsg_sendto_route() but if the node did not claim support of GGEP extensions in pings, pongs and pushes, strip the GGEP payload before forwarding the message.

Parameters:
n the source node.
rt the destination route.
regular_size the size of the message including the header and trailing GGEP data.

gboolean gmsg_split_is_oob_query gconstpointer  head,
gconstpointer  data
 

Check whether query message split between header and data is flagged for OOB hit delivery.

void gmsg_split_sendto_all const GSList *  l,
gconstpointer  head,
gconstpointer  data,
guint32  size
 

Send message consisting of header and data to all the nodes in the list.

void gmsg_split_sendto_all_but_one const GSList *  sl,
const struct gnutella_node n,
gconstpointer  head,
gconstpointer  data,
guint32  size
 

Send message consisting of header and data to all nodes in the list but one node.

We never broadcast anything to a leaf node. Those are handled specially.

void gmsg_split_sendto_one struct gnutella_node n,
gconstpointer  head,
gconstpointer  data,
guint32  size
 

Send message consisting of header and data to one node.

pmsg_t* gmsg_split_to_pmsg gconstpointer  head,
gconstpointer  data,
guint32  size
 

Construct PDU from header and data.

pmsg_t* gmsg_split_to_pmsg_extend gconstpointer  head,
gconstpointer  data,
guint32  size,
pmsg_free_t  free_cb,
gpointer  arg
 

Construct extended PDU (with free routine) from header and data.

pmsg_t* gmsg_to_ctrl_pmsg gconstpointer  msg,
guint32  size
 

Construct control PDU descriptor from message.

pmsg_t* gmsg_to_ctrl_pmsg_extend gconstpointer  msg,
guint32  size,
pmsg_free_t  free_cb,
gpointer  arg
 

Construct extended control PDU (with free routine) from message.

pmsg_t* gmsg_to_pmsg gconstpointer  msg,
guint32  size
 

Construct regular PDU descriptor from message.

Message data is copied into the new data buffer, so caller may release its memory.


Generated on Sun Feb 12 10:50:01 2006 for Gtk-Gnutella by doxygen 1.3.6