| gnunet_ats_service.h | | gnunet_ats_service.h | |
| /* | | /* | |
|
| This file is part of GNUnet. | | This file is part of GNUnet. | |
| (C) 2010,2011 Christian Grothoff (and other contributing authors) | | (C) 2010,2011 Christian Grothoff (and other contributing authors) | |
| | | | |
|
| GNUnet is free software; you can redistribute it and/or modify | | GNUnet is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published | | it under the terms of the GNU General Public License as published | |
| by the Free Software Foundation; either version 3, or (at your | | by the Free Software Foundation; either version 3, or (at your | |
| option) any later version. | | option) any later version. | |
| | | | |
| GNUnet is distributed in the hope that it will be useful, but | | GNUnet is distributed in the hope that it will be useful, but | |
| WITHOUT ANY WARRANTY; without even the implied warranty of | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| General Public License for more details. | | General Public License for more details. | |
| | | | |
| You should have received a copy of the GNU General Public License | | You should have received a copy of the GNU General Public License | |
| along with GNUnet; see the file COPYING. If not, write to the | | along with GNUnet; see the file COPYING. If not, write to the | |
| Free Software Foundation, Inc., 59 Temple Place - Suite 330, | | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| Boston, MA 02111-1307, USA. | | Boston, MA 02111-1307, USA. | |
| */ | | */ | |
| /** | | /** | |
| * @file include/gnunet_ats_service.h | | * @file include/gnunet_ats_service.h | |
| * @brief automatic transport selection and outbound bandwidth determinatio
n | | * @brief automatic transport selection and outbound bandwidth determinatio
n | |
| * @author Christian Grothoff | | * @author Christian Grothoff | |
| * @author Matthias Wachs | | * @author Matthias Wachs | |
| */ | | */ | |
| #ifndef GNUNET_ATS_SERVICE_H | | #ifndef GNUNET_ATS_SERVICE_H | |
| #define GNUNET_ATS_SERVICE_H | | #define GNUNET_ATS_SERVICE_H | |
| | | | |
| #include "gnunet_constants.h" | | #include "gnunet_constants.h" | |
| #include "gnunet_util_lib.h" | | #include "gnunet_util_lib.h" | |
| #include "gnunet_hello_lib.h" | | #include "gnunet_hello_lib.h" | |
| | | | |
| /** | | /** | |
| * Number of network types supported by ATS | | * Number of network types supported by ATS | |
| */ | | */ | |
|
| #define GNUNET_ATS_NetworkTypeCount 5 | | #define GNUNET_ATS_NetworkTypeCount 6 | |
| | | | |
| /** | | /** | |
| * ATS network types as array initializer | | * ATS network types as array initializer | |
| */ | | */ | |
|
| #define GNUNET_ATS_NetworkType {GNUNET_ATS_NET_UNSPECIFIED, GNUNET_ATS_NET_
LOOPBACK, GNUNET_ATS_NET_LAN, GNUNET_ATS_NET_WAN, GNUNET_ATS_NET_WLAN} | | #define GNUNET_ATS_NetworkType {GNUNET_ATS_NET_UNSPECIFIED, GNUNET_ATS_NET_
LOOPBACK, GNUNET_ATS_NET_LAN, GNUNET_ATS_NET_WAN, GNUNET_ATS_NET_WLAN, GNUN
ET_ATS_NET_BT} | |
| | | | |
| /** | | /** | |
| * ATS network types as string array initializer | | * ATS network types as string array initializer | |
| */ | | */ | |
|
| #define GNUNET_ATS_NetworkTypeString {"UNSPECIFIED", "LOOPBACK", "LAN", "WA
N", "WLAN"} | | #define GNUNET_ATS_NetworkTypeString {"UNSPECIFIED", "LOOPBACK", "LAN", "WA
N", "WLAN", "BLUETOOTH"} | |
| | | | |
| enum GNUNET_ATS_Network_Type | | enum GNUNET_ATS_Network_Type | |
| { | | { | |
| GNUNET_ATS_NET_UNSPECIFIED = 0, | | GNUNET_ATS_NET_UNSPECIFIED = 0, | |
| GNUNET_ATS_NET_LOOPBACK = 1, | | GNUNET_ATS_NET_LOOPBACK = 1, | |
| GNUNET_ATS_NET_LAN = 2, | | GNUNET_ATS_NET_LAN = 2, | |
| GNUNET_ATS_NET_WAN = 3, | | GNUNET_ATS_NET_WAN = 3, | |
| GNUNET_ATS_NET_WLAN = 4, | | GNUNET_ATS_NET_WLAN = 4, | |
|
| | | GNUNET_ATS_NET_BT = 5 | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Default bandwidth assigned to a network : 64 KB/s | | * Default bandwidth assigned to a network : 64 KB/s | |
| */ | | */ | |
| #define GNUNET_ATS_DefaultBandwidth 65536 | | #define GNUNET_ATS_DefaultBandwidth 65536 | |
| | | | |
| /** | | /** | |
|
| | | * Undefined value for a GNUNET_ATS_Property | |
| | | */ | |
| | | #define GNUNET_ATS_VALUE_UNDEFINED UINT32_MAX | |
| | | | |
| | | /** | |
| | | * String representation for GNUNET_ATS_VALUE_UNDEFINED | |
| | | */ | |
| | | #define GNUNET_ATS_VALUE_UNDEFINED_STR "undefined" | |
| | | | |
| | | /** | |
| * Maximum bandwidth assigned to a network : 4095 MB/s | | * Maximum bandwidth assigned to a network : 4095 MB/s | |
| */ | | */ | |
| #define GNUNET_ATS_MaxBandwidth UINT32_MAX | | #define GNUNET_ATS_MaxBandwidth UINT32_MAX | |
| | | | |
| /** | | /** | |
|
| | | * Textual equivalent for GNUNET_ATS_MaxBandwidth | |
| | | */ | |
| | | #define GNUNET_ATS_MaxBandwidthString "unlimited" | |
| | | | |
| | | /** | |
| * Number of property types supported by ATS | | * Number of property types supported by ATS | |
| */ | | */ | |
|
| #define GNUNET_ATS_PropertyCount 9 | | #define GNUNET_ATS_PropertyCount 11 | |
| | | | |
| /** | | /** | |
| * ATS properties types as string array initializer | | * ATS properties types as string array initializer | |
| */ | | */ | |
|
| #define GNUNET_ATS_PropertyStrings {"Terminator", "Utilization up", "Utiliz
ation down", "Network type", "Delay", "Distance", "Cost WAN", "Cost LAN", "
Cost WLAN"} | | #define GNUNET_ATS_PropertyStrings {"TERMINATOR", "UTILIZATION_UP", "UTILIZ
ATION_DOWN", "UTILIZATION_PAYLOAD_UP", "UTILIZATION_PAYLOAD_DOWN", "NETWORK
_TYPE", "DELAY", "DISTANCE", "COST_WAN", "COST_LAN", "COST_WLAN"} | |
| | | | |
| /** | | /** | |
| * Enum defining all known property types for ATS Enum values are used | | * Enum defining all known property types for ATS Enum values are used | |
| * in the GNUNET_ATS_Information struct as | | * in the GNUNET_ATS_Information struct as | |
| * (key,value)-pairs. | | * (key,value)-pairs. | |
| * | | * | |
| * Cost are always stored in uint32_t, so all units used to define costs | | * Cost are always stored in uint32_t, so all units used to define costs | |
|
| * have to be normalized to fit in uint32_t [0 .. 4.294.967.295] | | * have to be normalized to fit in uint32_t [0 .. UINT32_MAX-1] | |
| | | * | |
| | | * UINT32_MAX is reserved for uninitialized values GNUNET_ATS_VALUE_UNDEFIN | |
| | | ED | |
| */ | | */ | |
| enum GNUNET_ATS_Property | | enum GNUNET_ATS_Property | |
| { | | { | |
| | | | |
| /** | | /** | |
| * End of the array. | | * End of the array. | |
| * @deprecated | | * @deprecated | |
| */ | | */ | |
| GNUNET_ATS_ARRAY_TERMINATOR = 0, | | GNUNET_ATS_ARRAY_TERMINATOR = 0, | |
| | | | |
| /** | | /** | |
|
| | | * Actual traffic on this connection from this peer to the other peer. | |
| | | * Includes transport overhead | |
| | | * | |
| | | * Unit: [bytes/second] | |
| | | */ | |
| | | GNUNET_ATS_UTILIZATION_OUT, | |
| | | | |
| | | /** | |
| * Actual traffic on this connection from the other peer to this peer. | | * Actual traffic on this connection from the other peer to this peer. | |
|
| | | * Includes transport overhead | |
| * | | * | |
| * Unit: [bytes/second] | | * Unit: [bytes/second] | |
| */ | | */ | |
|
| GNUNET_ATS_UTILIZATION_UP, | | GNUNET_ATS_UTILIZATION_IN, | |
| | | | |
| /** | | /** | |
| * Actual traffic on this connection from this peer to the other peer. | | * Actual traffic on this connection from this peer to the other peer. | |
|
| | | * Only payload from layers > transport | |
| | | * | |
| | | * Unit: [bytes/second] | |
| | | */ | |
| | | GNUNET_ATS_UTILIZATION_PAYLOAD_OUT, | |
| | | | |
| | | /** | |
| | | * Actual traffic on this connection from the other peer to this peer. | |
| | | * Only payload from layers > transport | |
| * | | * | |
| * Unit: [bytes/second] | | * Unit: [bytes/second] | |
| */ | | */ | |
|
| GNUNET_ATS_UTILIZATION_DOWN, | | GNUNET_ATS_UTILIZATION_PAYLOAD_IN, | |
| | | | |
| /** | | /** | |
| * Is this address located in WAN, LAN or a loopback address | | * Is this address located in WAN, LAN or a loopback address | |
| * Value is element of GNUNET_ATS_Network_Type | | * Value is element of GNUNET_ATS_Network_Type | |
| */ | | */ | |
| GNUNET_ATS_NETWORK_TYPE, | | GNUNET_ATS_NETWORK_TYPE, | |
| | | | |
| /** | | /** | |
| * Delay | | * Delay | |
| * Time between when the time packet is sent and the packet arrives | | * Time between when the time packet is sent and the packet arrives | |
| * | | * | |
|
| * Unit: [ms] | | * Unit: [microseconds] | |
| * | | * | |
| * Examples: | | * Examples: | |
| * | | * | |
| * LAN : 1 | | * LAN : 1 | |
| * WLAN : 2 | | * WLAN : 2 | |
| * Dialup: 500 | | * Dialup: 500 | |
| */ | | */ | |
| GNUNET_ATS_QUALITY_NET_DELAY, | | GNUNET_ATS_QUALITY_NET_DELAY, | |
| | | | |
| /** | | /** | |
| | | | |
| skipping to change at line 197 | | skipping to change at line 233 | |
| * Interpretation: less is better | | * Interpretation: less is better | |
| * | | * | |
| * Examples: | | * Examples: | |
| * | | * | |
| * TCP/IPv4 over Ethernet: 1024 + 38 + 20 + 20 = 1102 [bytes/kb] | | * TCP/IPv4 over Ethernet: 1024 + 38 + 20 + 20 = 1102 [bytes/kb] | |
| * TCP/IPv6 over Ethernet: 1024 + 38 + 20 + 40 = 1122 [bytes/kb] | | * TCP/IPv6 over Ethernet: 1024 + 38 + 20 + 40 = 1122 [bytes/kb] | |
| * UDP/IPv4 over Ethernet: 1024 + 38 + 20 + 8 = 1090 [bytes/kb] | | * UDP/IPv4 over Ethernet: 1024 + 38 + 20 + 8 = 1090 [bytes/kb] | |
| * UDP/IPv6 over Ethernet: 1024 + 38 + 40 + 8 = 1110 [bytes/kb] | | * UDP/IPv6 over Ethernet: 1024 + 38 + 40 + 8 = 1110 [bytes/kb] | |
| */ | | */ | |
| GNUNET_ATS_COST_WLAN | | GNUNET_ATS_COST_WLAN | |
|
| /* Cost related values */ | | /* Cost related values */ | |
| /* =================== */ | | /* =================== */ | |
| /** | | /** | |
| * Volume based cost in financial units to transmit data | | * Volume based cost in financial units to transmit data | |
| * | | * | |
| * Note: This value is not bound to a specific currency or unit and only | | * Note: This value is not bound to a specific currency or unit and only | |
| * used locally. | | * used locally. | |
| * "cent" just refers the smallest amount of money in the respective | | * "cent" just refers the smallest amount of money in the respective | |
| * currency. | | * currency. | |
| * | | * | |
| * Unit: [cent/MB] | | * Unit: [cent/MB] | |
| * | | * | |
| * Interpretation: less is better | | * Interpretation: less is better | |
| * | | * | |
| * Examples: | | * Examples: | |
| * LAN: 0 [cent/MB] | | * LAN: 0 [cent/MB] | |
| * 2G : 10 [cent/MB] | | * 2G : 10 [cent/MB] | |
| */ | | */ | |
| // GNUNET_ATS_COST_FINANCIAL_PER_VOLUME = 1, | | // GNUNET_ATS_COST_FINANCIAL_PER_VOLUME = 1, | |
| /** | | /** | |
| * Time based cost in financial units to transmit data | | * Time based cost in financial units to transmit data | |
| * | | * | |
| * Note: This value is not bound to a specific currency or unit and only | | * Note: This value is not bound to a specific currency or unit and only | |
| * used locally. | | * used locally. | |
| * "cent" just refers the smallest amount of money in the respective | | * "cent" just refers the smallest amount of money in the respective | |
| * currency. | | * currency. | |
| * | | * | |
| * Unit: [cent/h] | | * Unit: [cent/h] | |
| * | | * | |
| * Interpretation: less is better | | * Interpretation: less is better | |
| * | | * | |
| * Examples: | | * Examples: | |
| * LAN : 0 [cent/h] | | * LAN : 0 [cent/h] | |
| * Dialup: 10 [cent/h] | | * Dialup: 10 [cent/h] | |
| */ | | */ | |
| // GNUNET_ATS_COST_FINANCIAL_PER_TIME = 2, | | // GNUNET_ATS_COST_FINANCIAL_PER_TIME = 2, | |
| /** | | /** | |
| * Computational costs | | * Computational costs | |
| * | | * | |
| * Effort of preparing data to be sent with this transport | | * Effort of preparing data to be sent with this transport | |
| * Includes encoding, encryption and conversion of data | | * Includes encoding, encryption and conversion of data | |
| * Partial values can be summed up: c_sum = c_enc + c_enc + c_conv | | * Partial values can be summed up: c_sum = c_enc + c_enc + c_conv | |
| * Resulting values depend on local system properties, e.g. CPU | | * Resulting values depend on local system properties, e.g. CPU | |
| * | | * | |
| * Unit: [ms/GB] | | * Unit: [ms/GB] | |
| * | | * | |
| * Interpretation: less is better | | * Interpretation: less is better | |
| * | | * | |
| * Examples: | | * Examples: | |
| * | | * | |
| * HTTPS with AES CBC-256: 7,382 | | * HTTPS with AES CBC-256: 7,382 | |
| * HTTPS with AES CBC-128: 5,279 | | * HTTPS with AES CBC-128: 5,279 | |
| * HTTPS with RC4-1024: 2,652 | | * HTTPS with RC4-1024: 2,652 | |
| */ | | */ | |
| // GNUNET_ATS_COST_COMPUTATIONAL = 3, | | // GNUNET_ATS_COST_COMPUTATIONAL = 3, | |
| /** | | /** | |
| * Energy consumption | | * Energy consumption | |
| * | | * | |
| * Energy consumption using this transport when sending with a certain | | * Energy consumption using this transport when sending with a certain | |
| * power at a certain bitrate. This is only an approximation based on: | | * power at a certain bitrate. This is only an approximation based on: | |
| * Energy consumption E = P / D | | * Energy consumption E = P / D | |
| * | | * | |
| * with: | | * with: | |
| * Power P in Watt (J/s) | | * Power P in Watt (J/s) | |
| * Datarate D in MBit/s | | * Datarate D in MBit/s | |
| * | | * | |
| * Conversion between power P and dBm used by WLAN in radiotap's dBm TX p | | * Conversion between power P and dBm used by WLAN in radiotap's dBm TX pow | |
| ower: | | er: | |
| * | | * | |
| * Lp(dbm) = 10 log10 (P/ 1mW) | | * Lp(dbm) = 10 log10 (P/ 1mW) | |
| * | | * | |
| * => P = 1 mW * 10^(Lp(dbm)/10) | | * => P = 1 mW * 10^(Lp(dbm)/10) | |
| * | | * | |
| * Unit: [mJ/MB] | | * Unit: [mJ/MB] | |
| * | | * | |
| * Interpretation: less is better | | * Interpretation: less is better | |
| * | | * | |
| * Examples: | | * Examples: | |
| * | | * | |
| * LAN: 0 | | * LAN: 0 | |
| * WLAN: 89 (600 mW @ 802.11g /w 54 MBit/s) | | * WLAN: 89 (600 mW @ 802.11g /w 54 MBit/s) | |
| * Bluetooth: 267 (100 mW @ BT2.0 EDR /w 3 MBit/s) | | * Bluetooth: 267 (100 mW @ BT2.0 EDR /w 3 MBit/s) | |
| */ | | */ | |
| // GNUNET_ATS_COST_ENERGY_CONSUMPTION = 4, | | // GNUNET_ATS_COST_ENERGY_CONSUMPTION = 4, | |
| /** | | /** | |
| * Connect cost | | * Connect cost | |
| * How many bytes are transmitted to initiate a new connection using | | * How many bytes are transmitted to initiate a new connection using | |
| * this transport? | | * this transport? | |
| * | | * | |
| * Unit: [bytes] | | * Unit: [bytes] | |
| * | | * | |
| * Interpretation: less is better | | * Interpretation: less is better | |
| * | | * | |
| * Examples: | | * Examples: | |
| * | | * | |
| * UDP (No connection) : | | * UDP (No connection) : | |
| * 0 bytes | | * 0 bytes | |
| * TCP (TCP 3-Way handshake): | | * TCP (TCP 3-Way handshake): | |
| * 220 bytes Ethernet, 172 bytes TCP/IP, 122 bytes TCP | | * 220 bytes Ethernet, 172 bytes TCP/IP, 122 bytes TCP | |
| * HTTP (TCP + Header) : | | * HTTP (TCP + Header) : | |
| * 477 bytes Ethernet, 429 bytes TCP/IP, 374 bytes TCP, 278 bytes HT | | * 477 bytes Ethernet, 429 bytes TCP/IP, 374 bytes TCP, 278 bytes HTTP | |
| TP | | * HTTPS HTTP+TLS Handshake: | |
| * HTTPS HTTP+TLS Handshake: | | * 2129 bytes Ethernet, 1975 bytes TCP/IP, 1755 bytes TCP, 1403 bytes HTTP | |
| * 2129 bytes Ethernet, 1975 bytes TCP/IP, 1755 bytes TCP, 1403 bytes HT | | S | |
| TPS | | * | |
| * | | * */ | |
| * */ | | // GNUNET_ATS_COST_CONNECT = 5, | |
| // GNUNET_ATS_COST_CONNECT = 5, | | /** | |
| /** | | * Bandwidth cost | |
| * Bandwidth cost | | * | |
| * | | * How many bandwidth is available to consume? | |
| * How many bandwidth is available to consume? | | * Used to calculate which impact sending data with this transport has | |
| * Used to calculate which impact sending data with this transport has | | * | |
| * | | * Unit: [kB/s] | |
| * Unit: [kB/s] | | * | |
| * | | * Interpretation: more is better | |
| * Interpretation: more is better | | * | |
| * | | * Examples: | |
| * Examples: | | * LAN: 12,800 (100 MBit/s) | |
| * LAN: 12,800 (100 MBit/s) | | * WLAN: 6,912 (54 MBit/s) | |
| * WLAN: 6,912 (54 MBit/s) | | * Dial-up: 8 (64 Kbit/s) | |
| * Dial-up: 8 (64 Kbit/s) | | * | |
| * | | */ | |
| */ | | // GNUNET_ATS_COST_BANDWITH_AVAILABLE = 6, | |
| // GNUNET_ATS_COST_BANDWITH_AVAILABLE = 6, | | /** | |
| /** | | * Network overhead | |
| * Network overhead | | * | |
| * | | * How many bytes are sent over the wire when 1 kilobyte (1024 bytes) | |
| * How many bytes are sent over the wire when 1 kilobyte (1024 bytes) | | * of application data is transmitted? | |
| * of application data is transmitted? | | * A factor used with connect cost, bandwidth cost and energy cost | |
| * A factor used with connect cost, bandwidth cost and energy cost | | * to describe the overhead produced by the transport protocol | |
| * to describe the overhead produced by the transport protocol | | * | |
| * | | * Unit: [bytes/kb] | |
| * Unit: [bytes/kb] | | * | |
| * | | * Interpretation: less is better | |
| * Interpretation: less is better | | * | |
| * | | * Examples: | |
| * Examples: | | * | |
| * | | * TCP/IPv4 over Ethernet: 1024 + 38 + 20 + 20 = 1102 [bytes/kb] | |
| * TCP/IPv4 over Ethernet: 1024 + 38 + 20 + 20 = 1102 [bytes/kb] | | * TCP/IPv6 over Ethernet: 1024 + 38 + 20 + 40 = 1122 [bytes/kb] | |
| * TCP/IPv6 over Ethernet: 1024 + 38 + 20 + 40 = 1122 [bytes/kb] | | * UDP/IPv4 over Ethernet: 1024 + 38 + 20 + 8 = 1090 [bytes/kb] | |
| * UDP/IPv4 over Ethernet: 1024 + 38 + 20 + 8 = 1090 [bytes/kb] | | * UDP/IPv6 over Ethernet: 1024 + 38 + 40 + 8 = 1110 [bytes/kb] | |
| * UDP/IPv6 over Ethernet: 1024 + 38 + 40 + 8 = 1110 [bytes/kb] | | */ | |
| */ | | // GNUNET_ATS_COST_NETWORK_OVERHEAD = 7, | |
| // GNUNET_ATS_COST_NETWORK_OVERHEAD = 7, | | /* Quality related values */ | |
| /* Quality related values */ | | /* ====================== */ | |
| /* ====================== */ | | /* Physical layer quality properties */ | |
| /* Physical layer quality properties */ | | /** | |
| /** | | * Signal strength on physical layer | |
| * Signal strength on physical layer | | * | |
| * | | * Unit: [dBm] | |
| * Unit: [dBm] | | */ | |
| */ | | // GNUNET_ATS_QUALITY_PHY_SIGNAL_STRENGTH = 1025, | |
| // GNUNET_ATS_QUALITY_PHY_SIGNAL_STRENGTH = 1025, | | /** | |
| /** | | * Collision rate on physical layer | |
| * Collision rate on physical layer | | * | |
| * | | * Unit: [B/s] | |
| * Unit: [B/s] | | */ | |
| */ | | // GNUNET_ATS_QUALITY_PHY_COLLISION_RATE = 1026, | |
| // GNUNET_ATS_QUALITY_PHY_COLLISION_RATE = 1026, | | /** | |
| /** | | * Error rate on physical layer | |
| * Error rate on physical layer | | * | |
| * | | * Unit: [B/s] | |
| * Unit: [B/s] | | */ | |
| */ | | // GNUNET_ATS_QUALITY_PHY_ERROR_RATE = 1027, | |
| // GNUNET_ATS_QUALITY_PHY_ERROR_RATE = 1027, | | /** | |
| /** | | * Jitter | |
| * Jitter | | * Time variations of the delay | |
| * Time variations of the delay | | * 1st derivative of a delay function | |
| * 1st derivative of a delay function | | * | |
| * | | * Unit: [ms] | |
| * Unit: [ms] | | */ | |
| */ | | // GNUNET_ATS_QUALITY_NET_JITTER = 1029, | |
| // GNUNET_ATS_QUALITY_NET_JITTER = 1029, | | /** | |
| /** | | * Error rate on network layer | |
| * Error rate on network layer | | * | |
| * | | * Unit: [B/s] | |
| * Unit: [B/s] | | * | |
| * | | * Examples: | |
| * Examples: | | * | |
| * | | * LAN : 0 | |
| * LAN : 0 | | * WLAN : 400 | |
| * WLAN : 400 | | * Bluetooth : 100 | |
| * Bluetooth : 100 | | * Note: This numbers are just assumptions as an example, not | |
| * Note: This numbers are just assumptions as an example, not | | * measured or somehow determined | |
| * measured or somehow determined | | */ | |
| */ | | // GNUNET_ATS_QUALITY_NET_ERRORRATE = 1030, | |
| // GNUNET_ATS_QUALITY_NET_ERRORRATE = 1030, | | /** | |
| /** | | * Drop rate on network layer | |
| * Drop rate on network layer | | * Bytes actively dismissed by a network component during transmission | |
| * Bytes actively dismissed by a network component during transmission | | * Reasons for dropped data can be full queues, congestion, quota violation | |
| * Reasons for dropped data can be full queues, congestion, quota violati | | s... | |
| ons... | | * | |
| * | | * Unit: [B/s] | |
| * Unit: [B/s] | | * | |
| * | | * Examples: | |
| * Examples: | | * | |
| * | | * LAN : 0 | |
| * LAN : 0 | | * WLAN : 400 | |
| * WLAN : 400 | | * Bluetooth : 100 | |
| * Bluetooth : 100 | | * Note: This numbers are just assumptions as an example, not | |
| * Note: This numbers are just assumptions as an example, not | | * measured or somehow determined | |
| * measured or somehow determined | | */ | |
| */ | | // GNUNET_ATS_QUALITY_NET_DROPRATE = 1031, | |
| // GNUNET_ATS_QUALITY_NET_DROPRATE = 1031, | | /** | |
| /** | | * Loss rate on network layer | |
| * Loss rate on network layer | | * Bytes lost during transmission | |
| * Bytes lost during transmission | | * Reasons can be collisions, ... | |
| * Reasons can be collisions, ... | | * | |
| * | | * Unit: [B/s] | |
| * Unit: [B/s] | | * | |
| * | | * Examples: | |
| * Examples: | | * | |
| * | | * LAN : 0 | |
| * LAN : 0 | | * WLAN : 40 | |
| * WLAN : 40 | | * Bluetooth : 10 | |
| * Bluetooth : 10 | | * Note: This numbers are just assumptions as an example, not measured | |
| * Note: This numbers are just assumptions as an example, not measured | | * or somehow determined | |
| * or somehow determined | | */ | |
| */ | | // GNUNET_ATS_QUALITY_NET_LOSSRATE = 1032, | |
| // GNUNET_ATS_QUALITY_NET_LOSSRATE = 1032, | | /** | |
| /** | | * Throughput on network layer | |
| * Throughput on network layer | | * | |
| * | | * Unit: [kB/s] | |
| * Unit: [kB/s] | | * | |
| * | | * Examples: | |
| * Examples: | | * | |
| * | | * LAN : 3400 | |
| * LAN : 3400 | | * WLAN : 1200 | |
| * WLAN : 1200 | | * Dialup: 4 | |
| * Dialup: 4 | | * | |
| * | | */ | |
| */ | | // GNUNET_ATS_QUALITY_NET_THROUGHPUT = 1033, | |
| // GNUNET_ATS_QUALITY_NET_THROUGHPUT = 1033, | | /* Availability related values */ | |
| /* Availability related values */ | | /* =========================== */ | |
| /* =========================== */ | | /** | |
| /** | | * Is a peer reachable? | |
| * Is a peer reachable? | | */ | |
| */ | | // GNUNET_ATS_AVAILABILITY_REACHABLE = 2048, | |
| // GNUNET_ATS_AVAILABILITY_REACHABLE = 2048, | | /** | |
| /** | | * Is there a connection established to a peer using this transport | |
| * Is there a connection established to a peer using this transport | | */ | |
| */ | | // GNUNET_ATS_AVAILABILITY_CONNECTED = 2049 | |
| // GNUNET_ATS_AVAILABILITY_CONNECTED = 2049 | | | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Number of ATS quality properties | | * Number of ATS quality properties | |
| */ | | */ | |
| #define GNUNET_ATS_QualityPropertiesCount 2 | | #define GNUNET_ATS_QualityPropertiesCount 2 | |
| | | | |
| /** | | /** | |
| * ATS quality properties as array initializer | | * ATS quality properties as array initializer | |
| */ | | */ | |
| | | | |
| skipping to change at line 496 | | skipping to change at line 532 | |
| GNUNET_NETWORK_STRUCT_END | | GNUNET_NETWORK_STRUCT_END | |
| | | | |
| /* ******************************** Scheduling API ************************
***** */ | | /* ******************************** Scheduling API ************************
***** */ | |
| | | | |
| /** | | /** | |
| * Handle to the ATS subsystem for bandwidth/transport scheduling informati
on. | | * Handle to the ATS subsystem for bandwidth/transport scheduling informati
on. | |
| */ | | */ | |
| struct GNUNET_ATS_SchedulingHandle; | | struct GNUNET_ATS_SchedulingHandle; | |
| | | | |
| /** | | /** | |
|
| | | * Handle for address suggestion requests | |
| | | */ | |
| | | struct GNUNET_ATS_SuggestHandle; | |
| | | | |
| | | /** | |
| * Opaque session handle, defined by plugins. Contents not known to ATS. | | * Opaque session handle, defined by plugins. Contents not known to ATS. | |
| */ | | */ | |
| struct Session; | | struct Session; | |
| | | | |
| /** | | /** | |
| * Signature of a function called by ATS with the current bandwidth | | * Signature of a function called by ATS with the current bandwidth | |
| * and address preferences as determined by ATS. | | * and address preferences as determined by ATS. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param address suggested address (including peer identity of the peer) | | * @param address suggested address (including peer identity of the peer) | |
| * @param session session to use | | * @param session session to use | |
| * @param bandwidth_out assigned outbound bandwidth for the connection | | * @param bandwidth_out assigned outbound bandwidth for the connection | |
| * @param bandwidth_in assigned inbound bandwidth for the connection | | * @param bandwidth_in assigned inbound bandwidth for the connection | |
| * @param ats performance data for the address (as far as known) | | * @param ats performance data for the address (as far as known) | |
|
| * @param ats_count number of performance records in 'ats' | | * @param ats_count number of performance records in @a ats | |
| */ | | */ | |
|
| typedef void (*GNUNET_ATS_AddressSuggestionCallback) (void *cls, | | typedef void | |
| const struct | | (*GNUNET_ATS_AddressSuggestionCallback) (void *cls, | |
| GNUNET_HELLO_Address | | const struct GNUNET_HELLO_Address *address, struct Session *session, | |
| * | | struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out, | |
| address, | | struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in, | |
| struct Session * sess | | const struct GNUNET_ATS_Information *ats, uint32_t ats_count); | |
| ion, | | | |
| struct | | | |
| GNUNET_BANDWIDTH_Valu | | | |
| e32NBO | | | |
| bandwidth_out, | | | |
| struct | | | |
| GNUNET_BANDWIDTH_Valu | | | |
| e32NBO | | | |
| bandwidth_in, | | | |
| const struct | | | |
| GNUNET_ATS_Informatio | | | |
| n * | | | |
| ats, uint32_t ats_cou | | | |
| nt); | | | |
| | | | |
| /** | | /** | |
| * Initialize the ATS subsystem. | | * Initialize the ATS subsystem. | |
| * | | * | |
| * @param cfg configuration to use | | * @param cfg configuration to use | |
| * @param suggest_cb notification to call whenever the suggestation changed | | * @param suggest_cb notification to call whenever the suggestation changed | |
| * @param suggest_cb_cls closure for 'suggest_cb' | | * @param suggest_cb_cls closure for 'suggest_cb' | |
| * @return ats context | | * @return ats context | |
| */ | | */ | |
| struct GNUNET_ATS_SchedulingHandle * | | struct GNUNET_ATS_SchedulingHandle * | |
| GNUNET_ATS_scheduling_init (const struct GNUNET_CONFIGURATION_Handle *cfg, | | GNUNET_ATS_scheduling_init (const struct GNUNET_CONFIGURATION_Handle *cfg, | |
|
| GNUNET_ATS_AddressSuggestionCallback suggest_cb | | GNUNET_ATS_AddressSuggestionCallback suggest_cb, void *suggest_cb_cls); | |
| , | | | |
| void *suggest_cb_cls); | | | |
| | | | |
| /** | | /** | |
| * Client is done with ATS scheduling, release resources. | | * Client is done with ATS scheduling, release resources. | |
| * | | * | |
| * @param sh handle to release | | * @param sh handle to release | |
| */ | | */ | |
| void | | void | |
| GNUNET_ATS_scheduling_done (struct GNUNET_ATS_SchedulingHandle *sh); | | GNUNET_ATS_scheduling_done (struct GNUNET_ATS_SchedulingHandle *sh); | |
| | | | |
| /** | | /** | |
| | | | |
| skipping to change at line 565 | | skipping to change at line 597 | |
| void | | void | |
| GNUNET_ATS_reset_backoff (struct GNUNET_ATS_SchedulingHandle *sh, | | GNUNET_ATS_reset_backoff (struct GNUNET_ATS_SchedulingHandle *sh, | |
| const struct GNUNET_PeerIdentity *peer); | | const struct GNUNET_PeerIdentity *peer); | |
| | | | |
| /** | | /** | |
| * We would like to establish a new connection with a peer. ATS | | * We would like to establish a new connection with a peer. ATS | |
| * should suggest a good address to begin with. | | * should suggest a good address to begin with. | |
| * | | * | |
| * @param sh handle | | * @param sh handle | |
| * @param peer identity of the peer we need an address for | | * @param peer identity of the peer we need an address for | |
|
| | | * @return suggestion handle | |
| */ | | */ | |
|
| void | | struct GNUNET_ATS_SuggestHandle * | |
| GNUNET_ATS_suggest_address (struct GNUNET_ATS_SchedulingHandle *sh, | | GNUNET_ATS_suggest_address (struct GNUNET_ATS_SchedulingHandle *sh, | |
| const struct GNUNET_PeerIdentity *peer); | | const struct GNUNET_PeerIdentity *peer); | |
| | | | |
| /** | | /** | |
| * We want to cancel ATS suggesting addresses for a peer. | | * We want to cancel ATS suggesting addresses for a peer. | |
| * | | * | |
| * @param sh handle | | * @param sh handle | |
| * @param peer identity of the peer | | * @param peer identity of the peer | |
| */ | | */ | |
| void | | void | |
| GNUNET_ATS_suggest_address_cancel (struct GNUNET_ATS_SchedulingHandle *sh, | | GNUNET_ATS_suggest_address_cancel (struct GNUNET_ATS_SchedulingHandle *sh, | |
| const struct GNUNET_PeerIdentity *peer); | | const struct GNUNET_PeerIdentity *peer); | |
| | | | |
| /** | | /** | |
|
| | | * Convert a ATS property to a string | |
| | | * | |
| | | * @param type the atsi type | |
| | | * @return a string or NULL if invalid | |
| | | */ | |
| | | const char * | |
| | | GNUNET_ATS_print_property_type (uint32_t type); | |
| | | | |
| | | /** | |
| * Convert a GNUNET_ATS_NetworkType to a string | | * Convert a GNUNET_ATS_NetworkType to a string | |
| * | | * | |
| * @param net the network type | | * @param net the network type | |
| * @return a string or NULL if invalid | | * @return a string or NULL if invalid | |
| */ | | */ | |
| const char * | | const char * | |
| GNUNET_ATS_print_network_type (uint32_t net); | | GNUNET_ATS_print_network_type (uint32_t net); | |
| | | | |
| /** | | /** | |
| * Returns where the address is located: LAN or WAN or ... | | * Returns where the address is located: LAN or WAN or ... | |
| | | | |
| skipping to change at line 602 | | skipping to change at line 644 | |
| * @param addr address | | * @param addr address | |
| * @param addrlen address length | | * @param addrlen address length | |
| * @return location as GNUNET_ATS_Information | | * @return location as GNUNET_ATS_Information | |
| */ | | */ | |
| struct GNUNET_ATS_Information | | struct GNUNET_ATS_Information | |
| GNUNET_ATS_address_get_type (struct GNUNET_ATS_SchedulingHandle *sh, | | GNUNET_ATS_address_get_type (struct GNUNET_ATS_SchedulingHandle *sh, | |
| const struct sockaddr * addr, | | const struct sockaddr * addr, | |
| socklen_t addrlen); | | socklen_t addrlen); | |
| | | | |
| /** | | /** | |
|
| | | * Test if a address and a session is known to ATS | |
| | | * | |
| | | * @param sh the scheduling handle | |
| | | * @param address the address | |
| | | * @param session the session | |
| | | * @return #GNUNET_YES or #GNUNET_NO | |
| | | */ | |
| | | int | |
| | | GNUNET_ATS_session_known (struct GNUNET_ATS_SchedulingHandle *sh, | |
| | | const struct GNUNET_HELLO_Address *address, | |
| | | struct Session *session); | |
| | | | |
| | | /** | |
| * We have a new address ATS should know. Addresses have to be added with t
his | | * We have a new address ATS should know. Addresses have to be added with t
his | |
| * function before they can be: updated, set in use and destroyed | | * function before they can be: updated, set in use and destroyed | |
| * | | * | |
| * @param sh handle | | * @param sh handle | |
| * @param address the address | | * @param address the address | |
| * @param session session handle (if available) | | * @param session session handle (if available) | |
| * @param ats performance data for the address | | * @param ats performance data for the address | |
|
| * @param ats_count number of performance records in 'ats' | | * @param ats_count number of performance records in @a ats | |
| */ | | */ | |
| int | | int | |
| GNUNET_ATS_address_add (struct GNUNET_ATS_SchedulingHandle *sh, | | GNUNET_ATS_address_add (struct GNUNET_ATS_SchedulingHandle *sh, | |
| const struct GNUNET_HELLO_Address *address, | | const struct GNUNET_HELLO_Address *address, | |
| struct Session *session, | | struct Session *session, | |
| const struct GNUNET_ATS_Information *ats, | | const struct GNUNET_ATS_Information *ats, | |
| uint32_t ats_count); | | uint32_t ats_count); | |
| | | | |
| /** | | /** | |
| * We have updated performance statistics for a given address. Note | | * We have updated performance statistics for a given address. Note | |
| * that this function can be called for addresses that are currently | | * that this function can be called for addresses that are currently | |
| * in use as well as addresses that are valid but not actively in use. | | * in use as well as addresses that are valid but not actively in use. | |
| * Furthermore, the peer may not even be connected to us right now (in | | * Furthermore, the peer may not even be connected to us right now (in | |
| * which case the call may be ignored or the information may be stored | | * which case the call may be ignored or the information may be stored | |
| * for later use). Update bandwidth assignments. | | * for later use). Update bandwidth assignments. | |
| * | | * | |
| * @param sh handle | | * @param sh handle | |
| * @param address updated address | | * @param address updated address | |
| * @param session session handle (if available) | | * @param session session handle (if available) | |
| * @param ats performance data for the address | | * @param ats performance data for the address | |
|
| * @param ats_count number of performance records in 'ats' | | * @param ats_count number of performance records in @a ats | |
| | | * @return #GNUNET_OK or #GNUNET_SYSERR | |
| */ | | */ | |
|
| void | | int | |
| GNUNET_ATS_address_update (struct GNUNET_ATS_SchedulingHandle *sh, | | GNUNET_ATS_address_update (struct GNUNET_ATS_SchedulingHandle *sh, | |
| const struct GNUNET_HELLO_Address *address, | | const struct GNUNET_HELLO_Address *address, | |
| struct Session *session, | | struct Session *session, | |
| const struct GNUNET_ATS_Information *ats, | | const struct GNUNET_ATS_Information *ats, | |
| uint32_t ats_count); | | uint32_t ats_count); | |
| | | | |
| /** | | /** | |
| * An address is now in use or not used any more. | | * An address is now in use or not used any more. | |
| * | | * | |
| * @param sh handle | | * @param sh handle | |
| * @param address the address | | * @param address the address | |
| * @param session session handle | | * @param session session handle | |
|
| * @param in_use GNUNET_YES if this address is now used, GNUNET_NO | | * @param in_use #GNUNET_YES if this address is now used, #GNUNET_NO | |
| * if address is not used any more | | * if address is not used any more | |
| */ | | */ | |
| void | | void | |
| GNUNET_ATS_address_in_use (struct GNUNET_ATS_SchedulingHandle *sh, | | GNUNET_ATS_address_in_use (struct GNUNET_ATS_SchedulingHandle *sh, | |
| const struct GNUNET_HELLO_Address *address, | | const struct GNUNET_HELLO_Address *address, | |
|
| struct Session *session, int in_use); | | struct Session *session, | |
| | | int in_use); | |
| | | | |
| /** | | /** | |
| * A session got destroyed, stop including it as a valid address. | | * A session got destroyed, stop including it as a valid address. | |
| * | | * | |
| * @param sh handle | | * @param sh handle | |
| * @param address the address | | * @param address the address | |
| * @param session session handle that is no longer valid (if available) | | * @param session session handle that is no longer valid (if available) | |
| */ | | */ | |
| void | | void | |
| GNUNET_ATS_address_destroyed (struct GNUNET_ATS_SchedulingHandle *sh, | | GNUNET_ATS_address_destroyed (struct GNUNET_ATS_SchedulingHandle *sh, | |
| | | | |
| skipping to change at line 673 | | skipping to change at line 730 | |
| struct Session *session); | | struct Session *session); | |
| | | | |
| /* ******************************** Performance API ***********************
****** */ | | /* ******************************** Performance API ***********************
****** */ | |
| | | | |
| /** | | /** | |
| * ATS Handle to obtain and/or modify performance information. | | * ATS Handle to obtain and/or modify performance information. | |
| */ | | */ | |
| struct GNUNET_ATS_PerformanceHandle; | | struct GNUNET_ATS_PerformanceHandle; | |
| | | | |
| /** | | /** | |
|
| * Signature of a function that is called with QoS information about a peer
. | | * Signature of a function that is called with QoS information about an add
ress. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param address the address | | * @param address the address | |
|
| | | * @param address_active is this address actively used to maintain a connec | |
| | | tion | |
| | | * to a peer | |
| * @param bandwidth_out assigned outbound bandwidth for the connection | | * @param bandwidth_out assigned outbound bandwidth for the connection | |
| * @param bandwidth_in assigned inbound bandwidth for the connection | | * @param bandwidth_in assigned inbound bandwidth for the connection | |
| * @param ats performance data for the address (as far as known) | | * @param ats performance data for the address (as far as known) | |
| * @param ats_count number of performance records in 'ats' | | * @param ats_count number of performance records in 'ats' | |
| */ | | */ | |
|
| typedef void (*GNUNET_ATS_PeerInformationCallback) (void *cls, | | typedef void | |
| const struct | | (*GNUNET_ATS_AddressInformationCallback) (void *cls, | |
| GNUNET_HELLO_Address * | | const struct GNUNET_HELLO_Address *address, int address_active, | |
| address, | | struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out, | |
| struct | | struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in, | |
| GNUNET_BANDWIDTH_Value3 | | const struct GNUNET_ATS_Information *ats, uint32_t ats_count); | |
| 2NBO | | | |
| bandwidth_out, | | | |
| struct | | | |
| GNUNET_BANDWIDTH_Value3 | | | |
| 2NBO | | | |
| bandwidth_in, | | | |
| const struct | | | |
| GNUNET_ATS_Information | | | |
| * | | | |
| ats, uint32_t ats_count | | | |
| ); | | | |
| | | | |
| /** | | /** | |
| * Handle for an address listing operation | | * Handle for an address listing operation | |
| */ | | */ | |
| struct GNUNET_ATS_AddressListHandle; | | struct GNUNET_ATS_AddressListHandle; | |
| | | | |
| /** | | /** | |
| * Get handle to access performance API of the ATS subsystem. | | * Get handle to access performance API of the ATS subsystem. | |
| * | | * | |
| * @param cfg configuration to use | | * @param cfg configuration to use | |
|
| * @param infocb function to call on performance changes, can be NULL | | * @param addr_info_cb callback called when performance characteristics for | |
| * @param infocb_cls closure for infocb | | * an address change | |
| | | * @param addr_info_cb_cls closure for infocb | |
| * @return ats performance context | | * @return ats performance context | |
| */ | | */ | |
| struct GNUNET_ATS_PerformanceHandle * | | struct GNUNET_ATS_PerformanceHandle * | |
| GNUNET_ATS_performance_init (const struct GNUNET_CONFIGURATION_Handle *cfg, | | GNUNET_ATS_performance_init (const struct GNUNET_CONFIGURATION_Handle *cfg, | |
|
| GNUNET_ATS_PeerInformationCallback infocb, | | GNUNET_ATS_AddressInformationCallback addr_info_cb, void *addr_info_cb_ | |
| void *infocb_cls); | | cls); | |
| | | | |
| /** | | /** | |
| * Get information about addresses known to the ATS subsystem. | | * Get information about addresses known to the ATS subsystem. | |
| * | | * | |
| * @param handle the performance handle to use | | * @param handle the performance handle to use | |
| * @param peer peer idm can be NULL for all peers | | * @param peer peer idm can be NULL for all peers | |
| * @param all GNUNET_YES to get information about all addresses or GNUNET_N
O to | | * @param all GNUNET_YES to get information about all addresses or GNUNET_N
O to | |
| * get only address currently used | | * get only address currently used | |
| * @param infocb callback to call with the addresses, | | * @param infocb callback to call with the addresses, | |
| * will callback with address == NULL when done | | * will callback with address == NULL when done | |
| * @param infocb_cls closure for infocb | | * @param infocb_cls closure for infocb | |
| * @return ats performance context | | * @return ats performance context | |
| */ | | */ | |
| struct GNUNET_ATS_AddressListHandle * | | struct GNUNET_ATS_AddressListHandle * | |
|
| GNUNET_ATS_performance_list_addresses (struct GNUNET_ATS_PerformanceHandle | | GNUNET_ATS_performance_list_addresses ( | |
| *handle, | | struct GNUNET_ATS_PerformanceHandle *handle, | |
| const struct GNUNET_PeerIdentity *pe | | const struct GNUNET_PeerIdentity *peer, int all, | |
| er, | | GNUNET_ATS_AddressInformationCallback infocb, void *infocb_cls); | |
| int all, | | | |
| GNUNET_ATS_PeerInformationCallback i | | | |
| nfocb, | | | |
| void *infocb_cls); | | | |
| | | | |
| /** | | /** | |
| * Cancel a pending address listing operation | | * Cancel a pending address listing operation | |
| * | | * | |
| * @param handle the GNUNET_ATS_AddressListHandle handle to cancel | | * @param handle the GNUNET_ATS_AddressListHandle handle to cancel | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_ATS_performance_list_addresses_cancel (struct GNUNET_ATS_AddressList | | GNUNET_ATS_performance_list_addresses_cancel ( | |
| Handle *handle); | | struct GNUNET_ATS_AddressListHandle *handle); | |
| | | | |
| /** | | /** | |
| * Client is done using the ATS performance subsystem, release resources. | | * Client is done using the ATS performance subsystem, release resources. | |
| * | | * | |
| * @param ph handle | | * @param ph handle | |
| */ | | */ | |
| void | | void | |
| GNUNET_ATS_performance_done (struct GNUNET_ATS_PerformanceHandle *ph); | | GNUNET_ATS_performance_done (struct GNUNET_ATS_PerformanceHandle *ph); | |
| | | | |
| /** | | /** | |
| * Function called with reservation result. | | * Function called with reservation result. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param peer identifies the peer | | * @param peer identifies the peer | |
| * @param amount set to the amount that was actually reserved or unreserved
; | | * @param amount set to the amount that was actually reserved or unreserved
; | |
| * either the full requested amount or zero (no partial reser
vations) | | * either the full requested amount or zero (no partial reser
vations) | |
| * @param res_delay if the reservation could not be satisfied (amount was 0
), how | | * @param res_delay if the reservation could not be satisfied (amount was 0
), how | |
| * long should the client wait until re-trying? | | * long should the client wait until re-trying? | |
| */ | | */ | |
|
| typedef void (*GNUNET_ATS_ReservationCallback) (void *cls, | | typedef void | |
| const struct GNUNET_PeerIde | | (*GNUNET_ATS_ReservationCallback) (void *cls, | |
| ntity | | const struct GNUNET_PeerIdentity * peer, int32_t amount, | |
| * peer, int32_t amount, | | struct GNUNET_TIME_Relative res_delay); | |
| struct GNUNET_TIME_Relative | | | |
| res_delay); | | | |
| | | | |
| /** | | /** | |
| * Context that can be used to cancel a peer information request. | | * Context that can be used to cancel a peer information request. | |
| */ | | */ | |
| struct GNUNET_ATS_ReservationContext; | | struct GNUNET_ATS_ReservationContext; | |
| | | | |
| /** | | /** | |
| * Reserve inbound bandwidth from the given peer. ATS will look at | | * Reserve inbound bandwidth from the given peer. ATS will look at | |
| * the current amount of traffic we receive from the peer and ensure | | * the current amount of traffic we receive from the peer and ensure | |
| * that the peer could add 'amount' of data to its stream. | | * that the peer could add 'amount' of data to its stream. | |
| | | | |
| skipping to change at line 786 | | skipping to change at line 837 | |
| * @param peer identifies the peer | | * @param peer identifies the peer | |
| * @param amount reserve N bytes for receiving, negative | | * @param amount reserve N bytes for receiving, negative | |
| * amounts can be used to undo a (recent) reservation; | | * amounts can be used to undo a (recent) reservation; | |
| * @param rcb function to call with the resulting reservation information | | * @param rcb function to call with the resulting reservation information | |
| * @param rcb_cls closure for info | | * @param rcb_cls closure for info | |
| * @return NULL on error | | * @return NULL on error | |
| * @deprecated will be replaced soon | | * @deprecated will be replaced soon | |
| */ | | */ | |
| struct GNUNET_ATS_ReservationContext * | | struct GNUNET_ATS_ReservationContext * | |
| GNUNET_ATS_reserve_bandwidth (struct GNUNET_ATS_PerformanceHandle *ph, | | GNUNET_ATS_reserve_bandwidth (struct GNUNET_ATS_PerformanceHandle *ph, | |
|
| const struct GNUNET_PeerIdentity *peer, | | const struct GNUNET_PeerIdentity *peer, int32_t amount, | |
| int32_t amount, | | GNUNET_ATS_ReservationCallback rcb, void *rcb_cls); | |
| GNUNET_ATS_ReservationCallback rcb, | | | |
| void *rcb_cls); | | | |
| | | | |
| /** | | /** | |
| * Cancel request for reserving bandwidth. | | * Cancel request for reserving bandwidth. | |
| * | | * | |
| * @param rc context returned by the original GNUNET_ATS_reserve_bandwidth
call | | * @param rc context returned by the original GNUNET_ATS_reserve_bandwidth
call | |
| */ | | */ | |
| void | | void | |
| GNUNET_ATS_reserve_bandwidth_cancel (struct GNUNET_ATS_ReservationContext *
rc); | | GNUNET_ATS_reserve_bandwidth_cancel (struct GNUNET_ATS_ReservationContext *
rc); | |
| | | | |
| /** | | /** | |
| | | | |
| skipping to change at line 837 | | skipping to change at line 886 | |
| * the goal function) to the given amount. The argument is followed | | * the goal function) to the given amount. The argument is followed | |
| * by a double value giving the desired value (can be negative). | | * by a double value giving the desired value (can be negative). | |
| * Preference changes are forgotten if peers disconnect. | | * Preference changes are forgotten if peers disconnect. | |
| */ | | */ | |
| GNUNET_ATS_PREFERENCE_BANDWIDTH, | | GNUNET_ATS_PREFERENCE_BANDWIDTH, | |
| | | | |
| /** | | /** | |
| * Change the peer's latency value to the given amount. The | | * Change the peer's latency value to the given amount. The | |
| * argument is followed by a double value giving the desired value | | * argument is followed by a double value giving the desired value | |
| * (can be negative). The absolute score in the goal function is | | * (can be negative). The absolute score in the goal function is | |
|
| * the inverse of the latency in ms (minimum: 1 ms) multiplied by | | * the inverse of the latency in microseconds (minimum: 1 | |
| * the latency preferences. | | * microsecond) multiplied by the latency preferences. | |
| */ | | */ | |
| GNUNET_ATS_PREFERENCE_LATENCY | | GNUNET_ATS_PREFERENCE_LATENCY | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Convert a GNUNET_ATS_PreferenceType to a string | | * Convert a GNUNET_ATS_PreferenceType to a string | |
| * | | * | |
| * @param type the preference type | | * @param type the preference type | |
| * @return a string or NULL if invalid | | * @return a string or NULL if invalid | |
| */ | | */ | |
| | | | |
| skipping to change at line 861 | | skipping to change at line 910 | |
| | | | |
| /** | | /** | |
| * Change preferences for the given peer. Preference changes are forgotten
if peers | | * Change preferences for the given peer. Preference changes are forgotten
if peers | |
| * disconnect. | | * disconnect. | |
| * | | * | |
| * @param ph performance handle | | * @param ph performance handle | |
| * @param peer identifies the peer | | * @param peer identifies the peer | |
| * @param ... 0-terminated specification of the desired changes | | * @param ... 0-terminated specification of the desired changes | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_ATS_change_preference (struct GNUNET_ATS_PerformanceHandle *ph, | | GNUNET_ATS_performance_change_preference ( | |
| const struct GNUNET_PeerIdentity *peer, ...); | | struct GNUNET_ATS_PerformanceHandle *ph, | |
| | | const struct GNUNET_PeerIdentity *peer, ...); | |
| | | | |
| | | /** | |
| | | * Application feedback on how good preference requirements are fulfilled | |
| | | * for the preferences included in the given time scope [now - scope .. now | |
| | | ] | |
| | | * | |
| | | * An application notifies ATS if (and only if) it has feedback information | |
| | | * for specific properties. This values are valid until the feedback scores | |
| | | are | |
| | | * updated by the application. | |
| | | * | |
| | | * If the application has no feedback for this preference kind the applicat | |
| | | ion | |
| | | * will not explicitly call for this property and will not include it in th | |
| | | is | |
| | | * function call. | |
| | | * | |
| | | * @param ph performance handle | |
| | | * @param scope the time interval this valid for: [now - scope .. now] | |
| | | * @param peer identifies the peer | |
| | | * @param ... 0-terminated specification of the desired changes | |
| | | */ | |
| | | void | |
| | | GNUNET_ATS_performance_give_feedback (struct GNUNET_ATS_PerformanceHandle * | |
| | | ph, | |
| | | const struct GNUNET_PeerIdentity *peer, | |
| | | const struct GNUNET_TIME_Relative scope, ...); | |
| | | | |
| #endif | | #endif | |
| /* end of file gnunet-service-transport_ats.h */ | | /* end of file gnunet-service-transport_ats.h */ | |
| | | | |
End of changes. 42 change blocks. |
| 346 lines changed or deleted | | 409 lines changed or added | |
|
| gnunet_common.h | | gnunet_common.h | |
| /* | | /* | |
| This file is part of GNUnet. | | This file is part of GNUnet. | |
|
| (C) 2006, 2009 Christian Grothoff (and other contributing authors) | | (C) 2006-2013 Christian Grothoff (and other contributing authors) | |
| | | | |
| GNUnet is free software; you can redistribute it and/or modify | | GNUnet is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published | | 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. | | option) any later version. | |
| | | | |
| GNUnet is distributed in the hope that it will be useful, but | | GNUnet is distributed in the hope that it will be useful, but | |
| WITHOUT ANY WARRANTY; without even the implied warranty of | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| General Public License for more details. | | General Public License for more details. | |
| | | | |
| You should have received a copy of the GNU General Public License | | You should have received a copy of the GNU General Public License | |
| along with GNUnet; see the file COPYING. If not, write to the | | along with GNUnet; see the file COPYING. If not, write to the | |
| Free Software Foundation, Inc., 59 Temple Place - Suite 330, | | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| | | | |
| skipping to change at line 29 | | skipping to change at line 29 | |
| */ | | */ | |
| | | | |
| /** | | /** | |
| * @file include/gnunet_common.h | | * @file include/gnunet_common.h | |
| * @brief commonly used definitions; globals in this file | | * @brief commonly used definitions; globals in this file | |
| * are exempt from the rule that the module name ("common") | | * are exempt from the rule that the module name ("common") | |
| * must be part of the symbol name. | | * must be part of the symbol name. | |
| * | | * | |
| * @author Christian Grothoff | | * @author Christian Grothoff | |
| * @author Nils Durner | | * @author Nils Durner | |
|
| | | * | |
| | | * @defgroup logging Logging | |
| | | * @defgroup memory Memory management | |
| */ | | */ | |
| #ifndef GNUNET_COMMON_H | | #ifndef GNUNET_COMMON_H | |
| #define GNUNET_COMMON_H | | #define GNUNET_COMMON_H | |
| | | | |
| #if HAVE_SYS_SOCKET_H | | #if HAVE_SYS_SOCKET_H | |
| #include <sys/socket.h> | | #include <sys/socket.h> | |
| #endif | | #endif | |
| #if HAVE_NETINET_IN_H | | #if HAVE_NETINET_IN_H | |
| #include <netinet/in.h> | | #include <netinet/in.h> | |
| #endif | | #endif | |
| | | | |
| skipping to change at line 60 | | skipping to change at line 63 | |
| extern "C" | | extern "C" | |
| { | | { | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| } | | } | |
| #endif | | #endif | |
| #endif | | #endif | |
| | | | |
| /** | | /** | |
| * Version of the API (for entire gnunetutil.so library). | | * Version of the API (for entire gnunetutil.so library). | |
| */ | | */ | |
|
| #define GNUNET_UTIL_VERSION 0x00090500 | | #define GNUNET_UTIL_VERSION 0x000A0000 | |
| | | | |
| /** | | /** | |
|
| * Named constants for return values. The following | | * Named constants for return values. The following invariants hold: | |
| * invariants hold: "GNUNET_NO == 0" (to allow "if (GNUNET_NO)") | | * `GNUNET_NO == 0` (to allow `if (GNUNET_NO)`) `GNUNET_OK != | |
| * "GNUNET_OK != GNUNET_SYSERR", "GNUNET_OK != GNUNET_NO", "GNUNET_NO != GN | | * GNUNET_SYSERR`, `GNUNET_OK != GNUNET_NO`, `GNUNET_NO != | |
| UNET_SYSERR" | | * GNUNET_SYSERR` and finally `GNUNET_YES != GNUNET_NO`. | |
| * and finally "GNUNET_YES != GNUNET_NO". | | | |
| */ | | */ | |
| #define GNUNET_OK 1 | | #define GNUNET_OK 1 | |
| #define GNUNET_SYSERR -1 | | #define GNUNET_SYSERR -1 | |
| #define GNUNET_YES 1 | | #define GNUNET_YES 1 | |
| #define GNUNET_NO 0 | | #define GNUNET_NO 0 | |
| | | | |
| #define GNUNET_MIN(a,b) (((a) < (b)) ? (a) : (b)) | | #define GNUNET_MIN(a,b) (((a) < (b)) ? (a) : (b)) | |
| | | | |
| #define GNUNET_MAX(a,b) (((a) > (b)) ? (a) : (b)) | | #define GNUNET_MAX(a,b) (((a) > (b)) ? (a) : (b)) | |
| | | | |
| | | | |
| skipping to change at line 107 | | skipping to change at line 110 | |
| #ifdef _LITTLE_ENDIAN | | #ifdef _LITTLE_ENDIAN | |
| #define __LITTLE_ENDIAN _LITTLE_ENDIAN | | #define __LITTLE_ENDIAN _LITTLE_ENDIAN | |
| #else | | #else | |
| #ifdef LITTLE_ENDIAN | | #ifdef LITTLE_ENDIAN | |
| #define __LITTLE_ENDIAN LITTLE_ENDIAN | | #define __LITTLE_ENDIAN LITTLE_ENDIAN | |
| #endif | | #endif | |
| #endif | | #endif | |
| #endif | | #endif | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| | | * define #GNUNET_EXTRA_LOGGING if using this header outside the GNUnet sou | |
| | | rce | |
| | | * tree where gnunet_config.h is unavailable | |
| | | */ | |
| | | #ifndef GNUNET_EXTRA_LOGGING | |
| | | #define GNUNET_EXTRA_LOGGING 0 | |
| | | #endif | |
| | | | |
| | | /** | |
| * Endian operations | | * Endian operations | |
| */ | | */ | |
| | | | |
| # if __BYTE_ORDER == __LITTLE_ENDIAN | | # if __BYTE_ORDER == __LITTLE_ENDIAN | |
| # define GNUNET_htobe16(x) __bswap_16 (x) | | # define GNUNET_htobe16(x) __bswap_16 (x) | |
| # define GNUNET_htole16(x) (x) | | # define GNUNET_htole16(x) (x) | |
| # define GNUNET_be16toh(x) __bswap_16 (x) | | # define GNUNET_be16toh(x) __bswap_16 (x) | |
| # define GNUNET_le16toh(x) (x) | | # define GNUNET_le16toh(x) (x) | |
| | | | |
| # define GNUNET_htobe32(x) __bswap_32 (x) | | # define GNUNET_htobe32(x) __bswap_32 (x) | |
| | | | |
| skipping to change at line 236 | | skipping to change at line 248 | |
| */ | | */ | |
| uint16_t size GNUNET_PACKED; | | uint16_t size GNUNET_PACKED; | |
| | | | |
| /** | | /** | |
| * The type of the message (GNUNET_MESSAGE_TYPE_XXXX), in big-endian form
at. | | * The type of the message (GNUNET_MESSAGE_TYPE_XXXX), in big-endian form
at. | |
| */ | | */ | |
| uint16_t type GNUNET_PACKED; | | uint16_t type GNUNET_PACKED; | |
| | | | |
| }; | | }; | |
| | | | |
|
| /** | | | |
| * @brief A SHA-512 hashcode | | | |
| */ | | | |
| struct GNUNET_HashCode | | | |
| { | | | |
| uint32_t bits[512 / 8 / sizeof (uint32_t)]; /* = 16 */ | | | |
| }; | | | |
| | | | |
| /** | | | |
| * @brief A SHA-256 hashcode | | | |
| */ | | | |
| struct GNUNET_CRYPTO_ShortHashCode | | | |
| { | | | |
| uint32_t bits[256 / 8 / sizeof (uint32_t)]; /* = 8 */ | | | |
| }; | | | |
| | | | |
| /** | | | |
| * The identity of the host (basically the SHA-512 hashcode of | | | |
| * it's public key). | | | |
| */ | | | |
| struct GNUNET_PeerIdentity | | | |
| { | | | |
| struct GNUNET_HashCode hashPubKey; | | | |
| }; | | | |
| GNUNET_NETWORK_STRUCT_END | | GNUNET_NETWORK_STRUCT_END | |
| | | | |
| /** | | /** | |
| * Function called with a filename. | | * Function called with a filename. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param filename complete filename (absolute path) | | * @param filename complete filename (absolute path) | |
|
| * @return GNUNET_OK to continue to iterate, | | * @return #GNUNET_OK to continue to iterate, | |
| * GNUNET_SYSERR to abort iteration with error! | | * #GNUNET_NO to stop iteration with no error, | |
| | | * #GNUNET_SYSERR to abort iteration with error! | |
| */ | | */ | |
| typedef int (*GNUNET_FileNameCallback) (void *cls, const char *filename); | | typedef int (*GNUNET_FileNameCallback) (void *cls, const char *filename); | |
| | | | |
| /* ****************************** logging ***************************** */ | | /* ****************************** logging ***************************** */ | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Types of errors. | | * Types of errors. | |
| */ | | */ | |
| enum GNUNET_ErrorType | | enum GNUNET_ErrorType | |
| { | | { | |
| GNUNET_ERROR_TYPE_UNSPECIFIED = -1, | | GNUNET_ERROR_TYPE_UNSPECIFIED = -1, | |
| GNUNET_ERROR_TYPE_NONE = 0, | | GNUNET_ERROR_TYPE_NONE = 0, | |
| GNUNET_ERROR_TYPE_ERROR = 1, | | GNUNET_ERROR_TYPE_ERROR = 1, | |
| GNUNET_ERROR_TYPE_WARNING = 2, | | GNUNET_ERROR_TYPE_WARNING = 2, | |
| GNUNET_ERROR_TYPE_INFO = 4, | | GNUNET_ERROR_TYPE_INFO = 4, | |
| GNUNET_ERROR_TYPE_DEBUG = 8, | | GNUNET_ERROR_TYPE_DEBUG = 8, | |
| GNUNET_ERROR_TYPE_INVALID = 16, | | GNUNET_ERROR_TYPE_INVALID = 16, | |
| GNUNET_ERROR_TYPE_BULK = 32 | | GNUNET_ERROR_TYPE_BULK = 32 | |
| }; | | }; | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * User-defined handler for log messages. | | * User-defined handler for log messages. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param kind severeity | | * @param kind severeity | |
| * @param component what component is issuing the message? | | * @param component what component is issuing the message? | |
| * @param date when was the message logged? | | * @param date when was the message logged? | |
| * @param message what is the message | | * @param message what is the message | |
| */ | | */ | |
| typedef void (*GNUNET_Logger) (void *cls, enum GNUNET_ErrorType kind, | | typedef void (*GNUNET_Logger) (void *cls, enum GNUNET_ErrorType kind, | |
| const char *component, const char *date, | | const char *component, const char *date, | |
| const char *message); | | const char *message); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Get the number of log calls that are going to be skipped | | * Get the number of log calls that are going to be skipped | |
| * | | * | |
| * @return number of log calls to be ignored | | * @return number of log calls to be ignored | |
| */ | | */ | |
| int | | int | |
| GNUNET_get_log_skip (); | | GNUNET_get_log_skip (); | |
| | | | |
| #if !defined(GNUNET_CULL_LOGGING) | | #if !defined(GNUNET_CULL_LOGGING) | |
| int | | int | |
|
| GNUNET_get_log_call_status (int caller_level, const char *comp, | | GNUNET_get_log_call_status (int caller_level, | |
| const char *file, const char *function, int lin | | const char *comp, | |
| e); | | const char *file, | |
| | | const char *function, int line); | |
| #endif | | #endif | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Main log function. | | * Main log function. | |
| * | | * | |
| * @param kind how serious is the error? | | * @param kind how serious is the error? | |
| * @param message what is the message (format string) | | * @param message what is the message (format string) | |
| * @param ... arguments for format string | | * @param ... arguments for format string | |
| */ | | */ | |
| void | | void | |
| GNUNET_log_nocheck (enum GNUNET_ErrorType kind, const char *message, ...); | | GNUNET_log_nocheck (enum GNUNET_ErrorType kind, const char *message, ...); | |
| | | | |
| /* from glib */ | | /* from glib */ | |
| | | | |
| skipping to change at line 349 | | skipping to change at line 344 | |
| #else | | #else | |
| #define GN_LIKELY(expr) (expr) | | #define GN_LIKELY(expr) (expr) | |
| #define GN_UNLIKELY(expr) (expr) | | #define GN_UNLIKELY(expr) (expr) | |
| #endif | | #endif | |
| | | | |
| #if !defined(GNUNET_LOG_CALL_STATUS) | | #if !defined(GNUNET_LOG_CALL_STATUS) | |
| #define GNUNET_LOG_CALL_STATUS -1 | | #define GNUNET_LOG_CALL_STATUS -1 | |
| #endif | | #endif | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Log function that specifies an alternative component. | | * Log function that specifies an alternative component. | |
| * This function should be used by plugins. | | * This function should be used by plugins. | |
| * | | * | |
| * @param kind how serious is the error? | | * @param kind how serious is the error? | |
| * @param comp component responsible for generating the message | | * @param comp component responsible for generating the message | |
| * @param message what is the message (format string) | | * @param message what is the message (format string) | |
| * @param ... arguments for format string | | * @param ... arguments for format string | |
| */ | | */ | |
| void | | void | |
| GNUNET_log_from_nocheck (enum GNUNET_ErrorType kind, const char *comp, | | GNUNET_log_from_nocheck (enum GNUNET_ErrorType kind, const char *comp, | |
| | | | |
| skipping to change at line 393 | | skipping to change at line 389 | |
| GNUNET_log_nocheck ((kind), __VA_ARGS__); \ | | GNUNET_log_nocheck ((kind), __VA_ARGS__); \ | |
| }\ | | }\ | |
| }\ | | }\ | |
| } while (0) | | } while (0) | |
| #else | | #else | |
| #define GNUNET_log(...) | | #define GNUNET_log(...) | |
| #define GNUNET_log_from(...) | | #define GNUNET_log_from(...) | |
| #endif | | #endif | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Log error message about missing configuration option. | | * Log error message about missing configuration option. | |
| * | | * | |
| * @param kind log level | | * @param kind log level | |
| * @param section section with missing option | | * @param section section with missing option | |
| * @param option name of missing option | | * @param option name of missing option | |
| */ | | */ | |
| void | | void | |
| GNUNET_log_config_missing (enum GNUNET_ErrorType kind, | | GNUNET_log_config_missing (enum GNUNET_ErrorType kind, | |
| const char *section, | | const char *section, | |
| const char *option); | | const char *option); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Log error message about invalid configuration option value. | | * Log error message about invalid configuration option value. | |
| * | | * | |
| * @param kind log level | | * @param kind log level | |
| * @param section section with invalid option | | * @param section section with invalid option | |
| * @param option name of invalid option | | * @param option name of invalid option | |
| * @param required what is required that is invalid about the option | | * @param required what is required that is invalid about the option | |
| */ | | */ | |
| void | | void | |
| GNUNET_log_config_invalid (enum GNUNET_ErrorType kind, | | GNUNET_log_config_invalid (enum GNUNET_ErrorType kind, | |
| const char *section, | | const char *section, | |
| const char *option, | | const char *option, | |
| const char *required); | | const char *required); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Abort the process, generate a core dump if possible. | | * Abort the process, generate a core dump if possible. | |
| */ | | */ | |
| void | | void | |
| GNUNET_abort (void) GNUNET_NORETURN; | | GNUNET_abort (void) GNUNET_NORETURN; | |
| | | | |
| /** | | /** | |
|
| * Ignore the next n calls to the log function. | | * @ingroup logging | |
| | | * Ignore the next @a n calls to the log function. | |
| * | | * | |
| * @param n number of log calls to ignore (could be negative) | | * @param n number of log calls to ignore (could be negative) | |
| * @param check_reset GNUNET_YES to assert that the log skip counter is cur
rently zero | | * @param check_reset GNUNET_YES to assert that the log skip counter is cur
rently zero | |
| */ | | */ | |
| void | | void | |
| GNUNET_log_skip (int n, int check_reset); | | GNUNET_log_skip (int n, int check_reset); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Setup logging. | | * Setup logging. | |
| * | | * | |
| * @param comp default component to use | | * @param comp default component to use | |
| * @param loglevel what types of messages should be logged | | * @param loglevel what types of messages should be logged | |
| * @param logfile change logging to logfile (use NULL to keep stderr) | | * @param logfile change logging to logfile (use NULL to keep stderr) | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR if logfile could not be open
ed | | * @return #GNUNET_OK on success, #GNUNET_SYSERR if logfile could not be op
ened | |
| */ | | */ | |
| int | | int | |
| GNUNET_log_setup (const char *comp, const char *loglevel, const char *logfi
le); | | GNUNET_log_setup (const char *comp, const char *loglevel, const char *logfi
le); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Add a custom logger. | | * Add a custom logger. | |
| * | | * | |
| * @param logger log function | | * @param logger log function | |
|
| * @param logger_cls closure for logger | | * @param logger_cls closure for @a logger | |
| */ | | */ | |
| void | | void | |
| GNUNET_logger_add (GNUNET_Logger logger, void *logger_cls); | | GNUNET_logger_add (GNUNET_Logger logger, void *logger_cls); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Remove a custom logger. | | * Remove a custom logger. | |
| * | | * | |
| * @param logger log function | | * @param logger log function | |
| * @param logger_cls closure for logger | | * @param logger_cls closure for logger | |
| */ | | */ | |
| void | | void | |
| GNUNET_logger_remove (GNUNET_Logger logger, void *logger_cls); | | GNUNET_logger_remove (GNUNET_Logger logger, void *logger_cls); | |
| | | | |
| /** | | /** | |
|
| * Convert a short hash value to a string (for printing debug messages). | | * @ingroup logging | |
| * This is one of the very few calls in the entire API that is | | | |
| * NOT reentrant! | | | |
| * | | | |
| * @param hc the short hash code | | | |
| * @return string | | | |
| */ | | | |
| const char * | | | |
| GNUNET_short_h2s (const struct GNUNET_CRYPTO_ShortHashCode * hc); | | | |
| | | | |
| /** | | | |
| * Convert a short hash value to a string (for printing debug messages). | | | |
| * This prints all 104 characters of a hashcode! | | | |
| * This is one of the very few calls in the entire API that is | | | |
| * NOT reentrant! | | | |
| * | | | |
| * @param hc the short hash code | | | |
| * @return string | | | |
| */ | | | |
| const char * | | | |
| GNUNET_short_h2s_full (const struct GNUNET_CRYPTO_ShortHashCode * hc); | | | |
| | | | |
| /** | | | |
| * Convert a hash value to a string (for printing debug messages). | | * Convert a hash value to a string (for printing debug messages). | |
| * This is one of the very few calls in the entire API that is | | * This is one of the very few calls in the entire API that is | |
| * NOT reentrant! | | * NOT reentrant! | |
| * | | * | |
| * @param hc the hash code | | * @param hc the hash code | |
| * @return string | | * @return string | |
| */ | | */ | |
| const char * | | const char * | |
| GNUNET_h2s (const struct GNUNET_HashCode * hc); | | GNUNET_h2s (const struct GNUNET_HashCode * hc); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Convert a hash value to a string (for printing debug messages). | | * Convert a hash value to a string (for printing debug messages). | |
| * This prints all 104 characters of a hashcode! | | * This prints all 104 characters of a hashcode! | |
| * This is one of the very few calls in the entire API that is | | * This is one of the very few calls in the entire API that is | |
| * NOT reentrant! | | * NOT reentrant! | |
| * | | * | |
| * @param hc the hash code | | * @param hc the hash code | |
| * @return string | | * @return string | |
| */ | | */ | |
| const char * | | const char * | |
| GNUNET_h2s_full (const struct GNUNET_HashCode * hc); | | GNUNET_h2s_full (const struct GNUNET_HashCode * hc); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Convert a peer identity to a string (for printing debug messages). | | * Convert a peer identity to a string (for printing debug messages). | |
| * This is one of the very few calls in the entire API that is | | * This is one of the very few calls in the entire API that is | |
| * NOT reentrant! | | * NOT reentrant! | |
| * | | * | |
| * @param pid the peer identity | | * @param pid the peer identity | |
| * @return string form of the pid; will be overwritten by next | | * @return string form of the pid; will be overwritten by next | |
|
| * call to GNUNET_i2s. | | * call to #GNUNET_i2s. | |
| */ | | */ | |
| const char * | | const char * | |
| GNUNET_i2s (const struct GNUNET_PeerIdentity *pid); | | GNUNET_i2s (const struct GNUNET_PeerIdentity *pid); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Convert a peer identity to a string (for printing debug messages). | | * Convert a peer identity to a string (for printing debug messages). | |
| * This is one of the very few calls in the entire API that is | | * This is one of the very few calls in the entire API that is | |
| * NOT reentrant! | | * NOT reentrant! | |
| * | | * | |
| * @param pid the peer identity | | * @param pid the peer identity | |
| * @return string form of the pid; will be overwritten by next | | * @return string form of the pid; will be overwritten by next | |
|
| * call to GNUNET_i2s. | | * call to #GNUNET_i2s. | |
| */ | | */ | |
| const char * | | const char * | |
| GNUNET_i2s_full (const struct GNUNET_PeerIdentity *pid); | | GNUNET_i2s_full (const struct GNUNET_PeerIdentity *pid); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Convert a "struct sockaddr*" (IPv4 or IPv6 address) to a string | | * Convert a "struct sockaddr*" (IPv4 or IPv6 address) to a string | |
| * (for printing debug messages). This is one of the very few calls | | * (for printing debug messages). This is one of the very few calls | |
| * in the entire API that is NOT reentrant! | | * in the entire API that is NOT reentrant! | |
| * | | * | |
| * @param addr the address | | * @param addr the address | |
| * @param addrlen the length of the address | | * @param addrlen the length of the address | |
| * @return nicely formatted string for the address | | * @return nicely formatted string for the address | |
| * will be overwritten by next call to GNUNET_a2s. | | * will be overwritten by next call to GNUNET_a2s. | |
| */ | | */ | |
| const char * | | const char * | |
| GNUNET_a2s (const struct sockaddr *addr, socklen_t addrlen); | | GNUNET_a2s (const struct sockaddr *addr, socklen_t addrlen); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Convert error type to string. | | * Convert error type to string. | |
| * | | * | |
| * @param kind type to convert | | * @param kind type to convert | |
| * @return string corresponding to the type | | * @return string corresponding to the type | |
| */ | | */ | |
| const char * | | const char * | |
| GNUNET_error_type_to_string (enum GNUNET_ErrorType kind); | | GNUNET_error_type_to_string (enum GNUNET_ErrorType kind); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Use this for fatal errors that cannot be handled | | * Use this for fatal errors that cannot be handled | |
| */ | | */ | |
| #define GNUNET_assert(cond) do { if (! (cond)) { GNUNET_log(GNUNET_ERROR_TY
PE_ERROR, _("Assertion failed at %s:%d.\n"), __FILE__, __LINE__); GNUNET_ab
ort(); } } while(0) | | #define GNUNET_assert(cond) do { if (! (cond)) { GNUNET_log(GNUNET_ERROR_TY
PE_ERROR, _("Assertion failed at %s:%d.\n"), __FILE__, __LINE__); GNUNET_ab
ort(); } } while(0) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Use this for fatal errors that cannot be handled | | * Use this for fatal errors that cannot be handled | |
| */ | | */ | |
| #define GNUNET_assert_at(cond, f, l) do { if (! (cond)) { GNUNET_log(GNUNET
_ERROR_TYPE_ERROR, _("Assertion failed at %s:%d.\n"), f, l); GNUNET_abort()
; } } while(0) | | #define GNUNET_assert_at(cond, f, l) do { if (! (cond)) { GNUNET_log(GNUNET
_ERROR_TYPE_ERROR, _("Assertion failed at %s:%d.\n"), f, l); GNUNET_abort()
; } } while(0) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Use this for internal assertion violations that are | | * Use this for internal assertion violations that are | |
| * not fatal (can be handled) but should not occur. | | * not fatal (can be handled) but should not occur. | |
| */ | | */ | |
| #define GNUNET_break(cond) do { if (! (cond)) { GNUNET_log(GNUNET_ERROR_TY
PE_ERROR, _("Assertion failed at %s:%d.\n"), __FILE__, __LINE__); } } while
(0) | | #define GNUNET_break(cond) do { if (! (cond)) { GNUNET_log(GNUNET_ERROR_TY
PE_ERROR, _("Assertion failed at %s:%d.\n"), __FILE__, __LINE__); } } while
(0) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Use this for assertion violations caused by other | | * Use this for assertion violations caused by other | |
| * peers (i.e. protocol violations). We do not want to | | * peers (i.e. protocol violations). We do not want to | |
| * confuse end-users (say, some other peer runs an | | * confuse end-users (say, some other peer runs an | |
| * older, broken or incompatible GNUnet version), but | | * older, broken or incompatible GNUnet version), but | |
| * we still want to see these problems during | | * we still want to see these problems during | |
| * development and testing. "OP == other peer". | | * development and testing. "OP == other peer". | |
| */ | | */ | |
| #define GNUNET_break_op(cond) do { if (! (cond)) { GNUNET_log(GNUNET_ERROR
_TYPE_WARNING | GNUNET_ERROR_TYPE_BULK, _("External protocol violation dete
cted at %s:%d.\n"), __FILE__, __LINE__); } } while(0) | | #define GNUNET_break_op(cond) do { if (! (cond)) { GNUNET_log(GNUNET_ERROR
_TYPE_WARNING | GNUNET_ERROR_TYPE_BULK, _("External protocol violation dete
cted at %s:%d.\n"), __FILE__, __LINE__); } } while(0) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Log an error message at log-level 'level' that indicates | | * Log an error message at log-level 'level' that indicates | |
| * a failure of the command 'cmd' with the message given | | * a failure of the command 'cmd' with the message given | |
| * by strerror(errno). | | * by strerror(errno). | |
| */ | | */ | |
| #define GNUNET_log_strerror(level, cmd) do { GNUNET_log(level, _("`%s' fail
ed at %s:%d with error: %s\n"), cmd, __FILE__, __LINE__, STRERROR(errno));
} while(0) | | #define GNUNET_log_strerror(level, cmd) do { GNUNET_log(level, _("`%s' fail
ed at %s:%d with error: %s\n"), cmd, __FILE__, __LINE__, STRERROR(errno));
} while(0) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Log an error message at log-level 'level' that indicates | | * Log an error message at log-level 'level' that indicates | |
| * a failure of the command 'cmd' with the message given | | * a failure of the command 'cmd' with the message given | |
| * by strerror(errno). | | * by strerror(errno). | |
| */ | | */ | |
| #define GNUNET_log_from_strerror(level, component, cmd) do { GNUNET_log_fro
m (level, component, _("`%s' failed at %s:%d with error: %s\n"), cmd, __FIL
E__, __LINE__, STRERROR(errno)); } while(0) | | #define GNUNET_log_from_strerror(level, component, cmd) do { GNUNET_log_fro
m (level, component, _("`%s' failed at %s:%d with error: %s\n"), cmd, __FIL
E__, __LINE__, STRERROR(errno)); } while(0) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Log an error message at log-level 'level' that indicates | | * Log an error message at log-level 'level' that indicates | |
| * a failure of the command 'cmd' with the message given | | * a failure of the command 'cmd' with the message given | |
| * by strerror(errno). | | * by strerror(errno). | |
| */ | | */ | |
| #define GNUNET_log_strerror_file(level, cmd, filename) do { GNUNET_log(leve
l, _("`%s' failed on file `%s' at %s:%d with error: %s\n"), cmd, filename,_
_FILE__, __LINE__, STRERROR(errno)); } while(0) | | #define GNUNET_log_strerror_file(level, cmd, filename) do { GNUNET_log(leve
l, _("`%s' failed on file `%s' at %s:%d with error: %s\n"), cmd, filename,_
_FILE__, __LINE__, STRERROR(errno)); } while(0) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup logging | |
| * Log an error message at log-level 'level' that indicates | | * Log an error message at log-level 'level' that indicates | |
| * a failure of the command 'cmd' with the message given | | * a failure of the command 'cmd' with the message given | |
| * by strerror(errno). | | * by strerror(errno). | |
| */ | | */ | |
| #define GNUNET_log_from_strerror_file(level, component, cmd, filename) do {
GNUNET_log_from (level, component, _("`%s' failed on file `%s' at %s:%d wi
th error: %s\n"), cmd, filename,__FILE__, __LINE__, STRERROR(errno)); } whi
le(0) | | #define GNUNET_log_from_strerror_file(level, component, cmd, filename) do {
GNUNET_log_from (level, component, _("`%s' failed on file `%s' at %s:%d wi
th error: %s\n"), cmd, filename,__FILE__, __LINE__, STRERROR(errno)); } whi
le(0) | |
| | | | |
| /* ************************* endianess conversion ****************** */ | | /* ************************* endianess conversion ****************** */ | |
| | | | |
| /** | | /** | |
| * Convert unsigned 64-bit integer to host-byte-order. | | * Convert unsigned 64-bit integer to host-byte-order. | |
| | | | |
| skipping to change at line 645 | | skipping to change at line 639 | |
| * Convert double to host-byte-order | | * Convert double to host-byte-order | |
| * @param d the value in network byte order | | * @param d the value in network byte order | |
| * @return the same value in host byte order | | * @return the same value in host byte order | |
| */ | | */ | |
| double | | double | |
| GNUNET_ntoh_double (double d); | | GNUNET_ntoh_double (double d); | |
| | | | |
| /* ************************* allocation functions ****************** */ | | /* ************************* allocation functions ****************** */ | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup memory | |
| * Maximum allocation with GNUNET_malloc macro. | | * Maximum allocation with GNUNET_malloc macro. | |
| */ | | */ | |
| #define GNUNET_MAX_MALLOC_CHECKED (1024 * 1024 * 40) | | #define GNUNET_MAX_MALLOC_CHECKED (1024 * 1024 * 40) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup memory | |
| | | * Allocate a struct or union of the given @a type. | |
| | | * Wrapper around #GNUNET_malloc that returns a pointer | |
| | | * to the newly created object of the correct type. | |
| | | * | |
| | | * @param type name of the struct or union, i.e. pass 'struct Foo'. | |
| | | */ | |
| | | #define GNUNET_new(type) (type *) GNUNET_malloc (sizeof (type)) | |
| | | | |
| | | /** | |
| | | * @ingroup memory | |
| * Wrapper around malloc. Allocates size bytes of memory. | | * Wrapper around malloc. Allocates size bytes of memory. | |
| * The memory will be zero'ed out. | | * The memory will be zero'ed out. | |
| * | | * | |
| * @param size the number of bytes to allocate, must be | | * @param size the number of bytes to allocate, must be | |
| * smaller than 40 MB. | | * smaller than 40 MB. | |
| * @return pointer to size bytes of memory, never NULL (!) | | * @return pointer to size bytes of memory, never NULL (!) | |
| */ | | */ | |
| #define GNUNET_malloc(size) GNUNET_xmalloc_(size, __FILE__, __LINE__) | | #define GNUNET_malloc(size) GNUNET_xmalloc_(size, __FILE__, __LINE__) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup memory | |
| * Allocate and initialize a block of memory. | | * Allocate and initialize a block of memory. | |
| * | | * | |
| * @param buf data to initalize the block with | | * @param buf data to initalize the block with | |
| * @param size the number of bytes in buf (and size of the allocation) | | * @param size the number of bytes in buf (and size of the allocation) | |
| * @return pointer to size bytes of memory, never NULL (!) | | * @return pointer to size bytes of memory, never NULL (!) | |
| */ | | */ | |
| #define GNUNET_memdup(buf,size) GNUNET_xmemdup_(buf, size, __FILE__, __LINE
__) | | #define GNUNET_memdup(buf,size) GNUNET_xmemdup_(buf, size, __FILE__, __LINE
__) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup memory | |
| * Wrapper around malloc. Allocates size bytes of memory. | | * Wrapper around malloc. Allocates size bytes of memory. | |
| * The memory will be zero'ed out. | | * The memory will be zero'ed out. | |
| * | | * | |
| * @param size the number of bytes to allocate | | * @param size the number of bytes to allocate | |
| * @return pointer to size bytes of memory, NULL if we do not have enough m
emory | | * @return pointer to size bytes of memory, NULL if we do not have enough m
emory | |
| */ | | */ | |
| #define GNUNET_malloc_large(size) GNUNET_xmalloc_unchecked_(size, __FILE__,
__LINE__) | | #define GNUNET_malloc_large(size) GNUNET_xmalloc_unchecked_(size, __FILE__,
__LINE__) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup memory | |
| * Wrapper around realloc. Rellocates size bytes of memory. | | * Wrapper around realloc. Rellocates size bytes of memory. | |
| * | | * | |
| * @param ptr the pointer to reallocate | | * @param ptr the pointer to reallocate | |
| * @param size the number of bytes to reallocate | | * @param size the number of bytes to reallocate | |
| * @return pointer to size bytes of memory | | * @return pointer to size bytes of memory | |
| */ | | */ | |
| #define GNUNET_realloc(ptr, size) GNUNET_xrealloc_(ptr, size, __FILE__, __L
INE__) | | #define GNUNET_realloc(ptr, size) GNUNET_xrealloc_(ptr, size, __FILE__, __L
INE__) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup memory | |
| * Wrapper around free. Frees the memory referred to by ptr. | | * Wrapper around free. Frees the memory referred to by ptr. | |
| * Note that is is generally better to free memory that was | | * Note that is is generally better to free memory that was | |
|
| * allocated with GNUNET_array_grow using GNUNET_array_grow(mem, size, 0) i
nstead of GNUNET_free. | | * allocated with #GNUNET_array_grow using #GNUNET_array_grow(mem, size, 0)
instead of #GNUNET_free. | |
| * | | * | |
| * @param ptr location where to free the memory. ptr must have | | * @param ptr location where to free the memory. ptr must have | |
|
| * been returned by GNUNET_strdup, GNUNET_strndup, GNUNET_malloc or GNU
NET_array_grow earlier. | | * been returned by #GNUNET_strdup, #GNUNET_strndup, #GNUNET_malloc or
#GNUNET_array_grow earlier. | |
| */ | | */ | |
| #define GNUNET_free(ptr) GNUNET_xfree_(ptr, __FILE__, __LINE__) | | #define GNUNET_free(ptr) GNUNET_xfree_(ptr, __FILE__, __LINE__) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup memory | |
| * Free the memory pointed to by ptr if ptr is not NULL. | | * Free the memory pointed to by ptr if ptr is not NULL. | |
|
| * Equivalent to if (ptr!=null)GNUNET_free(ptr). | | * Equivalent to `if (NULL != ptr) GNUNET_free(ptr)`. | |
| * | | * | |
| * @param ptr the location in memory to free | | * @param ptr the location in memory to free | |
| */ | | */ | |
| #define GNUNET_free_non_null(ptr) do { void * __x__ = ptr; if (__x__ != NUL
L) { GNUNET_free(__x__); } } while(0) | | #define GNUNET_free_non_null(ptr) do { void * __x__ = ptr; if (__x__ != NUL
L) { GNUNET_free(__x__); } } while(0) | |
| | | | |
| /** | | /** | |
|
| * Wrapper around GNUNET_strdup. Makes a copy of the zero-terminated strin | | * @ingroup memory | |
| g | | * Wrapper around #GNUNET_xstrdup_. Makes a copy of the zero-terminated st | |
| | | ring | |
| * pointed to by a. | | * pointed to by a. | |
| * | | * | |
| * @param a pointer to a zero-terminated string | | * @param a pointer to a zero-terminated string | |
| * @return a copy of the string including zero-termination | | * @return a copy of the string including zero-termination | |
| */ | | */ | |
| #define GNUNET_strdup(a) GNUNET_xstrdup_(a,__FILE__,__LINE__) | | #define GNUNET_strdup(a) GNUNET_xstrdup_(a,__FILE__,__LINE__) | |
| | | | |
| /** | | /** | |
|
| * Wrapper around GNUNET_strndup. Makes a partial copy of the string | | * @ingroup memory | |
| | | * Wrapper around #GNUNET_xstrndup_. Makes a partial copy of the string | |
| * pointed to by a. | | * pointed to by a. | |
| * | | * | |
| * @param a pointer to a string | | * @param a pointer to a string | |
| * @param length of the string to duplicate | | * @param length of the string to duplicate | |
| * @return a partial copy of the string including zero-termination | | * @return a partial copy of the string including zero-termination | |
| */ | | */ | |
| #define GNUNET_strndup(a,length) GNUNET_xstrndup_(a,length,__FILE__,__LINE_
_) | | #define GNUNET_strndup(a,length) GNUNET_xstrndup_(a,length,__FILE__,__LINE_
_) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup memory | |
| * Grow a well-typed (!) array. This is a convenience | | * Grow a well-typed (!) array. This is a convenience | |
|
| * method to grow a vector <tt>arr</tt> of size <tt>size</tt> | | * method to grow a vector @a arr of size @a size | |
| * to the new (target) size <tt>tsize</tt>. | | * to the new (target) size @a tsize. | |
| * <p> | | * <p> | |
| * | | * | |
| * Example (simple, well-typed stack): | | * Example (simple, well-typed stack): | |
| * | | * | |
| * <pre> | | * <pre> | |
| * static struct foo * myVector = NULL; | | * static struct foo * myVector = NULL; | |
| * static int myVecLen = 0; | | * static int myVecLen = 0; | |
| * | | * | |
| * static void push(struct foo * elem) { | | * static void push(struct foo * elem) { | |
| * GNUNET_array_grow(myVector, myVecLen, myVecLen+1); | | * GNUNET_array_grow(myVector, myVecLen, myVecLen+1); | |
| | | | |
| skipping to change at line 759 | | skipping to change at line 773 | |
| * arr is important since size is the number of elements and | | * arr is important since size is the number of elements and | |
| * not the size in bytes | | * not the size in bytes | |
| * @param size the number of elements in the existing vector (number | | * @param size the number of elements in the existing vector (number | |
| * of elements to copy over) | | * of elements to copy over) | |
| * @param tsize the target size for the resulting vector, use 0 to | | * @param tsize the target size for the resulting vector, use 0 to | |
| * free the vector (then, arr will be NULL afterwards). | | * free the vector (then, arr will be NULL afterwards). | |
| */ | | */ | |
| #define GNUNET_array_grow(arr,size,tsize) GNUNET_xgrow_((void**)&arr, sizeo
f(arr[0]), &size, tsize, __FILE__, __LINE__) | | #define GNUNET_array_grow(arr,size,tsize) GNUNET_xgrow_((void**)&arr, sizeo
f(arr[0]), &size, tsize, __FILE__, __LINE__) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup memory | |
| * Append an element to a list (growing the | | * Append an element to a list (growing the | |
| * list by one). | | * list by one). | |
| */ | | */ | |
| #define GNUNET_array_append(arr,size,element) do { GNUNET_array_grow(arr,si
ze,size+1); arr[size-1] = element; } while(0) | | #define GNUNET_array_append(arr,size,element) do { GNUNET_array_grow(arr,si
ze,size+1); arr[size-1] = element; } while(0) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup memory | |
| * Like snprintf, just aborts if the buffer is of insufficient size. | | * Like snprintf, just aborts if the buffer is of insufficient size. | |
| * | | * | |
| * @param buf pointer to buffer that is written to | | * @param buf pointer to buffer that is written to | |
|
| * @param size number of bytes in buf | | * @param size number of bytes in @a buf | |
| * @param format format strings | | * @param format format strings | |
| * @param ... data for format string | | * @param ... data for format string | |
| * @return number of bytes written to buf or negative value on error | | * @return number of bytes written to buf or negative value on error | |
| */ | | */ | |
| int | | int | |
| GNUNET_snprintf (char *buf, size_t size, const char *format, ...); | | GNUNET_snprintf (char *buf, size_t size, const char *format, ...); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup memory | |
| * Like asprintf, just portable. | | * Like asprintf, just portable. | |
| * | | * | |
| * @param buf set to a buffer of sufficient size (allocated, caller must fr
ee) | | * @param buf set to a buffer of sufficient size (allocated, caller must fr
ee) | |
| * @param format format string (see printf, fprintf, etc.) | | * @param format format string (see printf, fprintf, etc.) | |
| * @param ... data for format string | | * @param ... data for format string | |
| * @return number of bytes in "*buf" excluding 0-termination | | * @return number of bytes in "*buf" excluding 0-termination | |
| */ | | */ | |
| int | | int | |
| GNUNET_asprintf (char **buf, const char *format, ...); | | GNUNET_asprintf (char **buf, const char *format, ...); | |
| | | | |
| /* ************** internal implementations, use macros above! *************
* */ | | /* ************** internal implementations, use macros above! *************
* */ | |
| | | | |
| /** | | /** | |
| * Allocate memory. Checks the return value, aborts if no more | | * Allocate memory. Checks the return value, aborts if no more | |
| * memory is available. Don't use GNUNET_xmalloc_ directly. Use the | | * memory is available. Don't use GNUNET_xmalloc_ directly. Use the | |
|
| * GNUNET_malloc macro. | | * #GNUNET_malloc macro. | |
| * The memory will be zero'ed out. | | * The memory will be zero'ed out. | |
| * | | * | |
| * @param size number of bytes to allocate | | * @param size number of bytes to allocate | |
| * @param filename where is this call being made (for debugging) | | * @param filename where is this call being made (for debugging) | |
| * @param linenumber line where this call is being made (for debugging) | | * @param linenumber line where this call is being made (for debugging) | |
| * @return allocated memory, never NULL | | * @return allocated memory, never NULL | |
| */ | | */ | |
| void * | | void * | |
| GNUNET_xmalloc_ (size_t size, const char *filename, int linenumber); | | GNUNET_xmalloc_ (size_t size, const char *filename, int linenumber); | |
| | | | |
| /** | | /** | |
| * Allocate and initialize memory. Checks the return value, aborts if no mo
re | | * Allocate and initialize memory. Checks the return value, aborts if no mo
re | |
| * memory is available. Don't use GNUNET_xmemdup_ directly. Use the | | * memory is available. Don't use GNUNET_xmemdup_ directly. Use the | |
|
| * GNUNET_memdup macro. | | * #GNUNET_memdup macro. | |
| * | | * | |
| * @param buf buffer to initialize from (must contain size bytes) | | * @param buf buffer to initialize from (must contain size bytes) | |
| * @param size number of bytes to allocate | | * @param size number of bytes to allocate | |
| * @param filename where is this call being made (for debugging) | | * @param filename where is this call being made (for debugging) | |
| * @param linenumber line where this call is being made (for debugging) | | * @param linenumber line where this call is being made (for debugging) | |
| * @return allocated memory, never NULL | | * @return allocated memory, never NULL | |
| */ | | */ | |
| void * | | void * | |
| GNUNET_xmemdup_ (const void *buf, size_t size, const char *filename, | | GNUNET_xmemdup_ (const void *buf, size_t size, const char *filename, | |
| int linenumber); | | int linenumber); | |
| | | | |
| /** | | /** | |
| * Allocate memory. This function does not check if the allocation | | * Allocate memory. This function does not check if the allocation | |
| * request is within reasonable bounds, allowing allocations larger | | * request is within reasonable bounds, allowing allocations larger | |
| * than 40 MB. If you don't expect the possibility of very large | | * than 40 MB. If you don't expect the possibility of very large | |
|
| * allocations, use GNUNET_malloc instead. The memory will be zero'ed | | * allocations, use #GNUNET_malloc instead. The memory will be zero'ed | |
| * out. | | * out. | |
| * | | * | |
| * @param size number of bytes to allocate | | * @param size number of bytes to allocate | |
| * @param filename where is this call being made (for debugging) | | * @param filename where is this call being made (for debugging) | |
| * @param linenumber line where this call is being made (for debugging) | | * @param linenumber line where this call is being made (for debugging) | |
| * @return pointer to size bytes of memory, NULL if we do not have enough m
emory | | * @return pointer to size bytes of memory, NULL if we do not have enough m
emory | |
| */ | | */ | |
| void * | | void * | |
| GNUNET_xmalloc_unchecked_ (size_t size, const char *filename, int linenumbe
r); | | GNUNET_xmalloc_unchecked_ (size_t size, const char *filename, int linenumbe
r); | |
| | | | |
| /** | | /** | |
| * Reallocate memory. Checks the return value, aborts if no more | | * Reallocate memory. Checks the return value, aborts if no more | |
| * memory is available. | | * memory is available. | |
| */ | | */ | |
| void * | | void * | |
| GNUNET_xrealloc_ (void *ptr, size_t n, const char *filename, int linenumber
); | | GNUNET_xrealloc_ (void *ptr, size_t n, const char *filename, int linenumber
); | |
| | | | |
| /** | | /** | |
| * Free memory. Merely a wrapper for the case that we | | * Free memory. Merely a wrapper for the case that we | |
| * want to keep track of allocations. Don't use GNUNET_xfree_ | | * want to keep track of allocations. Don't use GNUNET_xfree_ | |
|
| * directly. Use the GNUNET_free macro. | | * directly. Use the #GNUNET_free macro. | |
| * | | * | |
| * @param ptr pointer to memory to free | | * @param ptr pointer to memory to free | |
| * @param filename where is this call being made (for debugging) | | * @param filename where is this call being made (for debugging) | |
| * @param linenumber line where this call is being made (for debugging) | | * @param linenumber line where this call is being made (for debugging) | |
| */ | | */ | |
| void | | void | |
| GNUNET_xfree_ (void *ptr, const char *filename, int linenumber); | | GNUNET_xfree_ (void *ptr, const char *filename, int linenumber); | |
| | | | |
| /** | | /** | |
|
| * Dup a string. Don't call GNUNET_xstrdup_ directly. Use the GNUNET_strdup
macro. | | * Dup a string. Don't call GNUNET_xstrdup_ directly. Use the #GNUNET_strdu
p macro. | |
| * @param str string to duplicate | | * @param str string to duplicate | |
| * @param filename where is this call being made (for debugging) | | * @param filename where is this call being made (for debugging) | |
| * @param linenumber line where this call is being made (for debugging) | | * @param linenumber line where this call is being made (for debugging) | |
| * @return the duplicated string | | * @return the duplicated string | |
| */ | | */ | |
| char * | | char * | |
| GNUNET_xstrdup_ (const char *str, const char *filename, int linenumber); | | GNUNET_xstrdup_ (const char *str, const char *filename, int linenumber); | |
| | | | |
| /** | | /** | |
|
| * Dup partially a string. Don't call GNUNET_xstrndup_ directly. Use the GN
UNET_strndup macro. | | * Dup partially a string. Don't call GNUNET_xstrndup_ directly. Use the #G
NUNET_strndup macro. | |
| * | | * | |
| * @param str string to duplicate | | * @param str string to duplicate | |
| * @param len length of the string to duplicate | | * @param len length of the string to duplicate | |
| * @param filename where is this call being made (for debugging) | | * @param filename where is this call being made (for debugging) | |
| * @param linenumber line where this call is being made (for debugging) | | * @param linenumber line where this call is being made (for debugging) | |
| * @return the duplicated string | | * @return the duplicated string | |
| */ | | */ | |
| char * | | char * | |
| GNUNET_xstrndup_ (const char *str, size_t len, const char *filename, | | GNUNET_xstrndup_ (const char *str, size_t len, const char *filename, | |
| int linenumber); | | int linenumber); | |
| | | | |
| /** | | /** | |
| * Grow an array, the new elements are zeroed out. | | * Grow an array, the new elements are zeroed out. | |
| * Grows old by (*oldCount-newCount)*elementSize | | * Grows old by (*oldCount-newCount)*elementSize | |
| * bytes and sets *oldCount to newCount. | | * bytes and sets *oldCount to newCount. | |
| * | | * | |
|
| * Don't call GNUNET_xgrow_ directly. Use the GNUNET_array_grow macro. | | * Don't call GNUNET_xgrow_ directly. Use the #GNUNET_array_grow macro. | |
| * | | * | |
| * @param old address of the pointer to the array | | * @param old address of the pointer to the array | |
| * *old may be NULL | | * *old may be NULL | |
| * @param elementSize the size of the elements of the array | | * @param elementSize the size of the elements of the array | |
| * @param oldCount address of the number of elements in the *old array | | * @param oldCount address of the number of elements in the *old array | |
| * @param newCount number of elements in the new array, may be 0 (then *old
will be NULL afterwards) | | * @param newCount number of elements in the new array, may be 0 (then *old
will be NULL afterwards) | |
| * @param filename where is this call being made (for debugging) | | * @param filename where is this call being made (for debugging) | |
| * @param linenumber line where this call is being made (for debugging) | | * @param linenumber line where this call is being made (for debugging) | |
| */ | | */ | |
| void | | void | |
| GNUNET_xgrow_ (void **old, size_t elementSize, unsigned int *oldCount, | | GNUNET_xgrow_ (void **old, size_t elementSize, unsigned int *oldCount, | |
| unsigned int newCount, const char *filename, int linenumber)
; | | unsigned int newCount, const char *filename, int linenumber)
; | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup memory | |
| * Create a copy of the given message. | | * Create a copy of the given message. | |
| * | | * | |
| * @param msg message to copy | | * @param msg message to copy | |
| * @return duplicate of the message | | * @return duplicate of the message | |
| */ | | */ | |
| struct GNUNET_MessageHeader * | | struct GNUNET_MessageHeader * | |
| GNUNET_copy_message (const struct GNUNET_MessageHeader *msg); | | GNUNET_copy_message (const struct GNUNET_MessageHeader *msg); | |
| | | | |
| #if __STDC_VERSION__ < 199901L | | #if __STDC_VERSION__ < 199901L | |
| #if __GNUC__ >= 2 | | #if __GNUC__ >= 2 | |
| | | | |
End of changes. 65 change blocks. |
| 81 lines changed or deleted | | 98 lines changed or added | |
|
| gnunet_config.h | | gnunet_config.h | |
| | | | |
| skipping to change at line 22 | | skipping to change at line 22 | |
| /* This is an Apple Darwin system */ | | /* This is an Apple Darwin system */ | |
| /* #undef DARWIN */ | | /* #undef DARWIN */ | |
| | | | |
| /* enable expensive heap statistics */ | | /* enable expensive heap statistics */ | |
| #define ENABLE_HEAP_STATISTICS 0 | | #define ENABLE_HEAP_STATISTICS 0 | |
| | | | |
| /* Define to 1 if translation of program messages to the user's native | | /* Define to 1 if translation of program messages to the user's native | |
| language is requested. */ | | language is requested. */ | |
| #define ENABLE_NLS 1 | | #define ENABLE_NLS 1 | |
| | | | |
|
| | | /* have NSE send timestamp information to testbed logger */ | |
| | | #define ENABLE_NSE_HISTOGRAM 0 | |
| | | | |
| /* 1 if freed memory should be poisoned, 0 otherwise */ | | /* 1 if freed memory should be poisoned, 0 otherwise */ | |
| #define ENABLE_POISONING 0 | | #define ENABLE_POISONING 0 | |
| | | | |
|
| | | /* Build with support for SuperMUC */ | |
| | | #define ENABLE_SUPERMUC 0 | |
| | | | |
| /* enable workarounds used on Windows (only useful for test cases) */ | | /* enable workarounds used on Windows (only useful for test cases) */ | |
| #define ENABLE_WINDOWS_WORKAROUNDS 0 | | #define ENABLE_WINDOWS_WORKAROUNDS 0 | |
| | | | |
| /* Build a Mac OS X Framework */ | | /* Build a Mac OS X Framework */ | |
| /* #undef FRAMEWORK_BUILD */ | | /* #undef FRAMEWORK_BUILD */ | |
| | | | |
| /* This is a FreeBSD system */ | | /* This is a FreeBSD system */ | |
| /* #undef FREEBSD */ | | /* #undef FREEBSD */ | |
| | | | |
| /* This is a GNU system */ | | /* This is a GNU system */ | |
| | | | |
| skipping to change at line 48 | | skipping to change at line 54 | |
| /* #undef GNUNET_CULL_LOGGING */ | | /* #undef GNUNET_CULL_LOGGING */ | |
| | | | |
| /* This should be the default choice for the name of the first network | | /* This should be the default choice for the name of the first network | |
| interface */ | | interface */ | |
| #define GNUNET_DEFAULT_INTERFACE "eth0" | | #define GNUNET_DEFAULT_INTERFACE "eth0" | |
| | | | |
| /* 1 if extra logging is enabled, 2 for very verbose extra logging, 0 | | /* 1 if extra logging is enabled, 2 for very verbose extra logging, 0 | |
| otherwise */ | | otherwise */ | |
| #define GNUNET_EXTRA_LOGGING GNUNET_NO | | #define GNUNET_EXTRA_LOGGING GNUNET_NO | |
| | | | |
|
| /* Define to 1 if you have the `argz_add' function. */ | | | |
| #define HAVE_ARGZ_ADD 1 | | | |
| | | | |
| /* Define to 1 if you have the `argz_append' function. */ | | | |
| #define HAVE_ARGZ_APPEND 1 | | | |
| | | | |
| /* Define to 1 if you have the `argz_count' function. */ | | | |
| #define HAVE_ARGZ_COUNT 1 | | | |
| | | | |
| /* Define to 1 if you have the `argz_create_sep' function. */ | | | |
| #define HAVE_ARGZ_CREATE_SEP 1 | | | |
| | | | |
| /* Define to 1 if you have the <argz.h> header file. */ | | /* Define to 1 if you have the <argz.h> header file. */ | |
| #define HAVE_ARGZ_H 1 | | #define HAVE_ARGZ_H 1 | |
| | | | |
|
| /* Define to 1 if you have the `argz_insert' function. */ | | | |
| #define HAVE_ARGZ_INSERT 1 | | | |
| | | | |
| /* Define to 1 if you have the `argz_next' function. */ | | | |
| #define HAVE_ARGZ_NEXT 1 | | | |
| | | | |
| /* Define to 1 if you have the `argz_stringify' function. */ | | | |
| #define HAVE_ARGZ_STRINGIFY 1 | | | |
| | | | |
| /* Define to 1 if you have the <arpa/inet.h> header file. */ | | /* Define to 1 if you have the <arpa/inet.h> header file. */ | |
| #define HAVE_ARPA_INET_H 1 | | #define HAVE_ARPA_INET_H 1 | |
| | | | |
| /* Define to 1 if you have the `atoll' function. */ | | /* Define to 1 if you have the `atoll' function. */ | |
| #define HAVE_ATOLL 1 | | #define HAVE_ATOLL 1 | |
| | | | |
| /* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the | | /* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the | |
| CoreFoundation framework. */ | | CoreFoundation framework. */ | |
| /* #undef HAVE_CFLOCALECOPYCURRENT */ | | /* #undef HAVE_CFLOCALECOPYCURRENT */ | |
| | | | |
| /* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue i
n | | /* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue i
n | |
| the CoreFoundation framework. */ | | the CoreFoundation framework. */ | |
| /* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */ | | /* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */ | |
| | | | |
| /* Define to 1 if your system has a working `chown' function. */ | | /* Define to 1 if your system has a working `chown' function. */ | |
| #define HAVE_CHOWN 1 | | #define HAVE_CHOWN 1 | |
| | | | |
|
| /* Define to 1 if you have the `closedir' function. */ | | | |
| #define HAVE_CLOSEDIR 1 | | | |
| | | | |
| /* Define to 1 if you have the <ctype.h> header file. */ | | /* Define to 1 if you have the <ctype.h> header file. */ | |
| #define HAVE_CTYPE_H 1 | | #define HAVE_CTYPE_H 1 | |
| | | | |
| /* Define if the GNU dcgettext() function is already present or preinstalle
d. | | /* Define if the GNU dcgettext() function is already present or preinstalle
d. | |
| */ | | */ | |
| #define HAVE_DCGETTEXT 1 | | #define HAVE_DCGETTEXT 1 | |
| | | | |
|
| /* Define to 1 if you have the declaration of `cygwin_conv_path', and to 0 | | /* Define to 1 if you have the declaration of `gcry_mpi_set_opaque_copy', a | |
| if | | nd | |
| you don't. */ | | to 0 if you don't. */ | |
| /* #undef HAVE_DECL_CYGWIN_CONV_PATH */ | | #define HAVE_DECL_GCRY_MPI_SET_OPAQUE_COPY 1 | |
| | | | |
| /* Define to 1 if you have the declaration of `gcry_mpi_lshift', and to 0 i | | /* Define to 1 if you have the declaration of `_stati64', and to 0 if you | |
| f | | don't. */ | |
| you don't. */ | | #define HAVE_DECL__STATI64 0 | |
| #define HAVE_DECL_GCRY_MPI_LSHIFT 1 | | | |
| | | | |
| /* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'
. | | /* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'
. | |
| */ | | */ | |
| #define HAVE_DIRENT_H 1 | | #define HAVE_DIRENT_H 1 | |
| | | | |
|
| /* Define if you have the GNU dld library. */ | | | |
| /* #undef HAVE_DLD */ | | | |
| | | | |
| /* Define to 1 if you have the <dld.h> header file. */ | | | |
| /* #undef HAVE_DLD_H */ | | | |
| | | | |
| /* Define to 1 if you have the `dlerror' function. */ | | | |
| #define HAVE_DLERROR 1 | | | |
| | | | |
| /* Define to 1 if you have the <dlfcn.h> header file. */ | | /* Define to 1 if you have the <dlfcn.h> header file. */ | |
| #define HAVE_DLFCN_H 1 | | #define HAVE_DLFCN_H 1 | |
| | | | |
|
| /* Define to 1 if you have the <dl.h> header file. */ | | | |
| /* #undef HAVE_DL_H */ | | | |
| | | | |
| /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ | | /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ | |
| /* #undef HAVE_DOPRNT */ | | /* #undef HAVE_DOPRNT */ | |
| | | | |
|
| /* Define if you have the _dyld_func_lookup function. */ | | | |
| /* #undef HAVE_DYLD */ | | | |
| | | | |
| /* Define to 1 if you have the <endian.h> header file. */ | | /* Define to 1 if you have the <endian.h> header file. */ | |
| #define HAVE_ENDIAN_H 1 | | #define HAVE_ENDIAN_H 1 | |
| | | | |
| /* Define to 1 if you have the <errno.h> header file. */ | | /* Define to 1 if you have the <errno.h> header file. */ | |
| #define HAVE_ERRNO_H 1 | | #define HAVE_ERRNO_H 1 | |
| | | | |
|
| /* Define to 1 if the system has the type `error_t'. */ | | | |
| #define HAVE_ERROR_T 1 | | | |
| | | | |
| /* Define to 1 if you have the <execinfo.h> header file. */ | | /* Define to 1 if you have the <execinfo.h> header file. */ | |
| #define HAVE_EXECINFO_H 1 | | #define HAVE_EXECINFO_H 1 | |
| | | | |
| /* Define to 1 if you have the <extractor.h> header file. */ | | /* Define to 1 if you have the <extractor.h> header file. */ | |
| #define HAVE_EXTRACTOR_H 1 | | #define HAVE_EXTRACTOR_H 1 | |
| | | | |
| /* Define to 1 if you have the <fcntl.h> header file. */ | | /* Define to 1 if you have the <fcntl.h> header file. */ | |
| #define HAVE_FCNTL_H 1 | | #define HAVE_FCNTL_H 1 | |
| | | | |
| /* Define to 1 if you have the `fork' function. */ | | /* Define to 1 if you have the `fork' function. */ | |
| | | | |
| skipping to change at line 192 | | skipping to change at line 156 | |
| | | | |
| /* Define to 1 if you have the `getpeereid' function. */ | | /* Define to 1 if you have the `getpeereid' function. */ | |
| /* #undef HAVE_GETPEEREID */ | | /* #undef HAVE_GETPEEREID */ | |
| | | | |
| /* Define to 1 if you have the `getpeerucred' function. */ | | /* Define to 1 if you have the `getpeerucred' function. */ | |
| /* #undef HAVE_GETPEERUCRED */ | | /* #undef HAVE_GETPEERUCRED */ | |
| | | | |
| /* Define to 1 if you have the `getresgid' function. */ | | /* Define to 1 if you have the `getresgid' function. */ | |
| #define HAVE_GETRESGID 1 | | #define HAVE_GETRESGID 1 | |
| | | | |
|
| | | /* Define to 1 if you have the `getrlimit' function. */ | |
| | | #define HAVE_GETRLIMIT 1 | |
| | | | |
| /* Define to 1 if you have the `getrusage' function. */ | | /* Define to 1 if you have the `getrusage' function. */ | |
| #define HAVE_GETRUSAGE 1 | | #define HAVE_GETRUSAGE 1 | |
| | | | |
| /* Define if the GNU gettext() function is already present or preinstalled.
*/ | | /* Define if the GNU gettext() function is already present or preinstalled.
*/ | |
| #define HAVE_GETTEXT 1 | | #define HAVE_GETTEXT 1 | |
| | | | |
|
| /* Have glib2 */ | | | |
| #define HAVE_GLIB2 1 | | | |
| | | | |
| /* Define to 1 if you have the <glpk.h> header file. */ | | /* Define to 1 if you have the <glpk.h> header file. */ | |
| #define HAVE_GLPK_H 1 | | #define HAVE_GLPK_H 1 | |
| | | | |
| /* Define to 1 if `presolve' is a member of `glp_iocp'. */ | | /* Define to 1 if `presolve' is a member of `glp_iocp'. */ | |
| #define HAVE_GLP_IOCP_PRESOLVE 1 | | #define HAVE_GLP_IOCP_PRESOLVE 1 | |
| | | | |
|
| /* We have gnutls */ | | /* We have GnuTLS */ | |
| #define HAVE_GNUTLS true | | #define HAVE_GNUTLS true | |
| | | | |
| /* Define to 1 if you have the <gnutls/abstract.h> header file. */ | | /* Define to 1 if you have the <gnutls/abstract.h> header file. */ | |
| #define HAVE_GNUTLS_ABSTRACT_H 1 | | #define HAVE_GNUTLS_ABSTRACT_H 1 | |
| | | | |
|
| | | /* We have GnuTLS with DANE support */ | |
| | | #define HAVE_GNUTLS_DANE 0 | |
| | | | |
| | | /* Define to 1 if you have the <gnutls/dane.h> header file. */ | |
| | | /* #undef HAVE_GNUTLS_DANE_H */ | |
| | | | |
| /* Define if you have the iconv() function. */ | | /* Define if you have the iconv() function. */ | |
| #define HAVE_ICONV 1 | | #define HAVE_ICONV 1 | |
| | | | |
| /* Define to 1 if you have the <ifaddrs.h> header file. */ | | /* Define to 1 if you have the <ifaddrs.h> header file. */ | |
| #define HAVE_IFADDRS_H 1 | | #define HAVE_IFADDRS_H 1 | |
| | | | |
| /* Define this if inet_ntoa() is available */ | | /* Define this if inet_ntoa() is available */ | |
| /* #undef HAVE_INET_NTOA */ | | /* #undef HAVE_INET_NTOA */ | |
| | | | |
| /* Define to 1 if you have the `initgroups' function. */ | | /* Define to 1 if you have the `initgroups' function. */ | |
| | | | |
| skipping to change at line 237 | | skipping to change at line 207 | |
| | | | |
| /* Define to 1 if you have the <kstat.h> header file. */ | | /* Define to 1 if you have the <kstat.h> header file. */ | |
| /* #undef HAVE_KSTAT_H */ | | /* #undef HAVE_KSTAT_H */ | |
| | | | |
| /* Define to 1 if you have the <kvm.h> header file. */ | | /* Define to 1 if you have the <kvm.h> header file. */ | |
| /* #undef HAVE_KVM_H */ | | /* #undef HAVE_KVM_H */ | |
| | | | |
| /* Define to 1 if you have the <langinfo.h> header file. */ | | /* Define to 1 if you have the <langinfo.h> header file. */ | |
| #define HAVE_LANGINFO_H 1 | | #define HAVE_LANGINFO_H 1 | |
| | | | |
|
| /* Have libcurl */ | | /* Have bluetooth library */ | |
| #define HAVE_LIBCURL 1 | | #define HAVE_LIBBLUETOOTH 1 | |
| | | | |
| /* Define if you have the libdl library or equivalent. */ | | | |
| #define HAVE_LIBDL 1 | | | |
| | | | |
| /* Define if libdlloader will be built on this platform */ | | | |
| #define HAVE_LIBDLLOADER 1 | | | |
| | | | |
| /* Have GLPK */ | | /* Have GLPK */ | |
| #define HAVE_LIBGLPK 1 | | #define HAVE_LIBGLPK 1 | |
| | | | |
|
| /* Have libgtop */ | | /* Have libgnurl */ | |
| #define HAVE_LIBGTOP 1 | | /* #undef HAVE_LIBGNURL */ | |
| | | | |
| /* Define to 1 if you have the `intl' library (-lintl). */ | | /* Define to 1 if you have the `intl' library (-lintl). */ | |
| /* #undef HAVE_LIBINTL */ | | /* #undef HAVE_LIBINTL */ | |
| | | | |
| /* Define to 1 if you have the <libintl.h> header file. */ | | /* Define to 1 if you have the <libintl.h> header file. */ | |
| #define HAVE_LIBINTL_H 1 | | #define HAVE_LIBINTL_H 1 | |
| | | | |
| /* Define to 1 if you have the `kstat' library (-lkstat). */ | | /* Define to 1 if you have the `kstat' library (-lkstat). */ | |
| /* #undef HAVE_LIBKSTAT */ | | /* #undef HAVE_LIBKSTAT */ | |
| | | | |
| | | | |
| skipping to change at line 279 | | skipping to change at line 243 | |
| | | | |
| /* Define to 1 if you have the `rt' library (-lrt). */ | | /* Define to 1 if you have the `rt' library (-lrt). */ | |
| /* #undef HAVE_LIBRT */ | | /* #undef HAVE_LIBRT */ | |
| | | | |
| /* Define to 1 if you have the `socket' library (-lsocket). */ | | /* Define to 1 if you have the `socket' library (-lsocket). */ | |
| /* #undef HAVE_LIBSOCKET */ | | /* #undef HAVE_LIBSOCKET */ | |
| | | | |
| /* Define if you have the unistring library. */ | | /* Define if you have the unistring library. */ | |
| #define HAVE_LIBUNISTRING 1 | | #define HAVE_LIBUNISTRING 1 | |
| | | | |
|
| /* Define to 1 if you have the `z' library (-lz). */ | | | |
| #define HAVE_LIBZ 1 | | | |
| | | | |
| /* Define to 1 if you have the <limits.h> header file. */ | | /* Define to 1 if you have the <limits.h> header file. */ | |
| #define HAVE_LIMITS_H 1 | | #define HAVE_LIMITS_H 1 | |
| | | | |
|
| /* Define to 1 if you have the <llapi.h> header file. */ | | | |
| /* #undef HAVE_LLAPI_H */ | | | |
| | | | |
| /* Define to 1 if you have the <locale.h> header file. */ | | /* Define to 1 if you have the <locale.h> header file. */ | |
| #define HAVE_LOCALE_H 1 | | #define HAVE_LOCALE_H 1 | |
| | | | |
|
| /* Define this if a modern libltdl is already installed */ | | /* Define to 1 if you have the <ltdl.h> header file. */ | |
| #define HAVE_LTDL 1 | | #define HAVE_LTDL_H 1 | |
| | | | |
| /* Define to 1 if you have the <mach/mach.h> header file. */ | | /* Define to 1 if you have the <mach/mach.h> header file. */ | |
| /* #undef HAVE_MACH_MACH_H */ | | /* #undef HAVE_MACH_MACH_H */ | |
| | | | |
|
| /* Define to 1 if you have the <mach-o/dyld.h> header file. */ | | | |
| /* #undef HAVE_MACH_O_DYLD_H */ | | | |
| | | | |
| /* Define to 1 if you have the `mallinfo' function. */ | | /* Define to 1 if you have the `mallinfo' function. */ | |
| #define HAVE_MALLINFO 1 | | #define HAVE_MALLINFO 1 | |
| | | | |
| /* Define to 1 if you have the <malloc.h> header file. */ | | /* Define to 1 if you have the <malloc.h> header file. */ | |
| #define HAVE_MALLOC_H 1 | | #define HAVE_MALLOC_H 1 | |
| | | | |
| /* Define to 1 if you have the <malloc/malloc.h> header file. */ | | /* Define to 1 if you have the <malloc/malloc.h> header file. */ | |
| /* #undef HAVE_MALLOC_MALLOC_H */ | | /* #undef HAVE_MALLOC_MALLOC_H */ | |
| | | | |
| /* Define to 1 if you have the `malloc_size' function. */ | | /* Define to 1 if you have the `malloc_size' function. */ | |
| | | | |
| skipping to change at line 322 | | skipping to change at line 277 | |
| /* Define to 1 if you have the `malloc_usable_size' function. */ | | /* Define to 1 if you have the `malloc_usable_size' function. */ | |
| #define HAVE_MALLOC_USABLE_SIZE 1 | | #define HAVE_MALLOC_USABLE_SIZE 1 | |
| | | | |
| /* Define to 1 if you have the <math.h> header file. */ | | /* Define to 1 if you have the <math.h> header file. */ | |
| #define HAVE_MATH_H 1 | | #define HAVE_MATH_H 1 | |
| | | | |
| /* Define to 1 if you have the <memory.h> header file. */ | | /* Define to 1 if you have the <memory.h> header file. */ | |
| #define HAVE_MEMORY_H 1 | | #define HAVE_MEMORY_H 1 | |
| | | | |
| /* We have libmicrohttpd */ | | /* We have libmicrohttpd */ | |
|
| #define HAVE_MHD 1 | | #define HAVE_MHD 0 | |
| | | | |
| /* Define to 1 if you have the <microhttpd.h> header file. */ | | /* Define to 1 if you have the <microhttpd.h> header file. */ | |
| #define HAVE_MICROHTTPD_H 1 | | #define HAVE_MICROHTTPD_H 1 | |
| | | | |
| /* Define to 1 if you have the `mremap' function. */ | | /* Define to 1 if you have the `mremap' function. */ | |
| #define HAVE_MREMAP 1 | | #define HAVE_MREMAP 1 | |
| | | | |
| /* Define to 1 if you have the <mysql/mysql.h> header file. */ | | /* Define to 1 if you have the <mysql/mysql.h> header file. */ | |
| #define HAVE_MYSQL_MYSQL_H 1 | | #define HAVE_MYSQL_MYSQL_H 1 | |
| | | | |
| | | | |
| skipping to change at line 345 | | skipping to change at line 300 | |
| | | | |
| /* Define to 1 if you have the <netdb.h> header file. */ | | /* Define to 1 if you have the <netdb.h> header file. */ | |
| #define HAVE_NETDB_H 1 | | #define HAVE_NETDB_H 1 | |
| | | | |
| /* Define to 1 if you have the <netinet/in.h> header file. */ | | /* Define to 1 if you have the <netinet/in.h> header file. */ | |
| #define HAVE_NETINET_IN_H 1 | | #define HAVE_NETINET_IN_H 1 | |
| | | | |
| /* Define to 1 if you have the <netinet/in_systm.h> header file. */ | | /* Define to 1 if you have the <netinet/in_systm.h> header file. */ | |
| #define HAVE_NETINET_IN_SYSTM_H 1 | | #define HAVE_NETINET_IN_SYSTM_H 1 | |
| | | | |
|
| | | /* Define to 1 if you have the <netinet/ip.h> header file. */ | |
| | | #define HAVE_NETINET_IP_H 1 | |
| | | | |
| /* Define to 1 if you have the <nss.h> header file. */ | | /* Define to 1 if you have the <nss.h> header file. */ | |
| #define HAVE_NSS_H 1 | | #define HAVE_NSS_H 1 | |
| | | | |
| /* Define to 1 if the system has the type `off_t'. */ | | /* Define to 1 if the system has the type `off_t'. */ | |
| #define HAVE_OFF_T 1 | | #define HAVE_OFF_T 1 | |
| | | | |
|
| /* Define to 1 if you have the `opendir' function. */ | | /* Have libopus library */ | |
| #define HAVE_OPENDIR 1 | | #define HAVE_OPUS 1 | |
| | | | |
| /* Define to 1 if you have the <postgresql/libpq-fe.h> header file. */ | | /* Define to 1 if you have the <postgresql/libpq-fe.h> header file. */ | |
| /* #undef HAVE_POSTGRESQL_LIBPQ_FE_H */ | | /* #undef HAVE_POSTGRESQL_LIBPQ_FE_H */ | |
| | | | |
|
| /* Define if libtool can extract symbol lists from object files. */ | | /* Have libpulse(audio) library */ | |
| #define HAVE_PRELOADED_SYMBOLS 1 | | #define HAVE_PULSE 1 | |
| | | | |
|
| /* Define to 1 if you have the `readdir' function. */ | | /* Define to 1 if you have the `random' function. */ | |
| #define HAVE_READDIR 1 | | #define HAVE_RANDOM 1 | |
| | | | |
| /* Define this if select() is available */ | | /* Define this if select() is available */ | |
| /* #undef HAVE_SELECT */ | | /* #undef HAVE_SELECT */ | |
| | | | |
| /* Define to 1 if you have the `setresuid' function. */ | | /* Define to 1 if you have the `setresuid' function. */ | |
| #define HAVE_SETRESUID 1 | | #define HAVE_SETRESUID 1 | |
| | | | |
| /* Define to 1 if you have the `setrlimit' function. */ | | /* Define to 1 if you have the `setrlimit' function. */ | |
| #define HAVE_SETRLIMIT 1 | | #define HAVE_SETRLIMIT 1 | |
| | | | |
|
| /* Define if you have the shl_load function. */ | | | |
| /* #undef HAVE_SHL_LOAD */ | | | |
| | | | |
| /* Define to 1 if you have the <signal.h> header file. */ | | /* Define to 1 if you have the <signal.h> header file. */ | |
| #define HAVE_SIGNAL_H 1 | | #define HAVE_SIGNAL_H 1 | |
| | | | |
| /* Define to 1 if the system has the type `sigset_t'. */ | | /* Define to 1 if the system has the type `sigset_t'. */ | |
| #define HAVE_SIGSET_T 1 | | #define HAVE_SIGSET_T 1 | |
| | | | |
| /* Define to 1 if the system has the type `size_t'. */ | | /* Define to 1 if the system has the type `size_t'. */ | |
| #define HAVE_SIZE_T 1 | | #define HAVE_SIZE_T 1 | |
| | | | |
| /* Do we have sockaddr_in.sin_len? */ | | /* Do we have sockaddr_in.sin_len? */ | |
| | | | |
| skipping to change at line 396 | | skipping to change at line 351 | |
| | | | |
| /* Define this if socket() is available */ | | /* Define this if socket() is available */ | |
| /* #undef HAVE_SOCKET */ | | /* #undef HAVE_SOCKET */ | |
| | | | |
| /* Define to 1 if you have the <sockLib.h> header file. */ | | /* Define to 1 if you have the <sockLib.h> header file. */ | |
| /* #undef HAVE_SOCKLIB_H */ | | /* #undef HAVE_SOCKLIB_H */ | |
| | | | |
| /* Define to 1 if you have the <sqlite3.h> header file. */ | | /* Define to 1 if you have the <sqlite3.h> header file. */ | |
| #define HAVE_SQLITE3_H 1 | | #define HAVE_SQLITE3_H 1 | |
| | | | |
|
| | | /* Define to 1 if you have the `srandom' function. */ | |
| | | #define HAVE_SRANDOM 1 | |
| | | | |
| | | /* Define to 1 if you have the `stat' function. */ | |
| | | #define HAVE_STAT 1 | |
| | | | |
| /* Define to 1 if you have the `stat64' function. */ | | /* Define to 1 if you have the `stat64' function. */ | |
| #define HAVE_STAT64 1 | | #define HAVE_STAT64 1 | |
| | | | |
|
| | | /* Define to 1 if you have the `statfs' function. */ | |
| | | #define HAVE_STATFS 1 | |
| | | | |
| | | /* Define to 1 if you have the `statvfs' function. */ | |
| | | #define HAVE_STATVFS 1 | |
| | | | |
| /* Define to 1 if `stat' has the bug that it succeeds when given the | | /* Define to 1 if `stat' has the bug that it succeeds when given the | |
| zero-length file name argument. */ | | zero-length file name argument. */ | |
| /* #undef HAVE_STAT_EMPTY_STRING_BUG */ | | /* #undef HAVE_STAT_EMPTY_STRING_BUG */ | |
| | | | |
| /* Define to 1 if you have the <stdarg.h> header file. */ | | /* Define to 1 if you have the <stdarg.h> header file. */ | |
| #define HAVE_STDARG_H 1 | | #define HAVE_STDARG_H 1 | |
| | | | |
| /* Define to 1 if stdbool.h conforms to C99. */ | | /* Define to 1 if stdbool.h conforms to C99. */ | |
| #define HAVE_STDBOOL_H 1 | | #define HAVE_STDBOOL_H 1 | |
| | | | |
| | | | |
| skipping to change at line 430 | | skipping to change at line 397 | |
| | | | |
| /* Define to 1 if you have the `strftime' function. */ | | /* Define to 1 if you have the `strftime' function. */ | |
| #define HAVE_STRFTIME 1 | | #define HAVE_STRFTIME 1 | |
| | | | |
| /* Define to 1 if you have the <strings.h> header file. */ | | /* Define to 1 if you have the <strings.h> header file. */ | |
| #define HAVE_STRINGS_H 1 | | #define HAVE_STRINGS_H 1 | |
| | | | |
| /* Define to 1 if you have the <string.h> header file. */ | | /* Define to 1 if you have the <string.h> header file. */ | |
| #define HAVE_STRING_H 1 | | #define HAVE_STRING_H 1 | |
| | | | |
|
| /* Define to 1 if you have the `strlcat' function. */ | | | |
| /* #undef HAVE_STRLCAT */ | | | |
| | | | |
| /* Define to 1 if you have the `strlcpy' function. */ | | | |
| /* #undef HAVE_STRLCPY */ | | | |
| | | | |
| /* Define to 1 if you have the `strndup' function. */ | | /* Define to 1 if you have the `strndup' function. */ | |
| #define HAVE_STRNDUP 1 | | #define HAVE_STRNDUP 1 | |
| | | | |
| /* Define to 1 if you have the `strnlen' function. */ | | /* Define to 1 if you have the `strnlen' function. */ | |
| #define HAVE_STRNLEN 1 | | #define HAVE_STRNLEN 1 | |
| | | | |
| /* Define to 1 if you have the `sysconf' function. */ | | /* Define to 1 if you have the `sysconf' function. */ | |
| #define HAVE_SYSCONF 1 | | #define HAVE_SYSCONF 1 | |
| | | | |
| /* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR
'. | | /* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR
'. | |
| */ | | */ | |
| /* #undef HAVE_SYS_DIR_H */ | | /* #undef HAVE_SYS_DIR_H */ | |
| | | | |
|
| /* Define to 1 if you have the <sys/dl.h> header file. */ | | | |
| /* #undef HAVE_SYS_DL_H */ | | | |
| | | | |
| /* Define to 1 if you have the <sys/endian.h> header file. */ | | /* Define to 1 if you have the <sys/endian.h> header file. */ | |
| /* #undef HAVE_SYS_ENDIAN_H */ | | /* #undef HAVE_SYS_ENDIAN_H */ | |
| | | | |
| /* Define to 1 if you have the <sys/file.h> header file. */ | | /* Define to 1 if you have the <sys/file.h> header file. */ | |
| #define HAVE_SYS_FILE_H 1 | | #define HAVE_SYS_FILE_H 1 | |
| | | | |
| /* Define to 1 if you have the <sys/ioctl.h> header file. */ | | /* Define to 1 if you have the <sys/ioctl.h> header file. */ | |
| #define HAVE_SYS_IOCTL_H 1 | | #define HAVE_SYS_IOCTL_H 1 | |
| | | | |
| /* Define to 1 if you have the <sys/mman.h> header file. */ | | /* Define to 1 if you have the <sys/mman.h> header file. */ | |
| | | | |
| skipping to change at line 513 | | skipping to change at line 471 | |
| | | | |
| /* Define to 1 if you have the <sys/vfs.h> header file. */ | | /* Define to 1 if you have the <sys/vfs.h> header file. */ | |
| #define HAVE_SYS_VFS_H 1 | | #define HAVE_SYS_VFS_H 1 | |
| | | | |
| /* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */ | | /* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */ | |
| #define HAVE_SYS_WAIT_H 1 | | #define HAVE_SYS_WAIT_H 1 | |
| | | | |
| /* Define to 1 if you have the <terminos.h> header file. */ | | /* Define to 1 if you have the <terminos.h> header file. */ | |
| /* #undef HAVE_TERMINOS_H */ | | /* #undef HAVE_TERMINOS_H */ | |
| | | | |
|
| | | /* Define if struct tm has the tm_gmtoff member. */ | |
| | | #define HAVE_TM_GMTOFF 1 | |
| | | | |
| /* Define to 1 if you have the <ucred.h> header file. */ | | /* Define to 1 if you have the <ucred.h> header file. */ | |
| /* #undef HAVE_UCRED_H */ | | /* #undef HAVE_UCRED_H */ | |
| | | | |
| /* We can access-64 bit values that are only 32-bit aligned */ | | /* We can access-64 bit values that are only 32-bit aligned */ | |
| #define HAVE_UNALIGNED_64_ACCESS 0 | | #define HAVE_UNALIGNED_64_ACCESS 0 | |
| | | | |
| /* Define to 1 if you have the <unistd.h> header file. */ | | /* Define to 1 if you have the <unistd.h> header file. */ | |
| #define HAVE_UNISTD_H 1 | | #define HAVE_UNISTD_H 1 | |
| | | | |
| /* Define to 1 if you have the `vfork' function. */ | | /* Define to 1 if you have the `vfork' function. */ | |
| #define HAVE_VFORK 1 | | #define HAVE_VFORK 1 | |
| | | | |
| /* Define to 1 if you have the <vfork.h> header file. */ | | /* Define to 1 if you have the <vfork.h> header file. */ | |
| /* #undef HAVE_VFORK_H */ | | /* #undef HAVE_VFORK_H */ | |
| | | | |
| /* Define to 1 if you have the `vprintf' function. */ | | /* Define to 1 if you have the `vprintf' function. */ | |
| #define HAVE_VPRINTF 1 | | #define HAVE_VPRINTF 1 | |
| | | | |
|
| /* This value is set to 1 to indicate that the system argz facility works * | | | |
| / | | | |
| #define HAVE_WORKING_ARGZ 1 | | | |
| | | | |
| /* Define to 1 if `fork' works. */ | | /* Define to 1 if `fork' works. */ | |
| #define HAVE_WORKING_FORK 1 | | #define HAVE_WORKING_FORK 1 | |
| | | | |
| /* Define to 1 if `vfork' works. */ | | /* Define to 1 if `vfork' works. */ | |
| #define HAVE_WORKING_VFORK 1 | | #define HAVE_WORKING_VFORK 1 | |
| | | | |
|
| | | /* Have compression library */ | |
| | | #define HAVE_ZLIB /**/ | |
| | | | |
| /* Define to 1 if the system has the type `_Bool'. */ | | /* Define to 1 if the system has the type `_Bool'. */ | |
| #define HAVE__BOOL 1 | | #define HAVE__BOOL 1 | |
| | | | |
| /* Define as const if the declaration of iconv() needs const. */ | | /* Define as const if the declaration of iconv() needs const. */ | |
| #define ICONV_CONST | | #define ICONV_CONST | |
| | | | |
|
| /* Defined if libcurl supports AsynchDNS */ | | /* Defined if libgnurl supports AsynchDNS */ | |
| /* #undef LIBCURL_FEATURE_ASYNCHDNS */ | | /* #undef LIBGNURL_FEATURE_ASYNCHDNS */ | |
| | | | |
| /* Defined if libcurl supports IDN */ | | | |
| #define LIBCURL_FEATURE_IDN 1 | | | |
| | | | |
|
| /* Defined if libcurl supports IPv6 */ | | /* Defined if libgnurl supports IDN */ | |
| #define LIBCURL_FEATURE_IPV6 1 | | /* #undef LIBGNURL_FEATURE_IDN */ | |
| | | | |
|
| /* Defined if libcurl supports KRB4 */ | | /* Defined if libgnurl supports IPv6 */ | |
| /* #undef LIBCURL_FEATURE_KRB4 */ | | /* #undef LIBGNURL_FEATURE_IPV6 */ | |
| | | | |
|
| /* Defined if libcurl supports libz */ | | /* Defined if libgnurl supports KRB4 */ | |
| #define LIBCURL_FEATURE_LIBZ 1 | | /* #undef LIBGNURL_FEATURE_KRB4 */ | |
| | | | |
|
| /* Defined if libcurl supports NTLM */ | | /* Defined if libgnurl supports libz */ | |
| #define LIBCURL_FEATURE_NTLM 1 | | /* #undef LIBGNURL_FEATURE_LIBZ */ | |
| | | | |
|
| /* Defined if libcurl supports SSL */ | | /* Defined if libgnurl supports NTLM */ | |
| #define LIBCURL_FEATURE_SSL 1 | | /* #undef LIBGNURL_FEATURE_NTLM */ | |
| | | | |
|
| /* Defined if libcurl supports SSPI */ | | /* Defined if libgnurl supports SSL */ | |
| /* #undef LIBCURL_FEATURE_SSPI */ | | /* #undef LIBGNURL_FEATURE_SSL */ | |
| | | | |
|
| /* Defined if libcurl supports DICT */ | | /* Defined if libgnurl supports SSPI */ | |
| #define LIBCURL_PROTOCOL_DICT 1 | | /* #undef LIBGNURL_FEATURE_SSPI */ | |
| | | | |
|
| /* Defined if libcurl supports FILE */ | | /* Defined if libgnurl supports DICT */ | |
| #define LIBCURL_PROTOCOL_FILE 1 | | /* #undef LIBGNURL_PROTOCOL_DICT */ | |
| | | | |
|
| /* Defined if libcurl supports FTP */ | | /* Defined if libgnurl supports FILE */ | |
| #define LIBCURL_PROTOCOL_FTP 1 | | /* #undef LIBGNURL_PROTOCOL_FILE */ | |
| | | | |
|
| /* Defined if libcurl supports FTPS */ | | /* Defined if libgnurl supports FTP */ | |
| #define LIBCURL_PROTOCOL_FTPS 1 | | /* #undef LIBGNURL_PROTOCOL_FTP */ | |
| | | | |
|
| /* Defined if libcurl supports HTTP */ | | /* Defined if libgnurl supports FTPS */ | |
| #define LIBCURL_PROTOCOL_HTTP 1 | | /* #undef LIBGNURL_PROTOCOL_FTPS */ | |
| | | | |
|
| /* Defined if libcurl supports HTTPS */ | | /* Defined if libgnurl supports HTTP */ | |
| #define LIBCURL_PROTOCOL_HTTPS 1 | | /* #undef LIBGNURL_PROTOCOL_HTTP */ | |
| | | | |
|
| /* Defined if libcurl supports IMAP */ | | /* Defined if libgnurl supports HTTPS */ | |
| #define LIBCURL_PROTOCOL_IMAP 1 | | /* #undef LIBGNURL_PROTOCOL_HTTPS */ | |
| | | | |
|
| /* Defined if libcurl supports LDAP */ | | /* Defined if libgnurl supports IMAP */ | |
| #define LIBCURL_PROTOCOL_LDAP 1 | | /* #undef LIBGNURL_PROTOCOL_IMAP */ | |
| | | | |
|
| /* Defined if libcurl supports POP3 */ | | /* Defined if libgnurl supports LDAP */ | |
| #define LIBCURL_PROTOCOL_POP3 1 | | /* #undef LIBGNURL_PROTOCOL_LDAP */ | |
| | | | |
|
| /* Defined if libcurl supports RTSP */ | | /* Defined if libgnurl supports POP3 */ | |
| #define LIBCURL_PROTOCOL_RTSP 1 | | /* #undef LIBGNURL_PROTOCOL_POP3 */ | |
| | | | |
|
| /* Defined if libcurl supports SMTP */ | | /* Defined if libgnurl supports RTSP */ | |
| #define LIBCURL_PROTOCOL_SMTP 1 | | /* #undef LIBGNURL_PROTOCOL_RTSP */ | |
| | | | |
|
| /* Defined if libcurl supports TELNET */ | | /* Defined if libgnurl supports SMTP */ | |
| #define LIBCURL_PROTOCOL_TELNET 1 | | /* #undef LIBGNURL_PROTOCOL_SMTP */ | |
| | | | |
|
| /* Defined if libcurl supports TFTP */ | | /* Defined if libgnurl supports TELNET */ | |
| #define LIBCURL_PROTOCOL_TFTP 1 | | /* #undef LIBGNURL_PROTOCOL_TELNET */ | |
| | | | |
|
| /* Define to 1 if you want IDN support. */ | | /* Defined if libgnurl supports TFTP */ | |
| #define LIBIDN 1 | | /* #undef LIBGNURL_PROTOCOL_TFTP */ | |
| | | | |
| /* This is a Linux kernel */ | | /* This is a Linux kernel */ | |
| #define LINUX 1 | | #define LINUX 1 | |
| | | | |
| /* Define to 1 if `lstat' dereferences a symlink specified with a trailing | | /* Define to 1 if `lstat' dereferences a symlink specified with a trailing | |
| slash. */ | | slash. */ | |
| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 | | #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 | |
| | | | |
|
| /* Define if the OS needs help to load dependent libraries for dlopen(). */ | | | |
| /* #undef LTDL_DLOPEN_DEPLIBS */ | | | |
| | | | |
| /* Define to the system default library search path. */ | | | |
| #define LT_DLSEARCH_PATH "/lib:/usr/lib:/usr/lib/atlas-sse:/usr/lib/atlas-s | | | |
| se3:/usr/lib/atlas:/usr/lib/paraview-mpi" | | | |
| | | | |
| /* The archive extension */ | | | |
| #define LT_LIBEXT "a" | | | |
| | | | |
| /* The archive prefix */ | | | |
| #define LT_LIBPREFIX "lib" | | | |
| | | | |
| /* Define to the extension used for runtime loadable modules, say, ".so". * | | | |
| / | | | |
| #define LT_MODULE_EXT ".so" | | | |
| | | | |
| /* Define to the name of the environment variable that determines the run-t | | | |
| ime | | | |
| module search path. */ | | | |
| #define LT_MODULE_PATH_VAR "LD_LIBRARY_PATH" | | | |
| | | | |
| /* Define to the sub-directory in which libtool stores uninstalled librarie
s. | | /* Define to the sub-directory in which libtool stores uninstalled librarie
s. | |
| */ | | */ | |
| #define LT_OBJDIR ".libs/" | | #define LT_OBJDIR ".libs/" | |
| | | | |
|
| /* Define to the shared library suffix, say, ".dylib". */ | | | |
| /* #undef LT_SHARED_EXT */ | | | |
| | | | |
| /* This is a MinGW system */ | | /* This is a MinGW system */ | |
| /* #undef MINGW */ | | /* #undef MINGW */ | |
| | | | |
| /* required libgcrypt version */ | | /* required libgcrypt version */ | |
|
| #define NEED_LIBGCRYPT_VERSION "1.4.2" | | #define NEED_LIBGCRYPT_VERSION "1.6.0" | |
| | | | |
| /* Define if dlsym() requires a leading underscore in symbol names. */ | | | |
| /* #undef NEED_USCORE */ | | | |
| | | | |
| /* This is a NetBSD system */ | | /* This is a NetBSD system */ | |
| /* #undef NETBSD */ | | /* #undef NETBSD */ | |
| | | | |
|
| /* Define to 1 if your C compiler doesn't accept -c and -o together. */ | | | |
| /* #undef NO_MINUS_C_MINUS_O */ | | | |
| | | | |
| /* This is an OpenBSD system */ | | /* This is an OpenBSD system */ | |
| /* #undef OPENBSD */ | | /* #undef OPENBSD */ | |
| | | | |
| /* Some strange OS */ | | /* Some strange OS */ | |
| /* #undef OTHEROS */ | | /* #undef OTHEROS */ | |
| | | | |
| /* Name of package */ | | /* Name of package */ | |
| #define PACKAGE "gnunet" | | #define PACKAGE "gnunet" | |
| | | | |
| /* Define to the address where bug reports for this package should be sent.
*/ | | /* Define to the address where bug reports for this package should be sent.
*/ | |
| #define PACKAGE_BUGREPORT "bug-gnunet@gnu.org" | | #define PACKAGE_BUGREPORT "bug-gnunet@gnu.org" | |
| | | | |
| /* Define to the full name of this package. */ | | /* Define to the full name of this package. */ | |
| #define PACKAGE_NAME "gnunet" | | #define PACKAGE_NAME "gnunet" | |
| | | | |
| /* Define to the full name and version of this package. */ | | /* Define to the full name and version of this package. */ | |
|
| #define PACKAGE_STRING "gnunet 0.9.5" | | #define PACKAGE_STRING "gnunet 0.10.0" | |
| | | | |
| /* Define to the one symbol short name of this package. */ | | /* Define to the one symbol short name of this package. */ | |
| #define PACKAGE_TARNAME "gnunet" | | #define PACKAGE_TARNAME "gnunet" | |
| | | | |
| /* Define to the home page for this package. */ | | /* Define to the home page for this package. */ | |
| #define PACKAGE_URL "" | | #define PACKAGE_URL "" | |
| | | | |
| /* Define to the version of this package. */ | | /* Define to the version of this package. */ | |
|
| #define PACKAGE_VERSION "0.9.5" | | #define PACKAGE_VERSION "0.10.0" | |
| | | | |
| /* Define as the return type of signal handlers (`int' or `void'). */ | | /* Define as the return type of signal handlers (`int' or `void'). */ | |
| #define RETSIGTYPE void | | #define RETSIGTYPE void | |
| | | | |
| /* Define to the type of arg 1 for `select'. */ | | /* Define to the type of arg 1 for `select'. */ | |
| #define SELECT_TYPE_ARG1 int | | #define SELECT_TYPE_ARG1 int | |
| | | | |
| /* Define to the type of args 2, 3 and 4 for `select'. */ | | /* Define to the type of args 2, 3 and 4 for `select'. */ | |
| #define SELECT_TYPE_ARG234 (fd_set *) | | #define SELECT_TYPE_ARG234 (fd_set *) | |
| | | | |
| | | | |
| skipping to change at line 717 | | skipping to change at line 647 | |
| | | | |
| /* Define to 1 if you have the ANSI C header files. */ | | /* Define to 1 if you have the ANSI C header files. */ | |
| #define STDC_HEADERS 1 | | #define STDC_HEADERS 1 | |
| | | | |
| /* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */ | | /* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */ | |
| #define TIME_WITH_SYS_TIME 1 | | #define TIME_WITH_SYS_TIME 1 | |
| | | | |
| /* Define to 1 if your <sys/time.h> declares `struct tm'. */ | | /* Define to 1 if your <sys/time.h> declares `struct tm'. */ | |
| /* #undef TM_IN_SYS_TIME */ | | /* #undef TM_IN_SYS_TIME */ | |
| | | | |
|
| /* repository svn version */ | | /* VCS revision/hash or tarball version */ | |
| #define VCS_VERSION "svn-" | | #define VCS_VERSION "release" | |
| | | | |
| /* Version number of package */ | | /* Version number of package */ | |
|
| #define VERSION "0.9.5" | | #define VERSION "0.10.0" | |
| | | | |
| /* This is a Windows system */ | | /* This is a Windows system */ | |
| /* #undef WINDOWS */ | | /* #undef WINDOWS */ | |
| | | | |
|
| /* Do we have to use IBM LoadLeveler */ | | | |
| #define WITH_LL 0 | | | |
| | | | |
| /* Define to 1 if the X Window System is missing or not being used. */ | | /* Define to 1 if the X Window System is missing or not being used. */ | |
| /* #undef X_DISPLAY_MISSING */ | | /* #undef X_DISPLAY_MISSING */ | |
| | | | |
|
| /* Enable large inode numbers on Mac OS X 10.5. */ | | | |
| #ifndef _DARWIN_USE_64_BIT_INODE | | | |
| # define _DARWIN_USE_64_BIT_INODE 1 | | | |
| #endif | | | |
| | | | |
| /* Number of bits in a file offset, on hosts where this is settable. */ | | /* Number of bits in a file offset, on hosts where this is settable. */ | |
| #define _FILE_OFFSET_BITS 64 | | #define _FILE_OFFSET_BITS 64 | |
| | | | |
| /* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ | | /* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ | |
| /* #undef _LARGEFILE_SOURCE */ | | /* #undef _LARGEFILE_SOURCE */ | |
| | | | |
| /* Define for large files, on AIX-style hosts. */ | | /* Define for large files, on AIX-style hosts. */ | |
| /* #undef _LARGE_FILES */ | | /* #undef _LARGE_FILES */ | |
| | | | |
| /* Need with solaris or errno doesnt work */ | | /* Need with solaris or errno doesnt work */ | |
| /* #undef _REENTRANT */ | | /* #undef _REENTRANT */ | |
| | | | |
| /* This is a Windows system */ | | /* This is a Windows system */ | |
| /* #undef _WIN32 */ | | /* #undef _WIN32 */ | |
| | | | |
|
| /* Define so that glibc/gnulib argp.h does not typedef error_t. */ | | /* Define curl_free() as free() if our version of gnurl lacks curl_free. */ | |
| /* #undef __error_t_defined */ | | | |
| | | | |
| /* Define curl_free() as free() if our version of curl lacks curl_free. */ | | | |
| /* #undef curl_free */ | | /* #undef curl_free */ | |
| | | | |
|
| /* Define to a type to use for `error_t' if it is not otherwise available. | | | |
| */ | | | |
| /* #undef error_t */ | | | |
| | | | |
| /* Define to `int' if <sys/types.h> doesn't define. */ | | /* Define to `int' if <sys/types.h> doesn't define. */ | |
| /* #undef gid_t */ | | /* #undef gid_t */ | |
| | | | |
| /* Define to `int' if <sys/types.h> does not define. */ | | /* Define to `int' if <sys/types.h> does not define. */ | |
| /* #undef mode_t */ | | /* #undef mode_t */ | |
| | | | |
| /* Define to `long int' if <sys/types.h> does not define. */ | | /* Define to `long int' if <sys/types.h> does not define. */ | |
| /* #undef off_t */ | | /* #undef off_t */ | |
| | | | |
| /* Define to `int' if <sys/types.h> does not define. */ | | /* Define to `int' if <sys/types.h> does not define. */ | |
| | | | |
End of changes. 66 change blocks. |
| 197 lines changed or deleted | | 107 lines changed or added | |
|
| gnunet_configuration_lib.h | | gnunet_configuration_lib.h | |
| /* | | /* | |
| This file is part of GNUnet. | | This file is part of GNUnet. | |
| (C) 2006, 2008, 2009 Christian Grothoff (and other contributing author
s) | | (C) 2006, 2008, 2009 Christian Grothoff (and other contributing author
s) | |
| | | | |
| GNUnet is free software; you can redistribute it and/or modify | | GNUnet is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published | | 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. | | option) any later version. | |
| | | | |
| GNUnet is distributed in the hope that it will be useful, but | | GNUnet is distributed in the hope that it will be useful, but | |
| WITHOUT ANY WARRANTY; without even the implied warranty of | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| General Public License for more details. | | General Public License for more details. | |
| | | | |
| You should have received a copy of the GNU General Public License | | You should have received a copy of the GNU General Public License | |
| along with GNUnet; see the file COPYING. If not, write to the | | along with GNUnet; see the file COPYING. If not, write to the | |
| Free Software Foundation, Inc., 59 Temple Place - Suite 330, | | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| Boston, MA 02111-1307, USA. | | Boston, MA 02111-1307, USA. | |
| */ | | */ | |
| | | | |
| /** | | /** | |
| * @file include/gnunet_configuration_lib.h | | * @file include/gnunet_configuration_lib.h | |
| * @brief configuration API | | * @brief configuration API | |
|
| * | | | |
| * @author Christian Grothoff | | * @author Christian Grothoff | |
|
| | | * @defgroup configuration Configuration management | |
| | | * @{ | |
| */ | | */ | |
|
| | | | |
| #ifndef GNUNET_CONFIGURATION_LIB_H | | #ifndef GNUNET_CONFIGURATION_LIB_H | |
| #define GNUNET_CONFIGURATION_LIB_H | | #define GNUNET_CONFIGURATION_LIB_H | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| extern "C" | | extern "C" | |
| { | | { | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| } | | } | |
| #endif | | #endif | |
| #endif | | #endif | |
| | | | |
|
| #include "gnunet_common.h" | | | |
| #include "gnunet_time_lib.h" | | | |
| | | | |
| /** | | /** | |
| * A configuration object. | | * A configuration object. | |
| */ | | */ | |
| struct GNUNET_CONFIGURATION_Handle; | | struct GNUNET_CONFIGURATION_Handle; | |
| | | | |
| /** | | /** | |
| * Create a new configuration object. | | * Create a new configuration object. | |
| * @return fresh configuration object | | * @return fresh configuration object | |
| */ | | */ | |
| struct GNUNET_CONFIGURATION_Handle * | | struct GNUNET_CONFIGURATION_Handle * | |
| | | | |
| skipping to change at line 78 | | skipping to change at line 75 | |
| void | | void | |
| GNUNET_CONFIGURATION_destroy (struct GNUNET_CONFIGURATION_Handle *cfg); | | GNUNET_CONFIGURATION_destroy (struct GNUNET_CONFIGURATION_Handle *cfg); | |
| | | | |
| /** | | /** | |
| * Load configuration. This function will first parse the | | * Load configuration. This function will first parse the | |
| * defaults and then parse the specific configuration file | | * defaults and then parse the specific configuration file | |
| * to overwrite the defaults. | | * to overwrite the defaults. | |
| * | | * | |
| * @param cfg configuration to update | | * @param cfg configuration to update | |
| * @param filename name of the configuration file, NULL to load defaults | | * @param filename name of the configuration file, NULL to load defaults | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR on error | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONFIGURATION_load (struct GNUNET_CONFIGURATION_Handle *cfg, | | GNUNET_CONFIGURATION_load (struct GNUNET_CONFIGURATION_Handle *cfg, | |
| const char *filename); | | const char *filename); | |
| | | | |
| /** | | /** | |
| * Load default configuration. This function will parse the | | * Load default configuration. This function will parse the | |
| * defaults from the given defaults_d directory. | | * defaults from the given defaults_d directory. | |
| * | | * | |
| * @param cfg configuration to update | | * @param cfg configuration to update | |
| * @param defaults_d directory with the defaults | | * @param defaults_d directory with the defaults | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR on error | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONFIGURATION_load_from (struct GNUNET_CONFIGURATION_Handle *cfg, | | GNUNET_CONFIGURATION_load_from (struct GNUNET_CONFIGURATION_Handle *cfg, | |
| const char *defaults_d); | | const char *defaults_d); | |
| | | | |
| /** | | /** | |
| * Parse a configuration file, add all of the options in the | | * Parse a configuration file, add all of the options in the | |
| * file to the configuration environment. | | * file to the configuration environment. | |
| * | | * | |
| * @param cfg configuration to update | | * @param cfg configuration to update | |
| * @param filename name of the configuration file | | * @param filename name of the configuration file | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR on error | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONFIGURATION_parse (struct GNUNET_CONFIGURATION_Handle *cfg, | | GNUNET_CONFIGURATION_parse (struct GNUNET_CONFIGURATION_Handle *cfg, | |
| const char *filename); | | const char *filename); | |
| | | | |
| /** | | /** | |
| * Serializes the given configuration. | | * Serializes the given configuration. | |
| * | | * | |
| * @param cfg configuration to serialize | | * @param cfg configuration to serialize | |
| * @param size will be set to the size of the serialized memory block | | * @param size will be set to the size of the serialized memory block | |
| | | | |
| skipping to change at line 126 | | skipping to change at line 123 | |
| char * | | char * | |
| GNUNET_CONFIGURATION_serialize (const struct GNUNET_CONFIGURATION_Handle *c
fg, | | GNUNET_CONFIGURATION_serialize (const struct GNUNET_CONFIGURATION_Handle *c
fg, | |
| size_t *size); | | size_t *size); | |
| | | | |
| /** | | /** | |
| * De-serializes configuration | | * De-serializes configuration | |
| * | | * | |
| * @param cfg configuration to update | | * @param cfg configuration to update | |
| * @param mem the memory block of serialized configuration | | * @param mem the memory block of serialized configuration | |
| * @param size the size of the memory block | | * @param size the size of the memory block | |
|
| * @param allow_inline set to GNUNET_YES if we recursively load configurati | | * @param allow_inline set to #GNUNET_YES if we recursively load configurat | |
| on | | ion | |
| * from inlined configurations; GNUNET_NO if not and raise warning | | * from inlined configurations; #GNUNET_NO if not and raise warnin | |
| s | | gs | |
| * when we come across them | | * when we come across them | |
|
| * @return GNUNET_OK on success, GNUNET_ERROR on error | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONFIGURATION_deserialize (struct GNUNET_CONFIGURATION_Handle *cfg, | | GNUNET_CONFIGURATION_deserialize (struct GNUNET_CONFIGURATION_Handle *cfg, | |
| const char *mem, | | const char *mem, | |
| const size_t size, | | const size_t size, | |
| int allow_inline); | | int allow_inline); | |
| | | | |
| /** | | /** | |
| * Write configuration file. | | * Write configuration file. | |
| * | | * | |
| * @param cfg configuration to write | | * @param cfg configuration to write | |
| * @param filename where to write the configuration | | * @param filename where to write the configuration | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR on error | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONFIGURATION_write (struct GNUNET_CONFIGURATION_Handle *cfg, | | GNUNET_CONFIGURATION_write (struct GNUNET_CONFIGURATION_Handle *cfg, | |
| const char *filename); | | const char *filename); | |
| | | | |
| /** | | /** | |
| * Write only configuration entries that have been changed to configuration
file | | * Write only configuration entries that have been changed to configuration
file | |
|
| * @param cfgDefault default configuration | | * @param cfg_default default configuration | |
| * @param cfgNew new configuration | | * @param cfg_new new configuration | |
| * @param filename where to write the configuration diff between default an
d new | | * @param filename where to write the configuration diff between default an
d new | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR on error | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONFIGURATION_write_diffs (const struct GNUNET_CONFIGURATION_Handle | | GNUNET_CONFIGURATION_write_diffs (const struct GNUNET_CONFIGURATION_Handle | |
|
| *cfgDefault, | | *cfg_default, | |
| const struct GNUNET_CONFIGURATION_Handle | | const struct GNUNET_CONFIGURATION_Handle | |
|
| *cfgNew, const char *filename); | | *cfg_new, const char *filename); | |
| | | | |
| /** | | /** | |
| * Compute configuration with only entries that have been changed | | * Compute configuration with only entries that have been changed | |
| * | | * | |
|
| * @param cfgDefault original configuration | | * @param cfg_default original configuration | |
| * @param cfgNew new configuration | | * @param cfg_new new configuration | |
| * @return configuration with only the differences, never NULL | | * @return configuration with only the differences, never NULL | |
| */ | | */ | |
| struct GNUNET_CONFIGURATION_Handle * | | struct GNUNET_CONFIGURATION_Handle * | |
| GNUNET_CONFIGURATION_get_diff (const struct GNUNET_CONFIGURATION_Handle | | GNUNET_CONFIGURATION_get_diff (const struct GNUNET_CONFIGURATION_Handle | |
|
| *cfgDefault, | | *cfg_default, | |
| const struct GNUNET_CONFIGURATION_Handle | | const struct GNUNET_CONFIGURATION_Handle | |
|
| *cfgNew); | | *cfg_new); | |
| | | | |
| /** | | /** | |
| * Test if there are configuration options that were | | * Test if there are configuration options that were | |
| * changed since the last save. | | * changed since the last save. | |
| * | | * | |
| * @param cfg configuration to inspect | | * @param cfg configuration to inspect | |
|
| * @return GNUNET_NO if clean, GNUNET_YES if dirty, GNUNET_SYSERR on error
(i.e. last save failed) | | * @return #GNUNET_NO if clean, #GNUNET_YES if dirty, #GNUNET_SYSERR on err
or (i.e. last save failed) | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONFIGURATION_is_dirty (const struct GNUNET_CONFIGURATION_Handle *cf
g); | | GNUNET_CONFIGURATION_is_dirty (const struct GNUNET_CONFIGURATION_Handle *cf
g); | |
| | | | |
| /** | | /** | |
| * Function to iterate over options. | | * Function to iterate over options. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param section name of the section | | * @param section name of the section | |
| * @param option name of the option | | * @param option name of the option | |
| | | | |
| skipping to change at line 247 | | skipping to change at line 244 | |
| GNUNET_CONFIGURATION_remove_section (struct GNUNET_CONFIGURATION_Handle *cf
g, | | GNUNET_CONFIGURATION_remove_section (struct GNUNET_CONFIGURATION_Handle *cf
g, | |
| const char *section); | | const char *section); | |
| | | | |
| /** | | /** | |
| * Get a configuration value that should be a number. | | * Get a configuration value that should be a number. | |
| * | | * | |
| * @param cfg configuration to inspect | | * @param cfg configuration to inspect | |
| * @param section section of interest | | * @param section section of interest | |
| * @param option option of interest | | * @param option option of interest | |
| * @param number where to store the numeric value of the option | | * @param number where to store the numeric value of the option | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR on error | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONFIGURATION_get_value_number (const struct GNUNET_CONFIGURATION_Ha
ndle | | GNUNET_CONFIGURATION_get_value_number (const struct GNUNET_CONFIGURATION_Ha
ndle | |
| *cfg, const char *section, | | *cfg, const char *section, | |
| const char *option, | | const char *option, | |
| unsigned long long *number); | | unsigned long long *number); | |
| | | | |
| /** | | /** | |
| * Get a configuration value that should be a relative time. | | * Get a configuration value that should be a relative time. | |
| * | | * | |
| * @param cfg configuration to inspect | | * @param cfg configuration to inspect | |
| * @param section section of interest | | * @param section section of interest | |
| * @param option option of interest | | * @param option option of interest | |
| * @param time set to the time value stored in the configuration | | * @param time set to the time value stored in the configuration | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR on error | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONFIGURATION_get_value_time (const struct GNUNET_CONFIGURATION_Hand
le | | GNUNET_CONFIGURATION_get_value_time (const struct GNUNET_CONFIGURATION_Hand
le | |
| *cfg, const char *section, | | *cfg, const char *section, | |
| const char *option, | | const char *option, | |
| struct GNUNET_TIME_Relative *time); | | struct GNUNET_TIME_Relative *time); | |
| | | | |
| /** | | /** | |
| * Get a configuration value that should be a size in bytes. | | * Get a configuration value that should be a size in bytes. | |
| * | | * | |
| * @param cfg configuration to inspect | | * @param cfg configuration to inspect | |
| * @param section section of interest | | * @param section section of interest | |
| * @param option option of interest | | * @param option option of interest | |
| * @param size set to the size in bytes as stored in the configuration | | * @param size set to the size in bytes as stored in the configuration | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR on error | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONFIGURATION_get_value_size (const struct GNUNET_CONFIGURATION_Hand
le | | GNUNET_CONFIGURATION_get_value_size (const struct GNUNET_CONFIGURATION_Hand
le | |
| *cfg, const char *section, | | *cfg, const char *section, | |
| const char *option, | | const char *option, | |
| unsigned long long *size); | | unsigned long long *size); | |
| | | | |
| /** | | /** | |
| * Test if we have a value for a particular option | | * Test if we have a value for a particular option | |
| * | | * | |
| * @param cfg configuration to inspect | | * @param cfg configuration to inspect | |
| * @param section section of interest | | * @param section section of interest | |
| * @param option option of interest | | * @param option option of interest | |
|
| * @return GNUNET_YES if so, GNUNET_NO if not. | | * @return #GNUNET_YES if so, #GNUNET_NO if not. | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONFIGURATION_have_value (const struct GNUNET_CONFIGURATION_Handle *
cfg, | | GNUNET_CONFIGURATION_have_value (const struct GNUNET_CONFIGURATION_Handle *
cfg, | |
| const char *section, const char *option); | | const char *section, const char *option); | |
| | | | |
| /** | | /** | |
| * Get a configuration value that should be a string. | | * Get a configuration value that should be a string. | |
| * | | * | |
| * @param cfg configuration to inspect | | * @param cfg configuration to inspect | |
| * @param section section of interest | | * @param section section of interest | |
| * @param option option of interest | | * @param option option of interest | |
| * @param value will be set to a freshly allocated configuration | | * @param value will be set to a freshly allocated configuration | |
| * value, or NULL if option is not specified | | * value, or NULL if option is not specified | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR on error | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
|
| GNUNET_CONFIGURATION_get_value_string (const struct GNUNET_CONFIGURATION_Ha | | GNUNET_CONFIGURATION_get_value_string (const struct GNUNET_CONFIGURATION_Ha | |
| ndle | | ndle *cfg, | |
| *cfg, const char *section, | | const char *section, | |
| const char *option, char **value); | | const char *option, | |
| | | char **value); | |
| | | | |
| /** | | /** | |
| * Get a configuration value that should be the name of a file | | * Get a configuration value that should be the name of a file | |
| * or directory. | | * or directory. | |
| * | | * | |
| * @param cfg configuration to inspect | | * @param cfg configuration to inspect | |
| * @param section section of interest | | * @param section section of interest | |
| * @param option option of interest | | * @param option option of interest | |
| * @param value will be set to a freshly allocated configuration | | * @param value will be set to a freshly allocated configuration | |
| * value, or NULL if option is not specified | | * value, or NULL if option is not specified | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR on error | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
|
| GNUNET_CONFIGURATION_get_value_filename (const struct | | GNUNET_CONFIGURATION_get_value_filename (const struct GNUNET_CONFIGURATION_ | |
| GNUNET_CONFIGURATION_Handle *cfg, | | Handle *cfg, | |
| const char *section, | | const char *section, | |
| const char *option, char **value); | | const char *option, char **value); | |
| | | | |
| /** | | /** | |
| * Iterate over the set of filenames stored in a configuration value. | | * Iterate over the set of filenames stored in a configuration value. | |
| * | | * | |
| * @param cfg configuration to inspect | | * @param cfg configuration to inspect | |
| * @param section section of interest | | * @param section section of interest | |
| * @param option option of interest | | * @param option option of interest | |
| * @param cb function to call on each filename | | * @param cb function to call on each filename | |
|
| * @param cb_cls closure for cb | | * @param cb_cls closure for @a cb | |
| * @return number of filenames iterated over, -1 on error | | * @return number of filenames iterated over, -1 on error | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONFIGURATION_iterate_value_filenames (const struct | | GNUNET_CONFIGURATION_iterate_value_filenames (const struct | |
| GNUNET_CONFIGURATION_Handle *
cfg, | | GNUNET_CONFIGURATION_Handle *
cfg, | |
| const char *section, | | const char *section, | |
| const char *option, | | const char *option, | |
| GNUNET_FileNameCallback cb, | | GNUNET_FileNameCallback cb, | |
| void *cb_cls); | | void *cb_cls); | |
| | | | |
| /** | | /** | |
| * Iterate over values of a section in the configuration. | | * Iterate over values of a section in the configuration. | |
| * | | * | |
| * @param cfg configuration to inspect | | * @param cfg configuration to inspect | |
| * @param section the section | | * @param section the section | |
| * @param iter function to call on each option | | * @param iter function to call on each option | |
|
| * @param iter_cls closure for iter | | * @param iter_cls closure for @a iter | |
| */ | | */ | |
| void | | void | |
| GNUNET_CONFIGURATION_iterate_section_values (const struct | | GNUNET_CONFIGURATION_iterate_section_values (const struct | |
| GNUNET_CONFIGURATION_Handle *c
fg, | | GNUNET_CONFIGURATION_Handle *c
fg, | |
| const char *section, | | const char *section, | |
| GNUNET_CONFIGURATION_Iterator
iter, | | GNUNET_CONFIGURATION_Iterator
iter, | |
| void *iter_cls); | | void *iter_cls); | |
| | | | |
| /** | | /** | |
| * Get a configuration value that should be in a set of | | * Get a configuration value that should be in a set of | |
| * predefined strings | | * predefined strings | |
| * | | * | |
| * @param cfg configuration to inspect | | * @param cfg configuration to inspect | |
| * @param section section of interest | | * @param section section of interest | |
| * @param option option of interest | | * @param option option of interest | |
| * @param choices NULL-terminated list of legal values | | * @param choices NULL-terminated list of legal values | |
| * @param value will be set to an entry in the legal list, | | * @param value will be set to an entry in the legal list, | |
| * or NULL if option is not specified and no default given | | * or NULL if option is not specified and no default given | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR on error | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONFIGURATION_get_value_choice (const struct GNUNET_CONFIGURATION_Ha
ndle | | GNUNET_CONFIGURATION_get_value_choice (const struct GNUNET_CONFIGURATION_Ha
ndle | |
| *cfg, const char *section, | | *cfg, const char *section, | |
|
| const char *option, const char **cho
ices, | | const char *option, const char *cons
t *choices, | |
| const char **value); | | const char **value); | |
| | | | |
| /** | | /** | |
| * Get a configuration value that should be in a set of | | * Get a configuration value that should be in a set of | |
| * "YES" or "NO". | | * "YES" or "NO". | |
| * | | * | |
| * @param cfg configuration to inspect | | * @param cfg configuration to inspect | |
| * @param section section of interest | | * @param section section of interest | |
| * @param option option of interest | | * @param option option of interest | |
|
| * @return GNUNET_YES, GNUNET_NO or if option has no valid value, GNUNET_SY
SERR | | * @return #GNUNET_YES, #GNUNET_NO or if option has no valid value, #GNUNET
_SYSERR | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONFIGURATION_get_value_yesno (const struct GNUNET_CONFIGURATION_Han
dle | | GNUNET_CONFIGURATION_get_value_yesno (const struct GNUNET_CONFIGURATION_Han
dle | |
| *cfg, const char *section, | | *cfg, const char *section, | |
| const char *option); | | const char *option); | |
| | | | |
| /** | | /** | |
| * Expand an expression of the form "$FOO/BAR" to "DIRECTORY/BAR" | | * Expand an expression of the form "$FOO/BAR" to "DIRECTORY/BAR" | |
|
| * where either in the "PATHS" section or the environtment | | * where either in the "PATHS" section or the environtment "FOO" is | |
| * "FOO" is set to "DIRECTORY". | | * set to "DIRECTORY". We also support default expansion, | |
| | | * i.e. ${VARIABLE:-default} will expand to $VARIABLE if VARIABLE is | |
| | | * set in PATHS or the environment, and otherwise to "default". Note | |
| | | * that "default" itself can also be a $-expression, thus | |
| | | * "${VAR1:-{$VAR2}}" will expand to VAR1 and if that is not defined | |
| | | * to VAR2. | |
| * | | * | |
| * @param cfg configuration to use for path expansion | | * @param cfg configuration to use for path expansion | |
|
| * @param orig string to $-expand (will be freed!) | | * @param orig string to $-expand (will be freed!) Note that multiple | |
| | | * $-expressions can be present in this string. They will all be | |
| | | * $-expanded. | |
| * @return $-expanded string | | * @return $-expanded string | |
| */ | | */ | |
| char * | | char * | |
| GNUNET_CONFIGURATION_expand_dollar (const struct GNUNET_CONFIGURATION_Handl
e | | GNUNET_CONFIGURATION_expand_dollar (const struct GNUNET_CONFIGURATION_Handl
e | |
| *cfg, char *orig); | | *cfg, char *orig); | |
| | | | |
| /** | | /** | |
| * Set a configuration value that should be a number. | | * Set a configuration value that should be a number. | |
| * | | * | |
| * @param cfg configuration to update | | * @param cfg configuration to update | |
| | | | |
| skipping to change at line 441 | | skipping to change at line 445 | |
| const char *value); | | const char *value); | |
| | | | |
| /** | | /** | |
| * Remove a filename from a configuration value that | | * Remove a filename from a configuration value that | |
| * represents a list of filenames | | * represents a list of filenames | |
| * | | * | |
| * @param cfg configuration to update | | * @param cfg configuration to update | |
| * @param section section of interest | | * @param section section of interest | |
| * @param option option of interest | | * @param option option of interest | |
| * @param value filename to remove | | * @param value filename to remove | |
|
| * @return GNUNET_OK on success, | | * @return #GNUNET_OK on success, | |
| * GNUNET_SYSERR if the filename is not in the list | | * #GNUNET_SYSERR if the filename is not in the list | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONFIGURATION_remove_value_filename (struct GNUNET_CONFIGURATION_Han
dle | | GNUNET_CONFIGURATION_remove_value_filename (struct GNUNET_CONFIGURATION_Han
dle | |
| *cfg, const char *section, | | *cfg, const char *section, | |
| const char *option, | | const char *option, | |
| const char *value); | | const char *value); | |
| | | | |
| /** | | /** | |
| * Append a filename to a configuration value that | | * Append a filename to a configuration value that | |
| * represents a list of filenames | | * represents a list of filenames | |
| * | | * | |
| * @param cfg configuration to update | | * @param cfg configuration to update | |
| * @param section section of interest | | * @param section section of interest | |
| * @param option option of interest | | * @param option option of interest | |
| * @param value filename to append | | * @param value filename to append | |
|
| * @return GNUNET_OK on success, | | * @return #GNUNET_OK on success, | |
| * GNUNET_SYSERR if the filename already in the list | | * #GNUNET_SYSERR if the filename already in the list | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONFIGURATION_append_value_filename (struct GNUNET_CONFIGURATION_Han
dle | | GNUNET_CONFIGURATION_append_value_filename (struct GNUNET_CONFIGURATION_Han
dle | |
| *cfg, const char *section, | | *cfg, const char *section, | |
| const char *option, | | const char *option, | |
| const char *value); | | const char *value); | |
| | | | |
|
| | | /** @} */ /* end of group configuration */ | |
| | | | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| { | | { | |
| #endif | | #endif | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| } | | } | |
| #endif | | #endif | |
| | | | |
| #endif | | #endif | |
| | | | |
End of changes. 37 change blocks. |
| 49 lines changed or deleted | | 56 lines changed or added | |
|
| gnunet_container_lib.h | | gnunet_container_lib.h | |
| /* | | /* | |
| This file is part of GNUnet. | | This file is part of GNUnet. | |
|
| (C) 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2009, 2010 Christian Gro
thoff (and other contributing authors) | | (C) 2001-2013 Christian Grothoff (and other contributing authors) | |
| | | | |
| GNUnet is free software; you can redistribute it and/or modify | | GNUnet is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published | | 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. | | option) any later version. | |
| | | | |
| GNUnet is distributed in the hope that it will be useful, but | | GNUnet is distributed in the hope that it will be useful, but | |
| WITHOUT ANY WARRANTY; without even the implied warranty of | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| General Public License for more details. | | General Public License for more details. | |
| | | | |
| You should have received a copy of the GNU General Public License | | You should have received a copy of the GNU General Public License | |
| along with GNUnet; see the file COPYING. If not, write to the | | along with GNUnet; see the file COPYING. If not, write to the | |
| Free Software Foundation, Inc., 59 Temple Place - Suite 330, | | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| Boston, MA 02111-1307, USA. | | Boston, MA 02111-1307, USA. | |
| */ | | */ | |
| | | | |
| /** | | /** | |
| * @file include/gnunet_container_lib.h | | * @file include/gnunet_container_lib.h | |
| * @brief container classes for GNUnet | | * @brief container classes for GNUnet | |
|
| * | | | |
| * @author Christian Grothoff | | * @author Christian Grothoff | |
| * @author Nils Durner | | * @author Nils Durner | |
|
| | | * @defgroup hashmap multi hash-map | |
| | | * @defgroup heap min- or max-heap with arbitrary element removal | |
| | | * @defgroup bloomfilter Bloom filter (probabilistic set tests) | |
| | | * @defgroup dll Doubly-linked list | |
| | | * @defgroup metadata Meta data (GNU libextractor key-value pairs) | |
| */ | | */ | |
| | | | |
| #ifndef GNUNET_CONTAINER_LIB_H | | #ifndef GNUNET_CONTAINER_LIB_H | |
| #define GNUNET_CONTAINER_LIB_H | | #define GNUNET_CONTAINER_LIB_H | |
| | | | |
| /* add error and config prototypes */ | | /* add error and config prototypes */ | |
| #include "gnunet_crypto_lib.h" | | #include "gnunet_crypto_lib.h" | |
| #include <extractor.h> | | #include <extractor.h> | |
| | | | |
| #ifndef EXTRACTOR_METATYPE_GNUNET_ORIGINAL_FILENAME | | #ifndef EXTRACTOR_METATYPE_GNUNET_ORIGINAL_FILENAME | |
| | | | |
| skipping to change at line 53 | | skipping to change at line 57 | |
| { | | { | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| } | | } | |
| #endif | | #endif | |
| #endif | | #endif | |
| | | | |
| /* ******************* bloomfilter ***************** */ | | /* ******************* bloomfilter ***************** */ | |
| | | | |
| /** | | /** | |
| * @brief bloomfilter representation (opaque) | | * @brief bloomfilter representation (opaque) | |
|
| | | * @ingroup bloomfilter | |
| */ | | */ | |
| struct GNUNET_CONTAINER_BloomFilter; | | struct GNUNET_CONTAINER_BloomFilter; | |
| | | | |
| /** | | /** | |
|
| * Iterator over HashCodes. | | * @ingroup bloomfilter | |
| | | * Iterator over struct GNUNET_HashCodes. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param next set to the next hash code | | * @param next set to the next hash code | |
|
| * @return GNUNET_YES if next was updated | | * @return #GNUNET_YES if next was updated | |
| * GNUNET_NO if there are no more entries | | * #GNUNET_NO if there are no more entries | |
| */ | | */ | |
|
| typedef int (*GNUNET_HashCodeIterator) (void *cls, struct GNUNET_HashCode * | | typedef int (*GNUNET_HashCodeIterator) (void *cls, | |
| next); | | struct GNUNET_HashCode *next); | |
| | | | |
| /** | | /** | |
|
| * Load a bloom-filter from a file. | | * @ingroup bloomfilter | |
| | | * Load a Bloom filter from a file. | |
| * | | * | |
| * @param filename the name of the file (or the prefix) | | * @param filename the name of the file (or the prefix) | |
| * @param size the size of the bloom-filter (number of | | * @param size the size of the bloom-filter (number of | |
| * bytes of storage space to use); will be rounded up | | * bytes of storage space to use); will be rounded up | |
| * to next power of 2 | | * to next power of 2 | |
|
| * @param k the number of GNUNET_CRYPTO_hash-functions to apply per | | * @param k the number of #GNUNET_CRYPTO_hash-functions to apply per | |
| * element (number of bits set per element in the set) | | * element (number of bits set per element in the set) | |
| * @return the bloomfilter | | * @return the bloomfilter | |
| */ | | */ | |
| struct GNUNET_CONTAINER_BloomFilter * | | struct GNUNET_CONTAINER_BloomFilter * | |
|
| GNUNET_CONTAINER_bloomfilter_load (const char *filename, size_t size, | | GNUNET_CONTAINER_bloomfilter_load (const char *filename, | |
| | | size_t size, | |
| unsigned int k); | | unsigned int k); | |
| | | | |
| /** | | /** | |
|
| * Create a bloom filter from raw bits. | | * @ingroup bloomfilter | |
| | | * Create a Bloom filter from raw bits. | |
| * | | * | |
| * @param data the raw bits in memory (maybe NULL, | | * @param data the raw bits in memory (maybe NULL, | |
| * in which case all bits should be considered | | * in which case all bits should be considered | |
| * to be zero). | | * to be zero). | |
| * @param size the size of the bloom-filter (number of | | * @param size the size of the bloom-filter (number of | |
|
| * bytes of storage space to use); also size of data | | * bytes of storage space to use); also size of @a data | |
| * -- unless data is NULL. Must be a power of 2. | | * -- unless data is NULL. Must be a power of 2. | |
|
| * @param k the number of GNUNET_CRYPTO_hash-functions to apply per | | * @param k the number of #GNUNET_CRYPTO_hash-functions to apply per | |
| * element (number of bits set per element in the set) | | * element (number of bits set per element in the set) | |
| * @return the bloomfilter | | * @return the bloomfilter | |
| */ | | */ | |
| struct GNUNET_CONTAINER_BloomFilter * | | struct GNUNET_CONTAINER_BloomFilter * | |
|
| GNUNET_CONTAINER_bloomfilter_init (const char *data, size_t size, | | GNUNET_CONTAINER_bloomfilter_init (const char *data, | |
| | | size_t size, | |
| unsigned int k); | | unsigned int k); | |
| | | | |
| /** | | /** | |
|
| * Copy the raw data of this bloomfilter into | | * @ingroup bloomfilter | |
| | | * Copy the raw data of this Bloom filter into | |
| * the given data array. | | * the given data array. | |
| * | | * | |
| * @param data where to write the data | | * @param data where to write the data | |
|
| * @param size the size of the given data array | | * @param size the size of the given @a data array | |
| * @return GNUNET_SYSERR if the data array of the wrong size | | * @return #GNUNET_SYSERR if the data array of the wrong size | |
| */ | | */ | |
| int | | int | |
|
| GNUNET_CONTAINER_bloomfilter_get_raw_data (const struct | | GNUNET_CONTAINER_bloomfilter_get_raw_data (const struct GNUNET_CONTAINER_Bl | |
| GNUNET_CONTAINER_BloomFilter *bf | | oomFilter *bf, | |
| , | | | |
| char *data, size_t size); | | char *data, size_t size); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup bloomfilter | |
| * Test if an element is in the filter. | | * Test if an element is in the filter. | |
|
| | | * | |
| * @param e the element | | * @param e the element | |
| * @param bf the filter | | * @param bf the filter | |
|
| * @return GNUNET_YES if the element is in the filter, GNUNET_NO if not | | * @return #GNUNET_YES if the element is in the filter, #GNUNET_NO if not | |
| */ | | */ | |
| int | | int | |
|
| GNUNET_CONTAINER_bloomfilter_test (const struct GNUNET_CONTAINER_BloomFilte | | GNUNET_CONTAINER_bloomfilter_test (const struct GNUNET_CONTAINER_BloomFilte | |
| r | | r *bf, | |
| *bf, const struct GNUNET_HashCode * e); | | const struct GNUNET_HashCode *e); | |
| | | | |
| /** | | /** | |
|
| * Add an element to the filter | | * @ingroup bloomfilter | |
| | | * Add an element to the filter. | |
| | | * | |
| * @param bf the filter | | * @param bf the filter | |
| * @param e the element | | * @param e the element | |
| */ | | */ | |
| void | | void | |
| GNUNET_CONTAINER_bloomfilter_add (struct GNUNET_CONTAINER_BloomFilter *bf, | | GNUNET_CONTAINER_bloomfilter_add (struct GNUNET_CONTAINER_BloomFilter *bf, | |
|
| const struct GNUNET_HashCode * e); | | const struct GNUNET_HashCode *e); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup bloomfilter | |
| * Remove an element from the filter. | | * Remove an element from the filter. | |
|
| | | * | |
| * @param bf the filter | | * @param bf the filter | |
| * @param e the element to remove | | * @param e the element to remove | |
| */ | | */ | |
| void | | void | |
| GNUNET_CONTAINER_bloomfilter_remove (struct GNUNET_CONTAINER_BloomFilter *b
f, | | GNUNET_CONTAINER_bloomfilter_remove (struct GNUNET_CONTAINER_BloomFilter *b
f, | |
|
| const struct GNUNET_HashCode * e); | | const struct GNUNET_HashCode *e); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup bloomfilter | |
| * Create a copy of a bloomfilter. | | * Create a copy of a bloomfilter. | |
| * | | * | |
| * @param bf the filter | | * @param bf the filter | |
| * @return copy of bf | | * @return copy of bf | |
| */ | | */ | |
| struct GNUNET_CONTAINER_BloomFilter * | | struct GNUNET_CONTAINER_BloomFilter * | |
|
| GNUNET_CONTAINER_bloomfilter_copy (const struct GNUNET_CONTAINER_BloomFilte | | GNUNET_CONTAINER_bloomfilter_copy (const struct GNUNET_CONTAINER_BloomFilte | |
| r | | r *bf); | |
| *bf); | | | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup bloomfilter | |
| * Free the space associcated with a filter | | * Free the space associcated with a filter | |
| * in memory, flush to drive if needed (do not | | * in memory, flush to drive if needed (do not | |
|
| * free the space on the drive) | | * free the space on the drive). | |
| | | * | |
| * @param bf the filter | | * @param bf the filter | |
| */ | | */ | |
| void | | void | |
| GNUNET_CONTAINER_bloomfilter_free (struct GNUNET_CONTAINER_BloomFilter *bf)
; | | GNUNET_CONTAINER_bloomfilter_free (struct GNUNET_CONTAINER_BloomFilter *bf)
; | |
| | | | |
| /** | | /** | |
|
| | | * Get the number of the addresses set per element in the bloom filter. | |
| | | * | |
| | | * @param bf the filter | |
| | | * @return addresses set per element in the bf | |
| | | */ | |
| | | size_t | |
| | | GNUNET_CONTAINER_bloomfilter_get_element_addresses (const struct GNUNET_CON | |
| | | TAINER_BloomFilter *bf); | |
| | | | |
| | | /** | |
| | | * @ingroup bloomfilter | |
| * Get size of the bloom filter. | | * Get size of the bloom filter. | |
| * | | * | |
| * @param bf the filter | | * @param bf the filter | |
| * @return number of bytes used for the data of the bloom filter | | * @return number of bytes used for the data of the bloom filter | |
| */ | | */ | |
| size_t | | size_t | |
|
| GNUNET_CONTAINER_bloomfilter_get_size (const struct GNUNET_CONTAINER_BloomF | | GNUNET_CONTAINER_bloomfilter_get_size (const struct GNUNET_CONTAINER_BloomF | |
| ilter | | ilter *bf); | |
| *bf); | | | |
| | | | |
| /** | | /** | |
|
| * Reset a bloom filter to empty. | | * @ingroup bloomfilter | |
| | | * Reset a Bloom filter to empty. | |
| | | * | |
| * @param bf the filter | | * @param bf the filter | |
| */ | | */ | |
| void | | void | |
| GNUNET_CONTAINER_bloomfilter_clear (struct GNUNET_CONTAINER_BloomFilter *bf
); | | GNUNET_CONTAINER_bloomfilter_clear (struct GNUNET_CONTAINER_BloomFilter *bf
); | |
| | | | |
| /** | | /** | |
|
| * Or the entries of the given raw data array with the | | * @ingroup bloomfilter | |
| * data of the given bloom filter. Assumes that | | * "or" the entries of the given raw data array with the | |
| * the size of the data array and the current filter | | * data of the given Bloom filter. Assumes that | |
| | | * the @a size of the @a data array and the current filter | |
| * match. | | * match. | |
| * | | * | |
| * @param bf the filter | | * @param bf the filter | |
| * @param data data to OR-in | | * @param data data to OR-in | |
|
| * @param size size of data | | * @param size size of @a data | |
| * @return GNUNET_OK on success | | * @return #GNUNET_OK on success | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONTAINER_bloomfilter_or (struct GNUNET_CONTAINER_BloomFilter *bf, | | GNUNET_CONTAINER_bloomfilter_or (struct GNUNET_CONTAINER_BloomFilter *bf, | |
| const char *data, size_t size); | | const char *data, size_t size); | |
| | | | |
| /** | | /** | |
|
| * Or the entries of the given raw data array with the | | * @ingroup bloomfilter | |
| * data of the given bloom filter. Assumes that | | * "or" the entries of the given raw data array with the | |
| * the size of the data array and the current filter | | * data of the given Bloom filter. Assumes that | |
| * match. | | * the size of the two filters matches. | |
| * | | * | |
| * @param bf the filter | | * @param bf the filter | |
| * @param to_or the bloomfilter to or-in | | * @param to_or the bloomfilter to or-in | |
|
| * @param size number of bytes in data | | * @return #GNUNET_OK on success | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONTAINER_bloomfilter_or2 (struct GNUNET_CONTAINER_BloomFilter *bf, | | GNUNET_CONTAINER_bloomfilter_or2 (struct GNUNET_CONTAINER_BloomFilter *bf, | |
|
| const struct GNUNET_CONTAINER_BloomFilter | | const struct GNUNET_CONTAINER_BloomFilter | |
| *to_or, size_t size); | | *to_or); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup bloomfilter | |
| * Resize a bloom filter. Note that this operation | | * Resize a bloom filter. Note that this operation | |
|
| * is pretty costly. Essentially, the bloom filter | | * is pretty costly. Essentially, the Bloom filter | |
| * needs to be completely re-build. | | * needs to be completely re-build. | |
| * | | * | |
| * @param bf the filter | | * @param bf the filter | |
| * @param iterator an iterator over all elements stored in the BF | | * @param iterator an iterator over all elements stored in the BF | |
|
| * @param iterator_cls closure for iterator | | * @param iterator_cls closure for @a iterator | |
| * @param size the new size for the filter | | * @param size the new size for the filter | |
|
| * @param k the new number of GNUNET_CRYPTO_hash-function to apply per elem
ent | | * @param k the new number of #GNUNET_CRYPTO_hash-function to apply per ele
ment | |
| */ | | */ | |
| void | | void | |
| GNUNET_CONTAINER_bloomfilter_resize (struct GNUNET_CONTAINER_BloomFilter *b
f, | | GNUNET_CONTAINER_bloomfilter_resize (struct GNUNET_CONTAINER_BloomFilter *b
f, | |
| GNUNET_HashCodeIterator iterator, | | GNUNET_HashCodeIterator iterator, | |
| void *iterator_cls, size_t size, | | void *iterator_cls, size_t size, | |
| unsigned int k); | | unsigned int k); | |
| | | | |
| /* ****************** metadata ******************* */ | | /* ****************** metadata ******************* */ | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup metadata | |
| * Meta data to associate with a file, directory or namespace. | | * Meta data to associate with a file, directory or namespace. | |
| */ | | */ | |
| struct GNUNET_CONTAINER_MetaData; | | struct GNUNET_CONTAINER_MetaData; | |
| | | | |
| /** | | /** | |
|
| * Create a fresh MetaData token. | | * @ingroup metadata | |
| | | * Create a fresh meta data container. | |
| * | | * | |
| * @return empty meta-data container | | * @return empty meta-data container | |
| */ | | */ | |
| struct GNUNET_CONTAINER_MetaData * | | struct GNUNET_CONTAINER_MetaData * | |
| GNUNET_CONTAINER_meta_data_create (void); | | GNUNET_CONTAINER_meta_data_create (void); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup metadata | |
| * Duplicate a MetaData token. | | * Duplicate a MetaData token. | |
| * | | * | |
| * @param md what to duplicate | | * @param md what to duplicate | |
| * @return duplicate meta-data container | | * @return duplicate meta-data container | |
| */ | | */ | |
| struct GNUNET_CONTAINER_MetaData * | | struct GNUNET_CONTAINER_MetaData * | |
| GNUNET_CONTAINER_meta_data_duplicate (const struct GNUNET_CONTAINER_MetaDat
a | | GNUNET_CONTAINER_meta_data_duplicate (const struct GNUNET_CONTAINER_MetaDat
a | |
| *md); | | *md); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup metadata | |
| * Free meta data. | | * Free meta data. | |
| * | | * | |
| * @param md what to free | | * @param md what to free | |
| */ | | */ | |
| void | | void | |
| GNUNET_CONTAINER_meta_data_destroy (struct GNUNET_CONTAINER_MetaData *md); | | GNUNET_CONTAINER_meta_data_destroy (struct GNUNET_CONTAINER_MetaData *md); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup metadata | |
| * Test if two MDs are equal. We consider them equal if | | * Test if two MDs are equal. We consider them equal if | |
| * the meta types, formats and content match (we do not | | * the meta types, formats and content match (we do not | |
| * include the mime types and plugins names in this | | * include the mime types and plugins names in this | |
| * consideration). | | * consideration). | |
| * | | * | |
| * @param md1 first value to check | | * @param md1 first value to check | |
| * @param md2 other value to check | | * @param md2 other value to check | |
|
| * @return GNUNET_YES if they are equal | | * @return #GNUNET_YES if they are equal | |
| */ | | */ | |
| int | | int | |
|
| GNUNET_CONTAINER_meta_data_test_equal (const struct GNUNET_CONTAINER_MetaDa | | GNUNET_CONTAINER_meta_data_test_equal (const struct GNUNET_CONTAINER_MetaDa | |
| ta | | ta *md1, | |
| *md1, | | const struct GNUNET_CONTAINER_MetaDa | |
| const struct GNUNET_CONTAINER_MetaDa | | ta *md2); | |
| ta | | | |
| *md2); | | | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup metadata | |
| * Extend metadata. | | * Extend metadata. | |
| * | | * | |
| * @param md metadata to extend | | * @param md metadata to extend | |
| * @param plugin_name name of the plugin that produced this value; | | * @param plugin_name name of the plugin that produced this value; | |
| * special values can be used (i.e. '<zlib>' for zlib being | | * special values can be used (i.e. '<zlib>' for zlib being | |
| * used in the main libextractor library and yielding | | * used in the main libextractor library and yielding | |
| * meta data). | | * meta data). | |
| * @param type libextractor-type describing the meta data | | * @param type libextractor-type describing the meta data | |
| * @param format basic format information about data | | * @param format basic format information about data | |
| * @param data_mime_type mime-type of data (not of the original file); | | * @param data_mime_type mime-type of data (not of the original file); | |
| * can be NULL (if mime-type is not known) | | * can be NULL (if mime-type is not known) | |
| * @param data actual meta-data found | | * @param data actual meta-data found | |
| * @param data_size number of bytes in data | | * @param data_size number of bytes in data | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR if this entry already exists | | * @return #GNUNET_OK on success, #GNUNET_SYSERR if this entry already exis
ts | |
| * data_mime_type and plugin_name are not considered for "exists" c
hecks | | * data_mime_type and plugin_name are not considered for "exists" c
hecks | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONTAINER_meta_data_insert (struct GNUNET_CONTAINER_MetaData *md, | | GNUNET_CONTAINER_meta_data_insert (struct GNUNET_CONTAINER_MetaData *md, | |
| const char *plugin_name, | | const char *plugin_name, | |
| enum EXTRACTOR_MetaType type, | | enum EXTRACTOR_MetaType type, | |
| enum EXTRACTOR_MetaFormat format, | | enum EXTRACTOR_MetaFormat format, | |
| const char *data_mime_type, const char *
data, | | const char *data_mime_type, const char *
data, | |
| size_t data_size); | | size_t data_size); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup metadata | |
| * Extend metadata. Merges the meta data from the second argument | | * Extend metadata. Merges the meta data from the second argument | |
| * into the first, discarding duplicate key-value pairs. | | * into the first, discarding duplicate key-value pairs. | |
| * | | * | |
| * @param md metadata to extend | | * @param md metadata to extend | |
| * @param in metadata to merge | | * @param in metadata to merge | |
| */ | | */ | |
| void | | void | |
| GNUNET_CONTAINER_meta_data_merge (struct GNUNET_CONTAINER_MetaData *md, | | GNUNET_CONTAINER_meta_data_merge (struct GNUNET_CONTAINER_MetaData *md, | |
| const struct GNUNET_CONTAINER_MetaData *i
n); | | const struct GNUNET_CONTAINER_MetaData *i
n); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup metadata | |
| * Remove an item. | | * Remove an item. | |
| * | | * | |
| * @param md metadata to manipulate | | * @param md metadata to manipulate | |
| * @param type type of the item to remove | | * @param type type of the item to remove | |
| * @param data specific value to remove, NULL to remove all | | * @param data specific value to remove, NULL to remove all | |
| * entries of the given type | | * entries of the given type | |
| * @param data_size number of bytes in data | | * @param data_size number of bytes in data | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR if the item does not exist i
n md | | * @return #GNUNET_OK on success, #GNUNET_SYSERR if the item does not exist
in md | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONTAINER_meta_data_delete (struct GNUNET_CONTAINER_MetaData *md, | | GNUNET_CONTAINER_meta_data_delete (struct GNUNET_CONTAINER_MetaData *md, | |
| enum EXTRACTOR_MetaType type, | | enum EXTRACTOR_MetaType type, | |
| const char *data, size_t data_size); | | const char *data, size_t data_size); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup metadata | |
| * Remove all items in the container. | | * Remove all items in the container. | |
| * | | * | |
| * @param md metadata to manipulate | | * @param md metadata to manipulate | |
| */ | | */ | |
| void | | void | |
| GNUNET_CONTAINER_meta_data_clear (struct GNUNET_CONTAINER_MetaData *md); | | GNUNET_CONTAINER_meta_data_clear (struct GNUNET_CONTAINER_MetaData *md); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup metadata | |
| * Add the current time as the publication date | | * Add the current time as the publication date | |
| * to the meta-data. | | * to the meta-data. | |
| * | | * | |
| * @param md metadata to modify | | * @param md metadata to modify | |
| */ | | */ | |
| void | | void | |
| GNUNET_CONTAINER_meta_data_add_publication_date (struct | | GNUNET_CONTAINER_meta_data_add_publication_date (struct | |
| GNUNET_CONTAINER_MetaData
*md); | | GNUNET_CONTAINER_MetaData
*md); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup metadata | |
| * Iterate over MD entries. | | * Iterate over MD entries. | |
| * | | * | |
| * @param md metadata to inspect | | * @param md metadata to inspect | |
|
| * @param iter function to call on each entry | | * @param iter function to call on each entry, return 0 to continue to iter | |
| * @param iter_cls closure for iterator | | ate | |
| | | * and 1 to abort iteration in this function (GNU libextractor | |
| | | API!) | |
| | | * @param iter_cls closure for @a iter | |
| * @return number of entries | | * @return number of entries | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONTAINER_meta_data_iterate (const struct GNUNET_CONTAINER_MetaData
*md, | | GNUNET_CONTAINER_meta_data_iterate (const struct GNUNET_CONTAINER_MetaData
*md, | |
| EXTRACTOR_MetaDataProcessor iter, | | EXTRACTOR_MetaDataProcessor iter, | |
| void *iter_cls); | | void *iter_cls); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup metadata | |
| * Get the first MD entry of the given type. Caller | | * Get the first MD entry of the given type. Caller | |
| * is responsible for freeing the return value. | | * is responsible for freeing the return value. | |
| * Also, only meta data items that are strings (0-terminated) | | * Also, only meta data items that are strings (0-terminated) | |
| * are returned by this function. | | * are returned by this function. | |
| * | | * | |
| * @param md metadata to inspect | | * @param md metadata to inspect | |
| * @param type type to look for | | * @param type type to look for | |
| * @return NULL if no entry was found | | * @return NULL if no entry was found | |
| */ | | */ | |
| char * | | char * | |
| GNUNET_CONTAINER_meta_data_get_by_type (const struct GNUNET_CONTAINER_MetaD
ata | | GNUNET_CONTAINER_meta_data_get_by_type (const struct GNUNET_CONTAINER_MetaD
ata | |
| *md, enum EXTRACTOR_MetaType type); | | *md, enum EXTRACTOR_MetaType type); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup metadata | |
| * Get the first matching MD entry of the given types. Caller is | | * Get the first matching MD entry of the given types. Caller is | |
| * responsible for freeing the return value. Also, only meta data | | * responsible for freeing the return value. Also, only meta data | |
| * items that are strings (0-terminated) are returned by this | | * items that are strings (0-terminated) are returned by this | |
| * function. | | * function. | |
| * | | * | |
| * @param md metadata to inspect | | * @param md metadata to inspect | |
| * @param ... -1-terminated list of types | | * @param ... -1-terminated list of types | |
| * @return NULL if we do not have any such entry, | | * @return NULL if we do not have any such entry, | |
| * otherwise client is responsible for freeing the value! | | * otherwise client is responsible for freeing the value! | |
| */ | | */ | |
| char * | | char * | |
| GNUNET_CONTAINER_meta_data_get_first_by_types (const struct | | GNUNET_CONTAINER_meta_data_get_first_by_types (const struct | |
| GNUNET_CONTAINER_MetaData *m
d, | | GNUNET_CONTAINER_MetaData *m
d, | |
| ...); | | ...); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup metadata | |
| * Get a thumbnail from the meta-data (if present). Only matches meta | | * Get a thumbnail from the meta-data (if present). Only matches meta | |
| * data with mime type "image" and binary format. | | * data with mime type "image" and binary format. | |
| * | | * | |
| * @param md metadata to inspect | | * @param md metadata to inspect | |
| * @param thumb will be set to the thumbnail data. Must be | | * @param thumb will be set to the thumbnail data. Must be | |
| * freed by the caller! | | * freed by the caller! | |
| * @return number of bytes in thumbnail, 0 if not available | | * @return number of bytes in thumbnail, 0 if not available | |
| */ | | */ | |
| size_t | | size_t | |
| GNUNET_CONTAINER_meta_data_get_thumbnail (const struct GNUNET_CONTAINER_Met
aData | | GNUNET_CONTAINER_meta_data_get_thumbnail (const struct GNUNET_CONTAINER_Met
aData | |
| *md, unsigned char **thumb); | | *md, unsigned char **thumb); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup metadata | |
| * Options for metadata serialization. | | * Options for metadata serialization. | |
| */ | | */ | |
| enum GNUNET_CONTAINER_MetaDataSerializationOptions | | enum GNUNET_CONTAINER_MetaDataSerializationOptions | |
| { | | { | |
| /** | | /** | |
|
| | | * @ingroup metadata | |
| * Serialize all of the data. | | * Serialize all of the data. | |
| */ | | */ | |
| GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL = 0, | | GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL = 0, | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup metadata | |
| * If not enough space is available, it is acceptable | | * If not enough space is available, it is acceptable | |
| * to only serialize some of the metadata. | | * to only serialize some of the metadata. | |
| */ | | */ | |
| GNUNET_CONTAINER_META_DATA_SERIALIZE_PART = 1, | | GNUNET_CONTAINER_META_DATA_SERIALIZE_PART = 1, | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup metadata | |
| * Speed is of the essence, do not allow compression. | | * Speed is of the essence, do not allow compression. | |
| */ | | */ | |
| GNUNET_CONTAINER_META_DATA_SERIALIZE_NO_COMPRESS = 2 | | GNUNET_CONTAINER_META_DATA_SERIALIZE_NO_COMPRESS = 2 | |
| }; | | }; | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup metadata | |
| * Serialize meta-data to target. | | * Serialize meta-data to target. | |
| * | | * | |
| * @param md metadata to serialize | | * @param md metadata to serialize | |
| * @param target where to write the serialized metadata; | | * @param target where to write the serialized metadata; | |
| * *target can be NULL, in which case memory is allocated | | * *target can be NULL, in which case memory is allocated | |
| * @param max maximum number of bytes available | | * @param max maximum number of bytes available | |
| * @param opt is it ok to just write SOME of the | | * @param opt is it ok to just write SOME of the | |
| * meta-data to match the size constraint, | | * meta-data to match the size constraint, | |
| * possibly discarding some data? | | * possibly discarding some data? | |
| * @return number of bytes written on success, | | * @return number of bytes written on success, | |
| | | | |
| skipping to change at line 440 | | skipping to change at line 489 | |
| * space) | | * space) | |
| */ | | */ | |
| ssize_t | | ssize_t | |
| GNUNET_CONTAINER_meta_data_serialize (const struct GNUNET_CONTAINER_MetaDat
a | | GNUNET_CONTAINER_meta_data_serialize (const struct GNUNET_CONTAINER_MetaDat
a | |
| *md, char **target, size_t max, | | *md, char **target, size_t max, | |
| enum | | enum | |
| GNUNET_CONTAINER_MetaDataSerializatio
nOptions | | GNUNET_CONTAINER_MetaDataSerializatio
nOptions | |
| opt); | | opt); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup metadata | |
| * Get the size of the full meta-data in serialized form. | | * Get the size of the full meta-data in serialized form. | |
| * | | * | |
| * @param md metadata to inspect | | * @param md metadata to inspect | |
| * @return number of bytes needed for serialization, -1 on error | | * @return number of bytes needed for serialization, -1 on error | |
| */ | | */ | |
| ssize_t | | ssize_t | |
| GNUNET_CONTAINER_meta_data_get_serialized_size (const struct | | GNUNET_CONTAINER_meta_data_get_serialized_size (const struct | |
| GNUNET_CONTAINER_MetaData *
md); | | GNUNET_CONTAINER_MetaData *
md); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup metadata | |
| * Deserialize meta-data. Initializes md. | | * Deserialize meta-data. Initializes md. | |
| * | | * | |
| * @param input serialized meta-data. | | * @param input serialized meta-data. | |
| * @param size number of bytes available | | * @param size number of bytes available | |
| * @return MD on success, NULL on error (i.e. | | * @return MD on success, NULL on error (i.e. | |
| * bad format) | | * bad format) | |
| */ | | */ | |
| struct GNUNET_CONTAINER_MetaData * | | struct GNUNET_CONTAINER_MetaData * | |
| GNUNET_CONTAINER_meta_data_deserialize (const char *input, size_t size); | | GNUNET_CONTAINER_meta_data_deserialize (const char *input, size_t size); | |
| | | | |
| /* ******************************* HashMap **************************** */ | | /* ******************************* HashMap **************************** */ | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hashmap | |
| * Opaque handle for a HashMap. | | * Opaque handle for a HashMap. | |
| */ | | */ | |
| struct GNUNET_CONTAINER_MultiHashMap; | | struct GNUNET_CONTAINER_MultiHashMap; | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hashmap | |
| | | * Opaque handle to an iterator over | |
| | | * a multihashmap. | |
| | | */ | |
| | | struct GNUNET_CONTAINER_MultiHashMapIterator; | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| * Options for storing values in the HashMap. | | * Options for storing values in the HashMap. | |
| */ | | */ | |
| enum GNUNET_CONTAINER_MultiHashMapOption | | enum GNUNET_CONTAINER_MultiHashMapOption | |
| { | | { | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hashmap | |
| * If a value with the given key exists, replace it. Note that the | | * If a value with the given key exists, replace it. Note that the | |
| * old value would NOT be freed by replace (the application has to | | * old value would NOT be freed by replace (the application has to | |
| * make sure that this happens if required). | | * make sure that this happens if required). | |
| */ | | */ | |
| GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE, | | GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE, | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hashmap | |
| * Allow multiple values with the same key. | | * Allow multiple values with the same key. | |
| */ | | */ | |
| GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE, | | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE, | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hashmap | |
| * There must only be one value per key; storing a value should fail | | * There must only be one value per key; storing a value should fail | |
| * if a value under the same key already exists. | | * if a value under the same key already exists. | |
| */ | | */ | |
| GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY, | | GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY, | |
| | | | |
| /** | | /** | |
|
| * There must only be one value per key, but don't bother checking | | * @ingroup hashmap There must only be one value per key, but don't | |
| * if a value already exists (faster than UNIQUE_ONLY; implemented | | * bother checking if a value already exists (faster than | |
| * just like MULTIPLE but this option documents better what is | | * #GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY; implemented | |
| * intended if UNIQUE is what is desired). | | * just like #GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE but this | |
| | | * option documents better what is intended if | |
| | | * #GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY is what is | |
| | | * desired). | |
| */ | | */ | |
| GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST | | GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST | |
| }; | | }; | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hashmap | |
| * Iterator over hash map entries. | | * Iterator over hash map entries. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param key current key code | | * @param key current key code | |
| * @param value value in the hash map | | * @param value value in the hash map | |
|
| * @return GNUNET_YES if we should continue to | | * @return #GNUNET_YES if we should continue to | |
| * iterate, | | * iterate, | |
|
| * GNUNET_NO if not. | | * #GNUNET_NO if not. | |
| */ | | */ | |
| typedef int (*GNUNET_CONTAINER_HashMapIterator) (void *cls, | | typedef int (*GNUNET_CONTAINER_HashMapIterator) (void *cls, | |
|
| const struct GNUNET_HashCo
de * key, | | const struct GNUNET_HashCo
de *key, | |
| void *value); | | void *value); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hashmap | |
| * Create a multi hash map. | | * Create a multi hash map. | |
| * | | * | |
| * @param len initial size (map will grow as needed) | | * @param len initial size (map will grow as needed) | |
|
| * @param do_not_copy_keys GNUNET_NO is always safe and should be used by d | | * @param do_not_copy_keys #GNUNET_NO is always safe and should be used by | |
| efault; | | default; | |
| * GNUNET_YES means that on 'put', the 'key' does n | | * #GNUNET_YES means that on 'put', the 'key' does | |
| ot have | | not have | |
| * to be copied as the destination of the pointer i
s | | * to be copied as the destination of the pointer i
s | |
| * guaranteed to be life as long as the value is st
ored in | | * guaranteed to be life as long as the value is st
ored in | |
| * the hashmap. This can significantly reduce memo
ry | | * the hashmap. This can significantly reduce memo
ry | |
| * consumption, but of course is also a recipie for | | * consumption, but of course is also a recipie for | |
| * heap corruption if the assumption is not true.
Only | | * heap corruption if the assumption is not true.
Only | |
| * use this if (1) memory use is important in this
case and | | * use this if (1) memory use is important in this
case and | |
| * (2) you have triple-checked that the invariant h
olds | | * (2) you have triple-checked that the invariant h
olds | |
| * @return NULL on error | | * @return NULL on error | |
| */ | | */ | |
| struct GNUNET_CONTAINER_MultiHashMap * | | struct GNUNET_CONTAINER_MultiHashMap * | |
| GNUNET_CONTAINER_multihashmap_create (unsigned int len, | | GNUNET_CONTAINER_multihashmap_create (unsigned int len, | |
| int do_not_copy_keys); | | int do_not_copy_keys); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hashmap | |
| * Destroy a hash map. Will not free any values | | * Destroy a hash map. Will not free any values | |
| * stored in the hash map! | | * stored in the hash map! | |
| * | | * | |
| * @param map the map | | * @param map the map | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_CONTAINER_multihashmap_destroy (struct GNUNET_CONTAINER_MultiHashMap | | GNUNET_CONTAINER_multihashmap_destroy (struct GNUNET_CONTAINER_MultiHashMap | |
| *map); | | *map); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hashmap | |
| * Given a key find a value in the map matching the key. | | * Given a key find a value in the map matching the key. | |
| * | | * | |
| * @param map the map | | * @param map the map | |
| * @param key what to look for | | * @param key what to look for | |
| * @return NULL if no value was found; note that | | * @return NULL if no value was found; note that | |
| * this is indistinguishable from values that just | | * this is indistinguishable from values that just | |
| * happen to be NULL; use "contains" to test for | | * happen to be NULL; use "contains" to test for | |
| * key-value pairs with value NULL | | * key-value pairs with value NULL | |
| */ | | */ | |
| void * | | void * | |
|
| GNUNET_CONTAINER_multihashmap_get (const struct GNUNET_CONTAINER_MultiHashM | | GNUNET_CONTAINER_multihashmap_get (const struct GNUNET_CONTAINER_MultiHashM | |
| ap | | ap *map, | |
| *map, const struct GNUNET_HashCode * key | | const struct GNUNET_HashCode *key); | |
| ); | | | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hashmap | |
| * Remove the given key-value pair from the map. Note that if the | | * Remove the given key-value pair from the map. Note that if the | |
| * key-value pair is in the map multiple times, only one of the pairs | | * key-value pair is in the map multiple times, only one of the pairs | |
| * will be removed. | | * will be removed. | |
| * | | * | |
| * @param map the map | | * @param map the map | |
| * @param key key of the key-value pair | | * @param key key of the key-value pair | |
| * @param value value of the key-value pair | | * @param value value of the key-value pair | |
|
| * @return GNUNET_YES on success, GNUNET_NO if the key-value pair | | * @return #GNUNET_YES on success, #GNUNET_NO if the key-value pair | |
| * is not in the map | | * is not in the map | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONTAINER_multihashmap_remove (struct GNUNET_CONTAINER_MultiHashMap
*map, | | GNUNET_CONTAINER_multihashmap_remove (struct GNUNET_CONTAINER_MultiHashMap
*map, | |
|
| const struct GNUNET_HashCode * key, v | | const struct GNUNET_HashCode *key, | |
| oid *value); | | const void *value); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hashmap | |
| * Remove all entries for the given key from the map. | | * Remove all entries for the given key from the map. | |
| * Note that the values would not be "freed". | | * Note that the values would not be "freed". | |
| * | | * | |
| * @param map the map | | * @param map the map | |
| * @param key identifies values to be removed | | * @param key identifies values to be removed | |
| * @return number of values removed | | * @return number of values removed | |
| */ | | */ | |
| int | | int | |
|
| GNUNET_CONTAINER_multihashmap_remove_all (struct GNUNET_CONTAINER_MultiHash | | GNUNET_CONTAINER_multihashmap_remove_all (struct GNUNET_CONTAINER_MultiHash | |
| Map | | Map *map, | |
| *map, const struct GNUNET_HashCod | | const struct GNUNET_HashCode *key | |
| e * key); | | ); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hashmap | |
| * Check if the map contains any value under the given | | * Check if the map contains any value under the given | |
| * key (including values that are NULL). | | * key (including values that are NULL). | |
| * | | * | |
| * @param map the map | | * @param map the map | |
| * @param key the key to test if a value exists for it | | * @param key the key to test if a value exists for it | |
|
| * @return GNUNET_YES if such a value exists, | | * @return #GNUNET_YES if such a value exists, | |
| * GNUNET_NO if not | | * #GNUNET_NO if not | |
| */ | | */ | |
| int | | int | |
|
| GNUNET_CONTAINER_multihashmap_contains (const struct | | GNUNET_CONTAINER_multihashmap_contains (const struct GNUNET_CONTAINER_Multi | |
| GNUNET_CONTAINER_MultiHashMap *map, | | HashMap *map, | |
| const struct GNUNET_HashCode * key)
; | | const struct GNUNET_HashCode * key)
; | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hashmap | |
| * Check if the map contains the given value under the given | | * Check if the map contains the given value under the given | |
| * key. | | * key. | |
| * | | * | |
| * @param map the map | | * @param map the map | |
| * @param key the key to test if a value exists for it | | * @param key the key to test if a value exists for it | |
| * @param value value to test for | | * @param value value to test for | |
|
| * @return GNUNET_YES if such a value exists, | | * @return #GNUNET_YES if such a value exists, | |
| * GNUNET_NO if not | | * #GNUNET_NO if not | |
| */ | | */ | |
| int | | int | |
|
| GNUNET_CONTAINER_multihashmap_contains_value (const struct | | GNUNET_CONTAINER_multihashmap_contains_value (const struct GNUNET_CONTAINER | |
| GNUNET_CONTAINER_MultiHashMap | | _MultiHashMap *map, | |
| *map, const struct GNUNET_Has | | const struct GNUNET_HashCode | |
| hCode * key, | | *key, | |
| const void *value); | | const void *value); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hashmap | |
| * Store a key-value pair in the map. | | * Store a key-value pair in the map. | |
| * | | * | |
| * @param map the map | | * @param map the map | |
| * @param key key to use | | * @param key key to use | |
| * @param value value to use | | * @param value value to use | |
| * @param opt options for put | | * @param opt options for put | |
|
| * @return GNUNET_OK on success, | | * @return #GNUNET_OK on success, | |
| * GNUNET_NO if a value was replaced (with REPLACE) | | * #GNUNET_NO if a value was replaced (with REPLACE) | |
| * GNUNET_SYSERR if UNIQUE_ONLY was the option and the | | * #GNUNET_SYSERR if #GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ON | |
| | | LY was the option and the | |
| * value already exists | | * value already exists | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONTAINER_multihashmap_put (struct GNUNET_CONTAINER_MultiHashMap *ma
p, | | GNUNET_CONTAINER_multihashmap_put (struct GNUNET_CONTAINER_MultiHashMap *ma
p, | |
|
| const struct GNUNET_HashCode * key, void | | const struct GNUNET_HashCode *key, | |
| *value, | | void *value, | |
| enum GNUNET_CONTAINER_MultiHashMapOption | | enum GNUNET_CONTAINER_MultiHashMapOption | |
| opt); | | opt); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hashmap | |
| * Get the number of key-value pairs in the map. | | * Get the number of key-value pairs in the map. | |
| * | | * | |
| * @param map the map | | * @param map the map | |
| * @return the number of key value pairs | | * @return the number of key value pairs | |
| */ | | */ | |
| unsigned int | | unsigned int | |
| GNUNET_CONTAINER_multihashmap_size (const struct GNUNET_CONTAINER_MultiHash
Map | | GNUNET_CONTAINER_multihashmap_size (const struct GNUNET_CONTAINER_MultiHash
Map | |
| *map); | | *map); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hashmap | |
| * Iterate over all entries in the map. | | * Iterate over all entries in the map. | |
| * | | * | |
| * @param map the map | | * @param map the map | |
| * @param it function to call on each entry | | * @param it function to call on each entry | |
|
| * @param it_cls extra argument to it | | * @param it_cls extra argument to @a it | |
| * @return the number of key value pairs processed, | | * @return the number of key value pairs processed, | |
|
| * GNUNET_SYSERR if it aborted iteration | | * #GNUNET_SYSERR if it aborted iteration | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONTAINER_multihashmap_iterate (const struct | | GNUNET_CONTAINER_multihashmap_iterate (const struct | |
| GNUNET_CONTAINER_MultiHashMap *map, | | GNUNET_CONTAINER_MultiHashMap *map, | |
| GNUNET_CONTAINER_HashMapIterator it, | | GNUNET_CONTAINER_HashMapIterator it, | |
| void *it_cls); | | void *it_cls); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hashmap | |
| | | * Create an iterator for a multihashmap. | |
| | | * The iterator can be used to retrieve all the elements in the multihashma | |
| | | p | |
| | | * one by one, without having to handle all elements at once (in contrast t | |
| | | o | |
| | | * #GNUNET_CONTAINER_multihashmap_iterate). Note that the iterator can not | |
| | | be | |
| | | * used anymore if elements have been removed from 'map' after the creation | |
| | | of | |
| | | * the iterator, or 'map' has been destroyed. Adding elements to 'map' may | |
| | | * result in skipped or repeated elements. | |
| | | * | |
| | | * @param map the map to create an iterator for | |
| | | * @return an iterator over the given multihashmap @a map | |
| | | */ | |
| | | struct GNUNET_CONTAINER_MultiHashMapIterator * | |
| | | GNUNET_CONTAINER_multihashmap_iterator_create (const struct GNUNET_CONTAINE | |
| | | R_MultiHashMap *map); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Retrieve the next element from the hash map at the iterator's | |
| | | * position. If there are no elements left, #GNUNET_NO is returned, | |
| | | * and @a key and @a value are not modified. This operation is only | |
| | | * allowed if no elements have been removed from the multihashmap | |
| | | * since the creation of @a iter, and the map has not been destroyed. | |
| | | * Adding elements may result in repeating or skipping elements. | |
| | | * | |
| | | * @param iter the iterator to get the next element from | |
| | | * @param key pointer to store the key in, can be NULL | |
| | | * @param value pointer to store the value in, can be NULL | |
| | | * @return #GNUNET_YES we returned an element, | |
| | | * #GNUNET_NO if we are out of elements | |
| | | */ | |
| | | int | |
| | | GNUNET_CONTAINER_multihashmap_iterator_next (struct GNUNET_CONTAINER_MultiH | |
| | | ashMapIterator *iter, | |
| | | struct GNUNET_HashCode *key, | |
| | | const void **value); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Destroy a multihashmap iterator. | |
| | | * | |
| | | * @param iter the iterator to destroy | |
| | | */ | |
| | | void | |
| | | GNUNET_CONTAINER_multihashmap_iterator_destroy (struct GNUNET_CONTAINER_Mul | |
| | | tiHashMapIterator *iter); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| * Iterate over all entries in the map that match a particular key. | | * Iterate over all entries in the map that match a particular key. | |
| * | | * | |
| * @param map the map | | * @param map the map | |
| * @param key key that the entries must correspond to | | * @param key key that the entries must correspond to | |
| * @param it function to call on each entry | | * @param it function to call on each entry | |
|
| * @param it_cls extra argument to it | | * @param it_cls extra argument to @a it | |
| * @return the number of key value pairs processed, | | * @return the number of key value pairs processed, | |
|
| * GNUNET_SYSERR if it aborted iteration | | * #GNUNET_SYSERR if it aborted iteration | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONTAINER_multihashmap_get_multiple (const struct | | GNUNET_CONTAINER_multihashmap_get_multiple (const struct | |
| GNUNET_CONTAINER_MultiHashMap *
map, | | GNUNET_CONTAINER_MultiHashMap *
map, | |
| const struct GNUNET_HashCode *
key, | | const struct GNUNET_HashCode *
key, | |
| GNUNET_CONTAINER_HashMapIterato
r it, | | GNUNET_CONTAINER_HashMapIterato
r it, | |
| void *it_cls); | | void *it_cls); | |
| | | | |
|
| | | /* ***************** Version of Multihashmap for peer identities ********** | |
| | | ******** */ | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Iterator over hash map entries. | |
| | | * | |
| | | * @param cls closure | |
| | | * @param key current public key | |
| | | * @param value value in the hash map | |
| | | * @return #GNUNET_YES if we should continue to | |
| | | * iterate, | |
| | | * #GNUNET_NO if not. | |
| | | */ | |
| | | typedef int (*GNUNET_CONTAINER_PeerMapIterator) (void *cls, | |
| | | const struct GNUNET_PeerId | |
| | | entity *key, | |
| | | void *value); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Create a multi peer map (hash map for public keys of peers). | |
| | | * | |
| | | * @param len initial size (map will grow as needed) | |
| | | * @param do_not_copy_keys #GNUNET_NO is always safe and should be used by | |
| | | default; | |
| | | * #GNUNET_YES means that on 'put', the 'key' does | |
| | | not have | |
| | | * to be copied as the destination of the pointer i | |
| | | s | |
| | | * guaranteed to be life as long as the value is st | |
| | | ored in | |
| | | * the hashmap. This can significantly reduce memo | |
| | | ry | |
| | | * consumption, but of course is also a recipie for | |
| | | * heap corruption if the assumption is not true. | |
| | | Only | |
| | | * use this if (1) memory use is important in this | |
| | | case and | |
| | | * (2) you have triple-checked that the invariant h | |
| | | olds | |
| | | * @return NULL on error | |
| | | */ | |
| | | struct GNUNET_CONTAINER_MultiPeerMap * | |
| | | GNUNET_CONTAINER_multipeermap_create (unsigned int len, | |
| | | int do_not_copy_keys); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Destroy a hash map. Will not free any values | |
| | | * stored in the hash map! | |
| | | * | |
| | | * @param map the map | |
| | | */ | |
| | | void | |
| | | GNUNET_CONTAINER_multipeermap_destroy (struct GNUNET_CONTAINER_MultiPeerMap | |
| | | *map); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Given a key find a value in the map matching the key. | |
| | | * | |
| | | * @param map the map | |
| | | * @param key what to look for | |
| | | * @return NULL if no value was found; note that | |
| | | * this is indistinguishable from values that just | |
| | | * happen to be NULL; use "contains" to test for | |
| | | * key-value pairs with value NULL | |
| | | */ | |
| | | void * | |
| | | GNUNET_CONTAINER_multipeermap_get (const struct GNUNET_CONTAINER_MultiPeerM | |
| | | ap *map, | |
| | | const struct GNUNET_PeerIdentity *key); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Remove the given key-value pair from the map. Note that if the | |
| | | * key-value pair is in the map multiple times, only one of the pairs | |
| | | * will be removed. | |
| | | * | |
| | | * @param map the map | |
| | | * @param key key of the key-value pair | |
| | | * @param value value of the key-value pair | |
| | | * @return #GNUNET_YES on success, #GNUNET_NO if the key-value pair | |
| | | * is not in the map | |
| | | */ | |
| | | int | |
| | | GNUNET_CONTAINER_multipeermap_remove (struct GNUNET_CONTAINER_MultiPeerMap | |
| | | *map, | |
| | | const struct GNUNET_PeerIdentity * ke | |
| | | y, | |
| | | const void *value); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Remove all entries for the given key from the map. | |
| | | * Note that the values would not be "freed". | |
| | | * | |
| | | * @param map the map | |
| | | * @param key identifies values to be removed | |
| | | * @return number of values removed | |
| | | */ | |
| | | int | |
| | | GNUNET_CONTAINER_multipeermap_remove_all (struct GNUNET_CONTAINER_MultiPeer | |
| | | Map *map, | |
| | | const struct GNUNET_PeerIdentity | |
| | | *key); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Check if the map contains any value under the given | |
| | | * key (including values that are NULL). | |
| | | * | |
| | | * @param map the map | |
| | | * @param key the key to test if a value exists for it | |
| | | * @return #GNUNET_YES if such a value exists, | |
| | | * #GNUNET_NO if not | |
| | | */ | |
| | | int | |
| | | GNUNET_CONTAINER_multipeermap_contains (const struct GNUNET_CONTAINER_Multi | |
| | | PeerMap *map, | |
| | | const struct GNUNET_PeerIdentity *k | |
| | | ey); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Check if the map contains the given value under the given | |
| | | * key. | |
| | | * | |
| | | * @param map the map | |
| | | * @param key the key to test if a value exists for it | |
| | | * @param value value to test for | |
| | | * @return #GNUNET_YES if such a value exists, | |
| | | * #GNUNET_NO if not | |
| | | */ | |
| | | int | |
| | | GNUNET_CONTAINER_multipeermap_contains_value (const struct GNUNET_CONTAINER | |
| | | _MultiPeerMap *map, | |
| | | const struct GNUNET_PeerIdent | |
| | | ity * key, | |
| | | const void *value); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Store a key-value pair in the map. | |
| | | * | |
| | | * @param map the map | |
| | | * @param key key to use | |
| | | * @param value value to use | |
| | | * @param opt options for put | |
| | | * @return #GNUNET_OK on success, | |
| | | * #GNUNET_NO if a value was replaced (with REPLACE) | |
| | | * #GNUNET_SYSERR if #GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ON | |
| | | LY was the option and the | |
| | | * value already exists | |
| | | */ | |
| | | int | |
| | | GNUNET_CONTAINER_multipeermap_put (struct GNUNET_CONTAINER_MultiPeerMap *ma | |
| | | p, | |
| | | const struct GNUNET_PeerIdentity *key, | |
| | | void *value, | |
| | | enum GNUNET_CONTAINER_MultiHashMapOption | |
| | | opt); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Get the number of key-value pairs in the map. | |
| | | * | |
| | | * @param map the map | |
| | | * @return the number of key value pairs | |
| | | */ | |
| | | unsigned int | |
| | | GNUNET_CONTAINER_multipeermap_size (const struct GNUNET_CONTAINER_MultiPeer | |
| | | Map *map); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Iterate over all entries in the map. | |
| | | * | |
| | | * @param map the map | |
| | | * @param it function to call on each entry | |
| | | * @param it_cls extra argument to @a it | |
| | | * @return the number of key value pairs processed, | |
| | | * #GNUNET_SYSERR if it aborted iteration | |
| | | */ | |
| | | int | |
| | | GNUNET_CONTAINER_multipeermap_iterate (const struct GNUNET_CONTAINER_MultiP | |
| | | eerMap *map, | |
| | | GNUNET_CONTAINER_PeerMapIterator it, | |
| | | void *it_cls); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Create an iterator for a multihashmap. | |
| | | * The iterator can be used to retrieve all the elements in the multihashma | |
| | | p | |
| | | * one by one, without having to handle all elements at once (in contrast t | |
| | | o | |
| | | * #GNUNET_CONTAINER_multipeermap_iterate). Note that the iterator can not | |
| | | be | |
| | | * used anymore if elements have been removed from @a map after the creatio | |
| | | n of | |
| | | * the iterator, or 'map' has been destroyed. Adding elements to @a map ma | |
| | | y | |
| | | * result in skipped or repeated elements. | |
| | | * | |
| | | * @param map the map to create an iterator for | |
| | | * @return an iterator over the given multihashmap @a map | |
| | | */ | |
| | | struct GNUNET_CONTAINER_MultiPeerMapIterator * | |
| | | GNUNET_CONTAINER_multipeermap_iterator_create (const struct GNUNET_CONTAINE | |
| | | R_MultiPeerMap *map); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Retrieve the next element from the hash map at the iterator's | |
| | | * position. If there are no elements left, #GNUNET_NO is returned, | |
| | | * and @a key and @a value are not modified. This operation is only | |
| | | * allowed if no elements have been removed from the multihashmap | |
| | | * since the creation of @a iter, and the map has not been destroyed. | |
| | | * Adding elements may result in repeating or skipping elements. | |
| | | * | |
| | | * @param iter the iterator to get the next element from | |
| | | * @param key pointer to store the key in, can be NULL | |
| | | * @param value pointer to store the value in, can be NULL | |
| | | * @return #GNUNET_YES we returned an element, | |
| | | * #GNUNET_NO if we are out of elements | |
| | | */ | |
| | | int | |
| | | GNUNET_CONTAINER_multipeermap_iterator_next (struct GNUNET_CONTAINER_MultiP | |
| | | eerMapIterator *iter, | |
| | | struct GNUNET_PeerIdentity *ke | |
| | | y, | |
| | | const void **value); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Destroy a multipeermap iterator. | |
| | | * | |
| | | * @param iter the iterator to destroy | |
| | | */ | |
| | | void | |
| | | GNUNET_CONTAINER_multipeermap_iterator_destroy (struct GNUNET_CONTAINER_Mul | |
| | | tiPeerMapIterator *iter); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Iterate over all entries in the map that match a particular key. | |
| | | * | |
| | | * @param map the map | |
| | | * @param key public key that the entries must correspond to | |
| | | * @param it function to call on each entry | |
| | | * @param it_cls extra argument to @a it | |
| | | * @return the number of key value pairs processed, | |
| | | * #GNUNET_SYSERR if it aborted iteration | |
| | | */ | |
| | | int | |
| | | GNUNET_CONTAINER_multipeermap_get_multiple (const struct GNUNET_CONTAINER_M | |
| | | ultiPeerMap *map, | |
| | | const struct GNUNET_PeerIdentit | |
| | | y *key, | |
| | | GNUNET_CONTAINER_PeerMapIterato | |
| | | r it, | |
| | | void *it_cls); | |
| | | | |
| | | /* Version of multihashmap with 32 bit keys */ | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Opaque handle for the 32-bit key HashMap. | |
| | | */ | |
| | | struct GNUNET_CONTAINER_MultiHashMap32; | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Opaque handle to an iterator over | |
| | | * a 32-bit key multihashmap. | |
| | | */ | |
| | | struct GNUNET_CONTAINER_MultiHashMap32Iterator; | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Iterator over hash map entries. | |
| | | * | |
| | | * @param cls closure | |
| | | * @param key current key code | |
| | | * @param value value in the hash map | |
| | | * @return #GNUNET_YES if we should continue to | |
| | | * iterate, | |
| | | * #GNUNET_NO if not. | |
| | | */ | |
| | | typedef int (*GNUNET_CONTAINER_HashMapIterator32) (void *cls, | |
| | | uint32_t key, | |
| | | void *value); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Create a 32-bit key multi hash map. | |
| | | * | |
| | | * @param len initial size (map will grow as needed) | |
| | | * @return NULL on error | |
| | | */ | |
| | | struct GNUNET_CONTAINER_MultiHashMap32 * | |
| | | GNUNET_CONTAINER_multihashmap32_create (unsigned int len); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Destroy a 32-bit key hash map. Will not free any values | |
| | | * stored in the hash map! | |
| | | * | |
| | | * @param map the map | |
| | | */ | |
| | | void | |
| | | GNUNET_CONTAINER_multihashmap32_destroy (struct GNUNET_CONTAINER_MultiHashM | |
| | | ap32 | |
| | | *map); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Get the number of key-value pairs in the map. | |
| | | * | |
| | | * @param map the map | |
| | | * @return the number of key value pairs | |
| | | */ | |
| | | unsigned int | |
| | | GNUNET_CONTAINER_multihashmap32_size (const struct | |
| | | GNUNET_CONTAINER_MultiHashMap32 *map) | |
| | | ; | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Given a key find a value in the map matching the key. | |
| | | * | |
| | | * @param map the map | |
| | | * @param key what to look for | |
| | | * @return NULL if no value was found; note that | |
| | | * this is indistinguishable from values that just | |
| | | * happen to be NULL; use "contains" to test for | |
| | | * key-value pairs with value NULL | |
| | | */ | |
| | | void * | |
| | | GNUNET_CONTAINER_multihashmap32_get (const struct | |
| | | GNUNET_CONTAINER_MultiHashMap32 *map, | |
| | | uint32_t key); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Iterate over all entries in the map. | |
| | | * | |
| | | * @param map the map | |
| | | * @param it function to call on each entry | |
| | | * @param it_cls extra argument to @a it | |
| | | * @return the number of key value pairs processed, | |
| | | * #GNUNET_SYSERR if it aborted iteration | |
| | | */ | |
| | | int | |
| | | GNUNET_CONTAINER_multihashmap32_iterate (const struct | |
| | | GNUNET_CONTAINER_MultiHashMap32 *m | |
| | | ap, | |
| | | GNUNET_CONTAINER_HashMapIterator32 | |
| | | it, | |
| | | void *it_cls); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Remove the given key-value pair from the map. Note that if the | |
| | | * key-value pair is in the map multiple times, only one of the pairs | |
| | | * will be removed. | |
| | | * | |
| | | * @param map the map | |
| | | * @param key key of the key-value pair | |
| | | * @param value value of the key-value pair | |
| | | * @return #GNUNET_YES on success, #GNUNET_NO if the key-value pair | |
| | | * is not in the map | |
| | | */ | |
| | | int | |
| | | GNUNET_CONTAINER_multihashmap32_remove (struct GNUNET_CONTAINER_MultiHashMa | |
| | | p32 *map, | |
| | | uint32_t key, | |
| | | const void *value); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Remove all entries for the given key from the map. | |
| | | * Note that the values would not be "freed". | |
| | | * | |
| | | * @param map the map | |
| | | * @param key identifies values to be removed | |
| | | * @return number of values removed | |
| | | */ | |
| | | int | |
| | | GNUNET_CONTAINER_multihashmap32_remove_all (struct GNUNET_CONTAINER_MultiHa | |
| | | shMap32 *map, | |
| | | uint32_t key); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Check if the map contains any value under the given | |
| | | * key (including values that are NULL). | |
| | | * | |
| | | * @param map the map | |
| | | * @param key the key to test if a value exists for it | |
| | | * @return #GNUNET_YES if such a value exists, | |
| | | * #GNUNET_NO if not | |
| | | */ | |
| | | int | |
| | | GNUNET_CONTAINER_multihashmap32_contains (const struct GNUNET_CONTAINER_Mul | |
| | | tiHashMap32 *map, | |
| | | uint32_t key); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Check if the map contains the given value under the given | |
| | | * key. | |
| | | * | |
| | | * @param map the map | |
| | | * @param key the key to test if a value exists for it | |
| | | * @param value value to test for | |
| | | * @return #GNUNET_YES if such a value exists, | |
| | | * #GNUNET_NO if not | |
| | | */ | |
| | | int | |
| | | GNUNET_CONTAINER_multihashmap32_contains_value (const struct GNUNET_CONTAIN | |
| | | ER_MultiHashMap32 *map, | |
| | | uint32_t key, | |
| | | const void *value); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Store a key-value pair in the map. | |
| | | * | |
| | | * @param map the map | |
| | | * @param key key to use | |
| | | * @param value value to use | |
| | | * @param opt options for put | |
| | | * @return #GNUNET_OK on success, | |
| | | * #GNUNET_NO if a value was replaced (with REPLACE) | |
| | | * #GNUNET_SYSERR if #GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ON | |
| | | LY was the option and the | |
| | | * value already exists | |
| | | */ | |
| | | int | |
| | | GNUNET_CONTAINER_multihashmap32_put (struct GNUNET_CONTAINER_MultiHashMap32 | |
| | | *map, | |
| | | uint32_t key, | |
| | | void *value, | |
| | | enum GNUNET_CONTAINER_MultiHashMapOpti | |
| | | on opt); | |
| | | | |
| | | /** | |
| | | * @ingroup hashmap | |
| | | * Iterate over all entries in the map that match a particular key. | |
| | | * | |
| | | * @param map the map | |
| | | * @param key key that the entries must correspond to | |
| | | * @param it function to call on each entry | |
| | | * @param it_cls extra argument to @a it | |
| | | * @return the number of key value pairs processed, | |
| | | * #GNUNET_SYSERR if it aborted iteration | |
| | | */ | |
| | | int | |
| | | GNUNET_CONTAINER_multihashmap32_get_multiple (const struct GNUNET_CONTAINER | |
| | | _MultiHashMap32 *map, | |
| | | uint32_t key, | |
| | | GNUNET_CONTAINER_HashMapItera | |
| | | tor32 it, | |
| | | void *it_cls); | |
| | | | |
| | | /** | |
| | | * Create an iterator for a 32-bit multihashmap. | |
| | | * The iterator can be used to retrieve all the elements in the multihashma | |
| | | p | |
| | | * one by one, without having to handle all elements at once (in contrast t | |
| | | o | |
| | | * #GNUNET_CONTAINER_multihashmap32_iterate). Note that the iterator can n | |
| | | ot be | |
| | | * used anymore if elements have been removed from 'map' after the creation | |
| | | of | |
| | | * the iterator, or 'map' has been destroyed. Adding elements to 'map' may | |
| | | * result in skipped or repeated elements. | |
| | | * | |
| | | * @param map the map to create an iterator for | |
| | | * @return an iterator over the given multihashmap map | |
| | | */ | |
| | | struct GNUNET_CONTAINER_MultiHashMap32Iterator * | |
| | | GNUNET_CONTAINER_multihashmap32_iterator_create (const struct GNUNET_CONTAI | |
| | | NER_MultiHashMap32 *map); | |
| | | | |
| | | /** | |
| | | * Retrieve the next element from the hash map at the iterator's position. | |
| | | * If there are no elements left, GNUNET_NO is returned, and 'key' and 'val | |
| | | ue' | |
| | | * are not modified. | |
| | | * This operation is only allowed if no elements have been removed from the | |
| | | * multihashmap since the creation of 'iter', and the map has not been dest | |
| | | royed. | |
| | | * Adding elements may result in repeating or skipping elements. | |
| | | * | |
| | | * @param iter the iterator to get the next element from | |
| | | * @param key pointer to store the key in, can be NULL | |
| | | * @param value pointer to store the value in, can be NULL | |
| | | * @return #GNUNET_YES we returned an element, | |
| | | * #GNUNET_NO if we are out of elements | |
| | | */ | |
| | | int | |
| | | GNUNET_CONTAINER_multihashmap32_iterator_next (struct GNUNET_CONTAINER_Mult | |
| | | iHashMap32Iterator *iter, | |
| | | uint32_t *key, | |
| | | const void **value); | |
| | | | |
| | | /** | |
| | | * Destroy a 32-bit multihashmap iterator. | |
| | | * | |
| | | * @param iter the iterator to destroy | |
| | | */ | |
| | | void | |
| | | GNUNET_CONTAINER_multihashmap32_iterator_destroy (struct GNUNET_CONTAINER_M | |
| | | ultiHashMapIterator *iter); | |
| | | | |
| /* ******************** doubly-linked list *************** */ | | /* ******************** doubly-linked list *************** */ | |
| /* To avoid mistakes: head->prev == tail->next == NULL */ | | /* To avoid mistakes: head->prev == tail->next == NULL */ | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup dll | |
| * Insert an element at the head of a DLL. Assumes that head, tail and | | * Insert an element at the head of a DLL. Assumes that head, tail and | |
| * element are structs with prev and next fields. | | * element are structs with prev and next fields. | |
| * | | * | |
| * @param head pointer to the head of the DLL | | * @param head pointer to the head of the DLL | |
| * @param tail pointer to the tail of the DLL | | * @param tail pointer to the tail of the DLL | |
| * @param element element to insert | | * @param element element to insert | |
| */ | | */ | |
| #define GNUNET_CONTAINER_DLL_insert(head,tail,element) do { \ | | #define GNUNET_CONTAINER_DLL_insert(head,tail,element) do { \ | |
| GNUNET_assert ( ( (element)->prev == NULL) && ((head) != (element))); \ | | GNUNET_assert ( ( (element)->prev == NULL) && ((head) != (element))); \ | |
| GNUNET_assert ( ( (element)->next == NULL) && ((tail) != (element))); \ | | GNUNET_assert ( ( (element)->next == NULL) && ((tail) != (element))); \ | |
| (element)->next = (head); \ | | (element)->next = (head); \ | |
| (element)->prev = NULL; \ | | (element)->prev = NULL; \ | |
| if ((tail) == NULL) \ | | if ((tail) == NULL) \ | |
| (tail) = element; \ | | (tail) = element; \ | |
| else \ | | else \ | |
| (head)->prev = element; \ | | (head)->prev = element; \ | |
| (head) = (element); } while (0) | | (head) = (element); } while (0) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup dll | |
| * Insert an element at the tail of a DLL. Assumes that head, tail and | | * Insert an element at the tail of a DLL. Assumes that head, tail and | |
| * element are structs with prev and next fields. | | * element are structs with prev and next fields. | |
| * | | * | |
| * @param head pointer to the head of the DLL | | * @param head pointer to the head of the DLL | |
| * @param tail pointer to the tail of the DLL | | * @param tail pointer to the tail of the DLL | |
| * @param element element to insert | | * @param element element to insert | |
| */ | | */ | |
| #define GNUNET_CONTAINER_DLL_insert_tail(head,tail,element) do { \ | | #define GNUNET_CONTAINER_DLL_insert_tail(head,tail,element) do { \ | |
| GNUNET_assert ( ( (element)->prev == NULL) && ((head) != (element))); \ | | GNUNET_assert ( ( (element)->prev == NULL) && ((head) != (element))); \ | |
| GNUNET_assert ( ( (element)->next == NULL) && ((tail) != (element))); \ | | GNUNET_assert ( ( (element)->next == NULL) && ((tail) != (element))); \ | |
| (element)->prev = (tail); \ | | (element)->prev = (tail); \ | |
| (element)->next = NULL; \ | | (element)->next = NULL; \ | |
| if ((head) == NULL) \ | | if ((head) == NULL) \ | |
| (head) = element; \ | | (head) = element; \ | |
| else \ | | else \ | |
| (tail)->next = element; \ | | (tail)->next = element; \ | |
| (tail) = (element); } while (0) | | (tail) = (element); } while (0) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup dll | |
| * Insert an element into a DLL after the given other element. Insert | | * Insert an element into a DLL after the given other element. Insert | |
| * at the head if the other element is NULL. | | * at the head if the other element is NULL. | |
| * | | * | |
| * @param head pointer to the head of the DLL | | * @param head pointer to the head of the DLL | |
| * @param tail pointer to the tail of the DLL | | * @param tail pointer to the tail of the DLL | |
| * @param other prior element, NULL for insertion at head of DLL | | * @param other prior element, NULL for insertion at head of DLL | |
| * @param element element to insert | | * @param element element to insert | |
| */ | | */ | |
| #define GNUNET_CONTAINER_DLL_insert_after(head,tail,other,element) do { \ | | #define GNUNET_CONTAINER_DLL_insert_after(head,tail,other,element) do { \ | |
| GNUNET_assert ( ( (element)->prev == NULL) && ((head) != (element))); \ | | GNUNET_assert ( ( (element)->prev == NULL) && ((head) != (element))); \ | |
| | | | |
| skipping to change at line 744 | | skipping to change at line 1329 | |
| { \ | | { \ | |
| (element)->next = (other)->next; \ | | (element)->next = (other)->next; \ | |
| (other)->next = (element); \ | | (other)->next = (element); \ | |
| } \ | | } \ | |
| if (NULL == (element)->next) \ | | if (NULL == (element)->next) \ | |
| (tail) = (element); \ | | (tail) = (element); \ | |
| else \ | | else \ | |
| (element)->next->prev = (element); } while (0) | | (element)->next->prev = (element); } while (0) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup dll | |
| * Insert an element into a DLL before the given other element. Insert | | * Insert an element into a DLL before the given other element. Insert | |
| * at the tail if the other element is NULL. | | * at the tail if the other element is NULL. | |
| * | | * | |
| * @param head pointer to the head of the DLL | | * @param head pointer to the head of the DLL | |
| * @param tail pointer to the tail of the DLL | | * @param tail pointer to the tail of the DLL | |
| * @param other prior element, NULL for insertion at head of DLL | | * @param other prior element, NULL for insertion at head of DLL | |
| * @param element element to insert | | * @param element element to insert | |
| */ | | */ | |
| #define GNUNET_CONTAINER_DLL_insert_before(head,tail,other,element) do { \ | | #define GNUNET_CONTAINER_DLL_insert_before(head,tail,other,element) do { \ | |
| GNUNET_assert ( ( (element)->prev == NULL) && ((head) != (element))); \ | | GNUNET_assert ( ( (element)->prev == NULL) && ((head) != (element))); \ | |
| | | | |
| skipping to change at line 772 | | skipping to change at line 1358 | |
| { \ | | { \ | |
| (element)->prev = (other)->prev; \ | | (element)->prev = (other)->prev; \ | |
| (other)->prev = (element); \ | | (other)->prev = (element); \ | |
| } \ | | } \ | |
| if (NULL == (element)->prev) \ | | if (NULL == (element)->prev) \ | |
| (head) = (element); \ | | (head) = (element); \ | |
| else \ | | else \ | |
| (element)->prev->next = (element); } while (0) | | (element)->prev->next = (element); } while (0) | |
| | | | |
| /** | | /** | |
|
| * Remove an element from a DLL. Assumes | | * @ingroup dll | |
| * that head, tail and element are structs | | * Remove an element from a DLL. Assumes that head, tail and | |
| * with prev and next fields. | | * element point to structs with prev and next fields. | |
| | | * | |
| | | * Using the head or tail pointer as the element | |
| | | * argument does NOT work with this macro. | |
| | | * Make sure to store head/tail in another pointer | |
| | | * and use it to remove the head or tail of the list. | |
| * | | * | |
| * @param head pointer to the head of the DLL | | * @param head pointer to the head of the DLL | |
| * @param tail pointer to the tail of the DLL | | * @param tail pointer to the tail of the DLL | |
| * @param element element to remove | | * @param element element to remove | |
| */ | | */ | |
| #define GNUNET_CONTAINER_DLL_remove(head,tail,element) do { \ | | #define GNUNET_CONTAINER_DLL_remove(head,tail,element) do { \ | |
| GNUNET_assert ( ( (element)->prev != NULL) || ((head) == (element))); \ | | GNUNET_assert ( ( (element)->prev != NULL) || ((head) == (element))); \ | |
| GNUNET_assert ( ( (element)->next != NULL) || ((tail) == (element))); \ | | GNUNET_assert ( ( (element)->next != NULL) || ((tail) == (element))); \ | |
| if ((element)->prev == NULL) \ | | if ((element)->prev == NULL) \ | |
| (head) = (element)->next; \ | | (head) = (element)->next; \ | |
| | | | |
| skipping to change at line 798 | | skipping to change at line 1389 | |
| (tail) = (element)->prev; \ | | (tail) = (element)->prev; \ | |
| else \ | | else \ | |
| (element)->next->prev = (element)->prev; \ | | (element)->next->prev = (element)->prev; \ | |
| (element)->next = NULL; \ | | (element)->next = NULL; \ | |
| (element)->prev = NULL; } while (0) | | (element)->prev = NULL; } while (0) | |
| | | | |
| /* ************ Multi-DLL interface, allows DLL elements to be | | /* ************ Multi-DLL interface, allows DLL elements to be | |
| in multiple lists at the same time *********************** */ | | in multiple lists at the same time *********************** */ | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup dll | |
| * Insert an element at the head of a MDLL. Assumes that head, tail and | | * Insert an element at the head of a MDLL. Assumes that head, tail and | |
| * element are structs with prev and next fields. | | * element are structs with prev and next fields. | |
| * | | * | |
| * @param mdll suffix name for the next and prev pointers in the element | | * @param mdll suffix name for the next and prev pointers in the element | |
| * @param head pointer to the head of the MDLL | | * @param head pointer to the head of the MDLL | |
| * @param tail pointer to the tail of the MDLL | | * @param tail pointer to the tail of the MDLL | |
| * @param element element to insert | | * @param element element to insert | |
| */ | | */ | |
| #define GNUNET_CONTAINER_MDLL_insert(mdll,head,tail,element) do { \ | | #define GNUNET_CONTAINER_MDLL_insert(mdll,head,tail,element) do { \ | |
| GNUNET_assert ( ( (element)->prev_##mdll == NULL) && ((head) != (element)
)); \ | | GNUNET_assert ( ( (element)->prev_##mdll == NULL) && ((head) != (element)
)); \ | |
| GNUNET_assert ( ( (element)->next_##mdll == NULL) && ((tail) != (element)
)); \ | | GNUNET_assert ( ( (element)->next_##mdll == NULL) && ((tail) != (element)
)); \ | |
| (element)->next_##mdll = (head); \ | | (element)->next_##mdll = (head); \ | |
| (element)->prev_##mdll = NULL; \ | | (element)->prev_##mdll = NULL; \ | |
| if ((tail) == NULL) \ | | if ((tail) == NULL) \ | |
| (tail) = element; \ | | (tail) = element; \ | |
| else \ | | else \ | |
| (head)->prev_##mdll = element; \ | | (head)->prev_##mdll = element; \ | |
| (head) = (element); } while (0) | | (head) = (element); } while (0) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup dll | |
| * Insert an element at the tail of a MDLL. Assumes that head, tail and | | * Insert an element at the tail of a MDLL. Assumes that head, tail and | |
| * element are structs with prev and next fields. | | * element are structs with prev and next fields. | |
| * | | * | |
| * @param mdll suffix name for the next and prev pointers in the element | | * @param mdll suffix name for the next and prev pointers in the element | |
| * @param head pointer to the head of the MDLL | | * @param head pointer to the head of the MDLL | |
| * @param tail pointer to the tail of the MDLL | | * @param tail pointer to the tail of the MDLL | |
| * @param element element to insert | | * @param element element to insert | |
| */ | | */ | |
| #define GNUNET_CONTAINER_MDLL_insert_tail(mdll,head,tail,element) do { \ | | #define GNUNET_CONTAINER_MDLL_insert_tail(mdll,head,tail,element) do { \ | |
| GNUNET_assert ( ( (element)->prev_##mdll == NULL) && ((head) != (element)
)); \ | | GNUNET_assert ( ( (element)->prev_##mdll == NULL) && ((head) != (element)
)); \ | |
| GNUNET_assert ( ( (element)->next_##mdll == NULL) && ((tail) != (element)
)); \ | | GNUNET_assert ( ( (element)->next_##mdll == NULL) && ((tail) != (element)
)); \ | |
| (element)->prev_##mdll = (tail); \ | | (element)->prev_##mdll = (tail); \ | |
| (element)->next_##mdll = NULL; \ | | (element)->next_##mdll = NULL; \ | |
| if ((head) == NULL) \ | | if ((head) == NULL) \ | |
| (head) = element; \ | | (head) = element; \ | |
| else \ | | else \ | |
| (tail)->next_##mdll = element; \ | | (tail)->next_##mdll = element; \ | |
| (tail) = (element); } while (0) | | (tail) = (element); } while (0) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup dll | |
| * Insert an element into a MDLL after the given other element. Insert | | * Insert an element into a MDLL after the given other element. Insert | |
| * at the head if the other element is NULL. | | * at the head if the other element is NULL. | |
| * | | * | |
| * @param mdll suffix name for the next and prev pointers in the element | | * @param mdll suffix name for the next and prev pointers in the element | |
| * @param head pointer to the head of the MDLL | | * @param head pointer to the head of the MDLL | |
| * @param tail pointer to the tail of the MDLL | | * @param tail pointer to the tail of the MDLL | |
| * @param other prior element, NULL for insertion at head of MDLL | | * @param other prior element, NULL for insertion at head of MDLL | |
| * @param element element to insert | | * @param element element to insert | |
| */ | | */ | |
| #define GNUNET_CONTAINER_MDLL_insert_after(mdll,head,tail,other,element) do
{ \ | | #define GNUNET_CONTAINER_MDLL_insert_after(mdll,head,tail,other,element) do
{ \ | |
| | | | |
| skipping to change at line 867 | | skipping to change at line 1461 | |
| { \ | | { \ | |
| (element)->next_##mdll = (other)->next_##mdll; \ | | (element)->next_##mdll = (other)->next_##mdll; \ | |
| (other)->next_##mdll = (element); \ | | (other)->next_##mdll = (element); \ | |
| } \ | | } \ | |
| if (NULL == (element)->next_##mdll) \ | | if (NULL == (element)->next_##mdll) \ | |
| (tail) = (element); \ | | (tail) = (element); \ | |
| else \ | | else \ | |
| (element)->next->prev_##mdll = (element); } while (0) | | (element)->next->prev_##mdll = (element); } while (0) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup dll | |
| * Insert an element into a MDLL before the given other element. Insert | | * Insert an element into a MDLL before the given other element. Insert | |
| * at the tail if the other element is NULL. | | * at the tail if the other element is NULL. | |
| * | | * | |
| * @param mdll suffix name for the next and prev pointers in the element | | * @param mdll suffix name for the next and prev pointers in the element | |
| * @param head pointer to the head of the MDLL | | * @param head pointer to the head of the MDLL | |
| * @param tail pointer to the tail of the MDLL | | * @param tail pointer to the tail of the MDLL | |
| * @param other prior element, NULL for insertion at head of MDLL | | * @param other prior element, NULL for insertion at head of MDLL | |
| * @param element element to insert | | * @param element element to insert | |
| */ | | */ | |
| #define GNUNET_CONTAINER_MDLL_insert_before(mdll,head,tail,other,element) d
o { \ | | #define GNUNET_CONTAINER_MDLL_insert_before(mdll,head,tail,other,element) d
o { \ | |
| | | | |
| skipping to change at line 896 | | skipping to change at line 1491 | |
| { \ | | { \ | |
| (element)->prev_##mdll = (other)->prev_##mdll; \ | | (element)->prev_##mdll = (other)->prev_##mdll; \ | |
| (other)->prev_##mdll = (element); \ | | (other)->prev_##mdll = (element); \ | |
| } \ | | } \ | |
| if (NULL == (element)->prev_##mdll) \ | | if (NULL == (element)->prev_##mdll) \ | |
| (head) = (element); \ | | (head) = (element); \ | |
| else \ | | else \ | |
| (element)->prev_##mdll->next_##mdll = (element); } while (0) | | (element)->prev_##mdll->next_##mdll = (element); } while (0) | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup dll | |
| * Remove an element from a MDLL. Assumes | | * Remove an element from a MDLL. Assumes | |
| * that head, tail and element are structs | | * that head, tail and element are structs | |
| * with prev and next fields. | | * with prev and next fields. | |
| * | | * | |
| * @param mdll suffix name for the next and prev pointers in the element | | * @param mdll suffix name for the next and prev pointers in the element | |
| * @param head pointer to the head of the MDLL | | * @param head pointer to the head of the MDLL | |
| * @param tail pointer to the tail of the MDLL | | * @param tail pointer to the tail of the MDLL | |
| * @param element element to remove | | * @param element element to remove | |
| */ | | */ | |
| #define GNUNET_CONTAINER_MDLL_remove(mdll,head,tail,element) do { \ | | #define GNUNET_CONTAINER_MDLL_remove(mdll,head,tail,element) do { \ | |
| | | | |
| skipping to change at line 922 | | skipping to change at line 1518 | |
| if ((element)->next_##mdll == NULL) \ | | if ((element)->next_##mdll == NULL) \ | |
| (tail) = (element)->prev_##mdll; \ | | (tail) = (element)->prev_##mdll; \ | |
| else \ | | else \ | |
| (element)->next_##mdll->prev_##mdll = (element)->prev_##mdll; \ | | (element)->next_##mdll->prev_##mdll = (element)->prev_##mdll; \ | |
| (element)->next_##mdll = NULL; \ | | (element)->next_##mdll = NULL; \ | |
| (element)->prev_##mdll = NULL; } while (0) | | (element)->prev_##mdll = NULL; } while (0) | |
| | | | |
| /* ******************** Heap *************** */ | | /* ******************** Heap *************** */ | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup heap | |
| * Cost by which elements in a heap can be ordered. | | * Cost by which elements in a heap can be ordered. | |
| */ | | */ | |
| typedef uint64_t GNUNET_CONTAINER_HeapCostType; | | typedef uint64_t GNUNET_CONTAINER_HeapCostType; | |
| | | | |
|
| /* | | /** | |
| * Heap type, either max or min. Hopefully makes the | | * @ingroup heap | |
| * implementation more useful. | | * Heap type, either max or min. | |
| */ | | */ | |
| enum GNUNET_CONTAINER_HeapOrder | | enum GNUNET_CONTAINER_HeapOrder | |
| { | | { | |
| /** | | /** | |
|
| | | * @ingroup heap | |
| * Heap with the maximum cost at the root. | | * Heap with the maximum cost at the root. | |
| */ | | */ | |
| GNUNET_CONTAINER_HEAP_ORDER_MAX, | | GNUNET_CONTAINER_HEAP_ORDER_MAX, | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup heap | |
| * Heap with the minimum cost at the root. | | * Heap with the minimum cost at the root. | |
| */ | | */ | |
| GNUNET_CONTAINER_HEAP_ORDER_MIN | | GNUNET_CONTAINER_HEAP_ORDER_MIN | |
| }; | | }; | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup heap | |
| * Handle to a Heap. | | * Handle to a Heap. | |
| */ | | */ | |
| struct GNUNET_CONTAINER_Heap; | | struct GNUNET_CONTAINER_Heap; | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup heap | |
| * Handle to a node in a heap. | | * Handle to a node in a heap. | |
| */ | | */ | |
| struct GNUNET_CONTAINER_HeapNode; | | struct GNUNET_CONTAINER_HeapNode; | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup heap | |
| * Create a new heap. | | * Create a new heap. | |
| * | | * | |
| * @param order how should the heap be sorted? | | * @param order how should the heap be sorted? | |
| * @return handle to the heap | | * @return handle to the heap | |
| */ | | */ | |
| struct GNUNET_CONTAINER_Heap * | | struct GNUNET_CONTAINER_Heap * | |
| GNUNET_CONTAINER_heap_create (enum GNUNET_CONTAINER_HeapOrder order); | | GNUNET_CONTAINER_heap_create (enum GNUNET_CONTAINER_HeapOrder order); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup heap | |
| * Destroys the heap. Only call on a heap that | | * Destroys the heap. Only call on a heap that | |
| * is already empty. | | * is already empty. | |
| * | | * | |
| * @param heap heap to destroy | | * @param heap heap to destroy | |
| */ | | */ | |
| void | | void | |
| GNUNET_CONTAINER_heap_destroy (struct GNUNET_CONTAINER_Heap *heap); | | GNUNET_CONTAINER_heap_destroy (struct GNUNET_CONTAINER_Heap *heap); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup heap | |
| * Get element stored at root of heap. | | * Get element stored at root of heap. | |
| * | | * | |
| * @param heap heap to inspect | | * @param heap heap to inspect | |
| * @return NULL if heap is empty | | * @return NULL if heap is empty | |
| */ | | */ | |
| void * | | void * | |
| GNUNET_CONTAINER_heap_peek (const struct GNUNET_CONTAINER_Heap *heap); | | GNUNET_CONTAINER_heap_peek (const struct GNUNET_CONTAINER_Heap *heap); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup heap | |
| * Get the current size of the heap | | * Get the current size of the heap | |
| * | | * | |
| * @param heap the heap to get the size of | | * @param heap the heap to get the size of | |
| * @return number of elements stored | | * @return number of elements stored | |
| */ | | */ | |
| unsigned int | | unsigned int | |
| GNUNET_CONTAINER_heap_get_size (const struct GNUNET_CONTAINER_Heap *heap); | | GNUNET_CONTAINER_heap_get_size (const struct GNUNET_CONTAINER_Heap *heap); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup heap | |
| * Get the current cost of the node | | * Get the current cost of the node | |
| * | | * | |
| * @param node the node to get the cost of | | * @param node the node to get the cost of | |
| * @return cost of the node | | * @return cost of the node | |
| */ | | */ | |
| GNUNET_CONTAINER_HeapCostType | | GNUNET_CONTAINER_HeapCostType | |
| GNUNET_CONTAINER_heap_node_get_cost (const struct GNUNET_CONTAINER_HeapNode | | GNUNET_CONTAINER_heap_node_get_cost (const struct GNUNET_CONTAINER_HeapNode | |
| *node); | | *node); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup heap | |
| * Iterator for heap | | * Iterator for heap | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param node internal node of the heap | | * @param node internal node of the heap | |
| * @param element value stored at the node | | * @param element value stored at the node | |
| * @param cost cost associated with the node | | * @param cost cost associated with the node | |
|
| * @return GNUNET_YES if we should continue to iterate, | | * @return #GNUNET_YES if we should continue to iterate, | |
| * GNUNET_NO if not. | | * #GNUNET_NO if not. | |
| */ | | */ | |
| typedef int (*GNUNET_CONTAINER_HeapIterator) (void *cls, | | typedef int (*GNUNET_CONTAINER_HeapIterator) (void *cls, | |
| struct GNUNET_CONTAINER_HeapN
ode * | | struct GNUNET_CONTAINER_HeapN
ode * | |
| node, void *element, | | node, void *element, | |
| GNUNET_CONTAINER_HeapCostType | | GNUNET_CONTAINER_HeapCostType | |
| cost); | | cost); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup heap | |
| * Iterate over all entries in the heap. | | * Iterate over all entries in the heap. | |
| * | | * | |
| * @param heap the heap | | * @param heap the heap | |
| * @param iterator function to call on each entry | | * @param iterator function to call on each entry | |
|
| * @param iterator_cls closure for iterator | | * @param iterator_cls closure for @a iterator | |
| */ | | */ | |
| void | | void | |
| GNUNET_CONTAINER_heap_iterate (const struct GNUNET_CONTAINER_Heap *heap, | | GNUNET_CONTAINER_heap_iterate (const struct GNUNET_CONTAINER_Heap *heap, | |
| GNUNET_CONTAINER_HeapIterator iterator, | | GNUNET_CONTAINER_HeapIterator iterator, | |
| void *iterator_cls); | | void *iterator_cls); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup heap | |
| * Perform a random walk of the tree. The walk is biased | | * Perform a random walk of the tree. The walk is biased | |
| * towards elements closer to the root of the tree (since | | * towards elements closer to the root of the tree (since | |
| * each walk starts at the root and ends at a random leaf). | | * each walk starts at the root and ends at a random leaf). | |
| * The heap internally tracks the current position of the | | * The heap internally tracks the current position of the | |
| * walk. | | * walk. | |
| * | | * | |
| * @param heap heap to walk | | * @param heap heap to walk | |
| * @return data stored at the next random node in the walk; | | * @return data stored at the next random node in the walk; | |
| * NULL if the tree is empty. | | * NULL if the tree is empty. | |
| */ | | */ | |
| void * | | void * | |
| GNUNET_CONTAINER_heap_walk_get_next (struct GNUNET_CONTAINER_Heap *heap); | | GNUNET_CONTAINER_heap_walk_get_next (struct GNUNET_CONTAINER_Heap *heap); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup heap | |
| * Inserts a new element into the heap. | | * Inserts a new element into the heap. | |
| * | | * | |
| * @param heap heap to modify | | * @param heap heap to modify | |
| * @param element element to insert | | * @param element element to insert | |
| * @param cost cost for the element | | * @param cost cost for the element | |
| * @return node for the new element | | * @return node for the new element | |
| */ | | */ | |
| struct GNUNET_CONTAINER_HeapNode * | | struct GNUNET_CONTAINER_HeapNode * | |
| GNUNET_CONTAINER_heap_insert (struct GNUNET_CONTAINER_Heap *heap, void *ele
ment, | | GNUNET_CONTAINER_heap_insert (struct GNUNET_CONTAINER_Heap *heap, void *ele
ment, | |
| GNUNET_CONTAINER_HeapCostType cost); | | GNUNET_CONTAINER_HeapCostType cost); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup heap | |
| * Remove root of the heap. | | * Remove root of the heap. | |
| * | | * | |
| * @param heap heap to modify | | * @param heap heap to modify | |
| * @return element data stored at the root node | | * @return element data stored at the root node | |
| */ | | */ | |
| void * | | void * | |
| GNUNET_CONTAINER_heap_remove_root (struct GNUNET_CONTAINER_Heap *heap); | | GNUNET_CONTAINER_heap_remove_root (struct GNUNET_CONTAINER_Heap *heap); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup heap | |
| * Removes a node from the heap. | | * Removes a node from the heap. | |
| * | | * | |
| * @param node node to remove | | * @param node node to remove | |
| * @return element data stored at the node, NULL if heap is empty | | * @return element data stored at the node, NULL if heap is empty | |
| */ | | */ | |
| void * | | void * | |
| GNUNET_CONTAINER_heap_remove_node (struct GNUNET_CONTAINER_HeapNode *node); | | GNUNET_CONTAINER_heap_remove_node (struct GNUNET_CONTAINER_HeapNode *node); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup heap | |
| * Updates the cost of any node in the tree | | * Updates the cost of any node in the tree | |
| * | | * | |
| * @param heap heap to modify | | * @param heap heap to modify | |
| * @param node node for which the cost is to be changed | | * @param node node for which the cost is to be changed | |
| * @param new_cost new cost for the node | | * @param new_cost new cost for the node | |
| */ | | */ | |
| void | | void | |
| GNUNET_CONTAINER_heap_update_cost (struct GNUNET_CONTAINER_Heap *heap, | | GNUNET_CONTAINER_heap_update_cost (struct GNUNET_CONTAINER_Heap *heap, | |
| struct GNUNET_CONTAINER_HeapNode *node, | | struct GNUNET_CONTAINER_HeapNode *node, | |
| GNUNET_CONTAINER_HeapCostType new_cost); | | GNUNET_CONTAINER_HeapCostType new_cost); | |
| | | | |
| /* ******************** Singly linked list *************** */ | | /* ******************** Singly linked list *************** */ | |
| | | | |
| /** | | /** | |
| * Possible ways for how data stored in the linked list | | * Possible ways for how data stored in the linked list | |
| * might be allocated. | | * might be allocated. | |
|
| | | * @deprecated use DLL macros | |
| */ | | */ | |
| enum GNUNET_CONTAINER_SListDisposition | | enum GNUNET_CONTAINER_SListDisposition | |
| { | | { | |
|
| /** | | /** | |
| * Single-linked list must copy the buffer. | | * Single-linked list must copy the buffer. | |
| */ | | * @deprecated use DLL macros | |
| | | */ | |
| GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT = 0, | | GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT = 0, | |
| | | | |
|
| /** | | /** | |
| * Data is static, no need to copy or free. | | * Data is static, no need to copy or free. | |
| */ | | * @deprecated use DLL macros | |
| | | */ | |
| GNUNET_CONTAINER_SLIST_DISPOSITION_STATIC = 2, | | GNUNET_CONTAINER_SLIST_DISPOSITION_STATIC = 2, | |
| | | | |
|
| /** | | /** | |
| * Data is dynamic, do not copy but free when done. | | * Data is dynamic, do not copy but free when done. | |
| */ | | * @deprecated use DLL macros | |
| | | */ | |
| GNUNET_CONTAINER_SLIST_DISPOSITION_DYNAMIC = 4 | | GNUNET_CONTAINER_SLIST_DISPOSITION_DYNAMIC = 4 | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Handle to a singly linked list | | * Handle to a singly linked list | |
|
| | | * @deprecated use DLL macros | |
| */ | | */ | |
| struct GNUNET_CONTAINER_SList; | | struct GNUNET_CONTAINER_SList; | |
| | | | |
| /** | | /** | |
| * Handle to a singly linked list iterator | | * Handle to a singly linked list iterator | |
|
| | | * @deprecated use DLL macros | |
| */ | | */ | |
| struct GNUNET_CONTAINER_SList_Iterator | | struct GNUNET_CONTAINER_SList_Iterator | |
| { | | { | |
| /** | | /** | |
| * Linked list that we are iterating over. | | * Linked list that we are iterating over. | |
| */ | | */ | |
| struct GNUNET_CONTAINER_SList *list; | | struct GNUNET_CONTAINER_SList *list; | |
| | | | |
| /** | | /** | |
| * Last element accessed. | | * Last element accessed. | |
| | | | |
| skipping to change at line 1139 | | skipping to change at line 1758 | |
| */ | | */ | |
| struct GNUNET_CONTAINER_SList_Elem *elem; | | struct GNUNET_CONTAINER_SList_Elem *elem; | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Add a new element to the list | | * Add a new element to the list | |
| * @param l list | | * @param l list | |
| * @param disp memory disposition | | * @param disp memory disposition | |
| * @param buf payload buffer | | * @param buf payload buffer | |
| * @param len length of the buffer | | * @param len length of the buffer | |
|
| | | * @deprecated use DLL macros | |
| */ | | */ | |
| void | | void | |
| GNUNET_CONTAINER_slist_add (struct GNUNET_CONTAINER_SList *l, | | GNUNET_CONTAINER_slist_add (struct GNUNET_CONTAINER_SList *l, | |
| enum GNUNET_CONTAINER_SListDisposition disp, | | enum GNUNET_CONTAINER_SListDisposition disp, | |
| const void *buf, size_t len); | | const void *buf, size_t len); | |
| | | | |
| /** | | /** | |
| * Add a new element to the end of the list | | * Add a new element to the end of the list | |
| * @param l list | | * @param l list | |
| * @param disp memory disposition | | * @param disp memory disposition | |
| * @param buf payload buffer | | * @param buf payload buffer | |
| * @param len length of the buffer | | * @param len length of the buffer | |
|
| | | * @deprecated use DLL macros | |
| */ | | */ | |
| void | | void | |
| GNUNET_CONTAINER_slist_add_end (struct GNUNET_CONTAINER_SList *l, | | GNUNET_CONTAINER_slist_add_end (struct GNUNET_CONTAINER_SList *l, | |
| enum GNUNET_CONTAINER_SListDisposition disp
, | | enum GNUNET_CONTAINER_SListDisposition disp
, | |
| const void *buf, size_t len); | | const void *buf, size_t len); | |
| | | | |
| /** | | /** | |
| * Append a singly linked list to another | | * Append a singly linked list to another | |
| * @param dst list to append to | | * @param dst list to append to | |
| * @param src source | | * @param src source | |
|
| | | * @deprecated use DLL macros | |
| */ | | */ | |
| void | | void | |
| GNUNET_CONTAINER_slist_append (struct GNUNET_CONTAINER_SList *dst, | | GNUNET_CONTAINER_slist_append (struct GNUNET_CONTAINER_SList *dst, | |
| struct GNUNET_CONTAINER_SList *src); | | struct GNUNET_CONTAINER_SList *src); | |
| | | | |
| /** | | /** | |
| * Create a new singly linked list | | * Create a new singly linked list | |
| * @return the new list | | * @return the new list | |
|
| | | * @deprecated use DLL macros | |
| */ | | */ | |
| struct GNUNET_CONTAINER_SList * | | struct GNUNET_CONTAINER_SList * | |
| GNUNET_CONTAINER_slist_create (void); | | GNUNET_CONTAINER_slist_create (void); | |
| | | | |
| /** | | /** | |
| * Destroy a singly linked list | | * Destroy a singly linked list | |
| * @param l the list to be destroyed | | * @param l the list to be destroyed | |
|
| | | * @deprecated use DLL macros | |
| */ | | */ | |
| void | | void | |
| GNUNET_CONTAINER_slist_destroy (struct GNUNET_CONTAINER_SList *l); | | GNUNET_CONTAINER_slist_destroy (struct GNUNET_CONTAINER_SList *l); | |
| | | | |
| /** | | /** | |
| * Return the beginning of a list | | * Return the beginning of a list | |
| * | | * | |
| * @param l list | | * @param l list | |
| * @return iterator pointing to the beginning (by value! Either allocate th
e | | * @return iterator pointing to the beginning (by value! Either allocate th
e | |
| * structure on the stack, or use GNUNET_malloc() yourself! All other | | * structure on the stack, or use GNUNET_malloc() yourself! All other | |
| * functions do take pointer to this struct though) | | * functions do take pointer to this struct though) | |
|
| | | * @deprecated use DLL macros | |
| */ | | */ | |
| struct GNUNET_CONTAINER_SList_Iterator | | struct GNUNET_CONTAINER_SList_Iterator | |
| GNUNET_CONTAINER_slist_begin (struct GNUNET_CONTAINER_SList *l); | | GNUNET_CONTAINER_slist_begin (struct GNUNET_CONTAINER_SList *l); | |
| | | | |
| /** | | /** | |
| * Clear a list | | * Clear a list | |
| * | | * | |
| * @param l list | | * @param l list | |
|
| | | * @deprecated use DLL macros | |
| */ | | */ | |
| void | | void | |
| GNUNET_CONTAINER_slist_clear (struct GNUNET_CONTAINER_SList *l); | | GNUNET_CONTAINER_slist_clear (struct GNUNET_CONTAINER_SList *l); | |
| | | | |
| /** | | /** | |
| * Check if a list contains a certain element | | * Check if a list contains a certain element | |
| * @param l list | | * @param l list | |
| * @param buf payload buffer to find | | * @param buf payload buffer to find | |
| * @param len length of the payload (number of bytes in buf) | | * @param len length of the payload (number of bytes in buf) | |
|
| * | | | |
| * @return GNUNET_YES if found, GNUNET_NO otherwise | | * @return GNUNET_YES if found, GNUNET_NO otherwise | |
|
| | | * @deprecated use DLL macros | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONTAINER_slist_contains (const struct GNUNET_CONTAINER_SList *l, | | GNUNET_CONTAINER_slist_contains (const struct GNUNET_CONTAINER_SList *l, | |
| const void *buf, size_t len); | | const void *buf, size_t len); | |
| | | | |
| /** | | /** | |
| * Check if a list contains a certain element using 'compare' function | | * Check if a list contains a certain element using 'compare' function | |
| * | | * | |
| * @param l list | | * @param l list | |
| * @param buf payload buffer to find | | * @param buf payload buffer to find | |
| * @param len length of the payload (number of bytes in buf) | | * @param len length of the payload (number of bytes in buf) | |
| * @param compare comparison function | | * @param compare comparison function | |
| * | | * | |
| * @return NULL if the 'buf' could not be found, pointer to the | | * @return NULL if the 'buf' could not be found, pointer to the | |
| * list element, if found | | * list element, if found | |
|
| | | * @deprecated use DLL macros | |
| */ | | */ | |
| void * | | void * | |
| GNUNET_CONTAINER_slist_contains2 (const struct GNUNET_CONTAINER_SList *l, | | GNUNET_CONTAINER_slist_contains2 (const struct GNUNET_CONTAINER_SList *l, | |
| const void *buf, size_t len, | | const void *buf, size_t len, | |
| int (*compare)(const void *, const size_t
, const void *, const size_t)); | | int (*compare)(const void *, const size_t
, const void *, const size_t)); | |
| /** | | /** | |
| * Count the elements of a list | | * Count the elements of a list | |
| * @param l list | | * @param l list | |
| * @return number of elements in the list | | * @return number of elements in the list | |
|
| | | * @deprecated use DLL macros | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONTAINER_slist_count (const struct GNUNET_CONTAINER_SList *l); | | GNUNET_CONTAINER_slist_count (const struct GNUNET_CONTAINER_SList *l); | |
| | | | |
| /** | | /** | |
| * Remove an element from the list | | * Remove an element from the list | |
| * @param i iterator that points to the element to be removed | | * @param i iterator that points to the element to be removed | |
|
| | | * @deprecated use DLL macros | |
| */ | | */ | |
| void | | void | |
| GNUNET_CONTAINER_slist_erase (struct GNUNET_CONTAINER_SList_Iterator *i); | | GNUNET_CONTAINER_slist_erase (struct GNUNET_CONTAINER_SList_Iterator *i); | |
| | | | |
| /** | | /** | |
| * Insert an element into a list at a specific position | | * Insert an element into a list at a specific position | |
| * @param before where to insert the new element | | * @param before where to insert the new element | |
| * @param disp memory disposition | | * @param disp memory disposition | |
| * @param buf payload buffer | | * @param buf payload buffer | |
| * @param len length of the payload | | * @param len length of the payload | |
|
| | | * @deprecated use DLL macros | |
| */ | | */ | |
| void | | void | |
| GNUNET_CONTAINER_slist_insert (struct GNUNET_CONTAINER_SList_Iterator *befo
re, | | GNUNET_CONTAINER_slist_insert (struct GNUNET_CONTAINER_SList_Iterator *befo
re, | |
| enum GNUNET_CONTAINER_SListDisposition disp, | | enum GNUNET_CONTAINER_SListDisposition disp, | |
| const void *buf, size_t len); | | const void *buf, size_t len); | |
| | | | |
| /** | | /** | |
| * Advance an iterator to the next element | | * Advance an iterator to the next element | |
| * @param i iterator | | * @param i iterator | |
| * @return GNUNET_YES on success, GNUNET_NO if the end has been reached | | * @return GNUNET_YES on success, GNUNET_NO if the end has been reached | |
|
| | | * @deprecated use DLL macros | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONTAINER_slist_next (struct GNUNET_CONTAINER_SList_Iterator *i); | | GNUNET_CONTAINER_slist_next (struct GNUNET_CONTAINER_SList_Iterator *i); | |
| | | | |
| /** | | /** | |
| * Check if an iterator points beyond the end of a list | | * Check if an iterator points beyond the end of a list | |
| * @param i iterator | | * @param i iterator | |
| * @return GNUNET_YES if the end has been reached, GNUNET_NO if the iterato
r | | * @return GNUNET_YES if the end has been reached, GNUNET_NO if the iterato
r | |
| * points to a valid element | | * points to a valid element | |
|
| | | * @deprecated use DLL macros | |
| */ | | */ | |
| int | | int | |
| GNUNET_CONTAINER_slist_end (struct GNUNET_CONTAINER_SList_Iterator *i); | | GNUNET_CONTAINER_slist_end (struct GNUNET_CONTAINER_SList_Iterator *i); | |
| | | | |
| /** | | /** | |
| * Retrieve the element at a specific position in a list | | * Retrieve the element at a specific position in a list | |
| * | | * | |
| * @param i iterator | | * @param i iterator | |
| * @param len set to the payload length | | * @param len set to the payload length | |
| * @return payload | | * @return payload | |
|
| | | * @deprecated use DLL macros | |
| */ | | */ | |
| void * | | void * | |
| GNUNET_CONTAINER_slist_get (const struct GNUNET_CONTAINER_SList_Iterator *i
, | | GNUNET_CONTAINER_slist_get (const struct GNUNET_CONTAINER_SList_Iterator *i
, | |
|
| size_t * len); | | size_t *len); | |
| | | | |
| /** | | /** | |
| * Release an iterator | | * Release an iterator | |
| * @param i iterator | | * @param i iterator | |
|
| | | * @deprecated use DLL macros | |
| */ | | */ | |
| void | | void | |
| GNUNET_CONTAINER_slist_iter_destroy (struct GNUNET_CONTAINER_SList_Iterator
*i); | | GNUNET_CONTAINER_slist_iter_destroy (struct GNUNET_CONTAINER_SList_Iterator
*i); | |
| | | | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| { | | { | |
| #endif | | #endif | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| } | | } | |
| #endif | | #endif | |
| | | | |
End of changes. 161 change blocks. |
| 126 lines changed or deleted | | 830 lines changed or added | |
|
| gnunet_core_service.h | | gnunet_core_service.h | |
| /* | | /* | |
| This file is part of GNUnet. | | This file is part of GNUnet. | |
|
| (C) 2009, 2010 Christian Grothoff (and other contributing authors) | | (C) 2009-2013 Christian Grothoff (and other contributing authors) | |
| | | | |
| GNUnet is free software; you can redistribute it and/or modify | | GNUnet is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published | | it under the terms of the GNU General Public License as published | |
| by the Free Software Foundation; either version 3, or (at your | | by the Free Software Foundation; either version 3, or (at your | |
| option) any later version. | | option) any later version. | |
| | | | |
| GNUnet is distributed in the hope that it will be useful, but | | GNUnet is distributed in the hope that it will be useful, but | |
| WITHOUT ANY WARRANTY; without even the implied warranty of | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| General Public License for more details. | | General Public License for more details. | |
| | | | |
| skipping to change at line 26 | | skipping to change at line 26 | |
| along with GNUnet; see the file COPYING. If not, write to the | | along with GNUnet; see the file COPYING. If not, write to the | |
| Free Software Foundation, Inc., 59 Temple Place - Suite 330, | | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| Boston, MA 02111-1307, USA. | | Boston, MA 02111-1307, USA. | |
| */ | | */ | |
| | | | |
| /** | | /** | |
| * @file include/gnunet_core_service.h | | * @file include/gnunet_core_service.h | |
| * @brief core service; this is the main API for encrypted P2P | | * @brief core service; this is the main API for encrypted P2P | |
| * communications | | * communications | |
| * @author Christian Grothoff | | * @author Christian Grothoff | |
|
| | | * @defgroup core encrypted direct communication between peers | |
| | | * @{ | |
| */ | | */ | |
| | | | |
| #ifndef GNUNET_CORE_SERVICE_H | | #ifndef GNUNET_CORE_SERVICE_H | |
| #define GNUNET_CORE_SERVICE_H | | #define GNUNET_CORE_SERVICE_H | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| extern "C" | | extern "C" | |
| { | | { | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| } | | } | |
| | | | |
| skipping to change at line 57 | | skipping to change at line 59 | |
| /** | | /** | |
| * Opaque handle to the service. | | * Opaque handle to the service. | |
| */ | | */ | |
| struct GNUNET_CORE_Handle; | | struct GNUNET_CORE_Handle; | |
| | | | |
| /** | | /** | |
| * Method called whenever a given peer connects. | | * Method called whenever a given peer connects. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param peer peer identity this notification is about | | * @param peer peer identity this notification is about | |
|
| * @param atsi performance data for the connection | | | |
| * @param atsi_count number of records in 'atsi' | | | |
| */ | | */ | |
| typedef void (*GNUNET_CORE_ConnectEventHandler) (void *cls, | | typedef void (*GNUNET_CORE_ConnectEventHandler) (void *cls, | |
|
| const struct | | const struct GNUNET_PeerId | |
| GNUNET_PeerIdentity * peer | | entity *peer); | |
| , | | | |
| const struct | | | |
| GNUNET_ATS_Information * a | | | |
| tsi, | | | |
| unsigned int atsi_count); | | | |
| | | | |
| /** | | /** | |
| * Method called whenever a peer disconnects. | | * Method called whenever a peer disconnects. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param peer peer identity this notification is about | | * @param peer peer identity this notification is about | |
| */ | | */ | |
| typedef void (*GNUNET_CORE_DisconnectEventHandler) (void *cls, | | typedef void (*GNUNET_CORE_DisconnectEventHandler) (void *cls, | |
|
| const struct | | const struct GNUNET_Pee | |
| GNUNET_PeerIdentity * p | | rIdentity *peer); | |
| eer); | | | |
| | | | |
| /** | | /** | |
| * Functions with this signature are called whenever a message is | | * Functions with this signature are called whenever a message is | |
| * received or transmitted. | | * received or transmitted. | |
| * | | * | |
|
| * @param cls closure (set from GNUNET_CORE_connect) | | * @param cls closure (set from #GNUNET_CORE_connect) | |
| * @param peer the other peer involved (sender or receiver, NULL | | * @param peer the other peer involved (sender or receiver, NULL | |
| * for loopback messages where we are both sender and receiver) | | * for loopback messages where we are both sender and receiver) | |
| * @param message the actual message | | * @param message the actual message | |
|
| * @param atsi performance data for the connection | | * @return #GNUNET_OK to keep the connection open, | |
| * @param atsi_count number of records in 'atsi' | | * #GNUNET_SYSERR to close connection to the peer (signal serious e | |
| * @return GNUNET_OK to keep the connection open, | | rror) | |
| * GNUNET_SYSERR to close it (signal serious error) | | | |
| */ | | */ | |
| typedef int (*GNUNET_CORE_MessageCallback) (void *cls, | | typedef int (*GNUNET_CORE_MessageCallback) (void *cls, | |
| const struct GNUNET_PeerIdentit
y * | | const struct GNUNET_PeerIdentit
y * | |
| other, | | other, | |
| const struct GNUNET_MessageHead
er * | | const struct GNUNET_MessageHead
er * | |
|
| message, | | message); | |
| const struct GNUNET_ATS_Informa | | | |
| tion | | | |
| * atsi, unsigned int atsi_count | | | |
| ); | | | |
| | | | |
| /** | | /** | |
| * Message handler. Each struct specifies how to handle on particular | | * Message handler. Each struct specifies how to handle on particular | |
| * type of message received. | | * type of message received. | |
| */ | | */ | |
| struct GNUNET_CORE_MessageHandler | | struct GNUNET_CORE_MessageHandler | |
| { | | { | |
| /** | | /** | |
| * Function to call for messages of "type". | | * Function to call for messages of "type". | |
| */ | | */ | |
| | | | |
| skipping to change at line 124 | | skipping to change at line 115 | |
| /** | | /** | |
| * Expected size of messages of this type. Use 0 for variable-size. | | * Expected size of messages of this type. Use 0 for variable-size. | |
| * If non-zero, messages of the given type will be discarded if they | | * If non-zero, messages of the given type will be discarded if they | |
| * do not have the right size. | | * do not have the right size. | |
| */ | | */ | |
| uint16_t expected_size; | | uint16_t expected_size; | |
| | | | |
| }; | | }; | |
| | | | |
| /** | | /** | |
|
| * Function called after GNUNET_CORE_connect has succeeded (or failed | | * Function called after #GNUNET_CORE_connect has succeeded (or failed | |
| * for good). Note that the private key of the peer is intentionally | | * for good). Note that the private key of the peer is intentionally | |
| * not exposed here; if you need it, your process should try to read | | * not exposed here; if you need it, your process should try to read | |
| * the private key file directly (which should work if you are | | * the private key file directly (which should work if you are | |
| * authorized...). Implementations of this function must not call | | * authorized...). Implementations of this function must not call | |
|
| * GNUNET_CORE_disconnect (other than by scheduling a new task to | | * #GNUNET_CORE_disconnect (other than by scheduling a new task to | |
| * do this later). | | * do this later). | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
|
| * @param server handle to the server, NULL if we failed | | | |
| * @param my_identity ID of this peer, NULL if we failed | | * @param my_identity ID of this peer, NULL if we failed | |
| */ | | */ | |
| typedef void (*GNUNET_CORE_StartupCallback) (void *cls, | | typedef void (*GNUNET_CORE_StartupCallback) (void *cls, | |
|
| struct GNUNET_CORE_Handle * se | | const struct GNUNET_PeerIdenti | |
| rver, | | ty *my_identity); | |
| const struct GNUNET_PeerIdenti | | | |
| ty * | | | |
| my_identity); | | | |
| | | | |
| /** | | /** | |
| * Connect to the core service. Note that the connection may complete | | * Connect to the core service. Note that the connection may complete | |
| * (or fail) asynchronously. This function primarily causes the given | | * (or fail) asynchronously. This function primarily causes the given | |
| * callback notification functions to be invoked whenever the | | * callback notification functions to be invoked whenever the | |
| * specified event happens. The maximum number of queued | | * specified event happens. The maximum number of queued | |
| * notifications (queue length) is per client; the queue is shared | | * notifications (queue length) is per client; the queue is shared | |
| * across all types of notifications. So a slow client that registers | | * across all types of notifications. So a slow client that registers | |
|
| * for 'outbound_notify' also risks missing 'inbound_notify' messages. | | * for @a outbound_notify also risks missing @a inbound_notify messages. | |
| * Certain events (such as connect/disconnect notifications) are not | | * Certain events (such as connect/disconnect notifications) are not | |
| * subject to queue size limitations. | | * subject to queue size limitations. | |
| * | | * | |
| * @param cfg configuration to use | | * @param cfg configuration to use | |
| * @param cls closure for the various callbacks that follow (including hand
lers in the handlers array) | | * @param cls closure for the various callbacks that follow (including hand
lers in the handlers array) | |
| * @param init callback to call once we have successfully | | * @param init callback to call once we have successfully | |
| * connected to the core service | | * connected to the core service | |
| * @param connects function to call on peer connect, can be NULL | | * @param connects function to call on peer connect, can be NULL | |
| * @param disconnects function to call on peer disconnect / timeout, can be
NULL | | * @param disconnects function to call on peer disconnect / timeout, can be
NULL | |
| * @param inbound_notify function to call for all inbound messages, can be
NULL | | * @param inbound_notify function to call for all inbound messages, can be
NULL | |
| * note that the core is allowed to drop notifications about
inbound | | * note that the core is allowed to drop notifications about
inbound | |
| * messages if the client does not process them fast enough
(for this | | * messages if the client does not process them fast enough
(for this | |
| * notification type, a bounded queue is used) | | * notification type, a bounded queue is used) | |
|
| * @param inbound_hdr_only set to GNUNET_YES if inbound_notify will only re | | * @param inbound_hdr_only set to #GNUNET_YES if @a inbound_notify will onl | |
| ad the | | y read the | |
| * GNUNET_MessageHeader and hence we do not need to give it | | * `struct GNUNET_MessageHeader` and hence we do not need to | |
| the full message; | | give it the full message; | |
| * can be used to improve efficiency, ignored if inbound_not
ify is NULL | | * can be used to improve efficiency, ignored if inbound_not
ify is NULL | |
| * note that the core is allowed to drop notifications about
inbound | | * note that the core is allowed to drop notifications about
inbound | |
| * messages if the client does not process them fast enough
(for this | | * messages if the client does not process them fast enough
(for this | |
| * notification type, a bounded queue is used) | | * notification type, a bounded queue is used) | |
| * @param outbound_notify function to call for all outbound messages, can b
e NULL; | | * @param outbound_notify function to call for all outbound messages, can b
e NULL; | |
| * note that the core is allowed to drop notifications about
outbound | | * note that the core is allowed to drop notifications about
outbound | |
| * messages if the client does not process them fast enough
(for this | | * messages if the client does not process them fast enough
(for this | |
| * notification type, a bounded queue is used) | | * notification type, a bounded queue is used) | |
|
| * @param outbound_hdr_only set to GNUNET_YES if outbound_notify will only | | * @param outbound_hdr_only set to #GNUNET_YES if @a outbound_notify will o | |
| read the | | nly read the | |
| * GNUNET_MessageHeader and hence we do not need to give it | | * `struct GNUNET_MessageHeader` and hence we do not need to | |
| the full message | | give it the full message | |
| * can be used to improve efficiency, ignored if outbound_no
tify is NULL | | * can be used to improve efficiency, ignored if outbound_no
tify is NULL | |
| * note that the core is allowed to drop notifications about
outbound | | * note that the core is allowed to drop notifications about
outbound | |
| * messages if the client does not process them fast enough
(for this | | * messages if the client does not process them fast enough
(for this | |
| * notification type, a bounded queue is used) | | * notification type, a bounded queue is used) | |
| * @param handlers callbacks for messages we care about, NULL-terminated | | * @param handlers callbacks for messages we care about, NULL-terminated | |
| * note that the core is allowed to drop notifications about
inbound | | * note that the core is allowed to drop notifications about
inbound | |
| * messages if the client does not process them fast enough
(for this | | * messages if the client does not process them fast enough
(for this | |
| * notification type, a bounded queue is used) | | * notification type, a bounded queue is used) | |
|
| * @return handle to the core service (only useful for disconnect until 'in
it' is called), | | * @return handle to the core service (only useful for disconnect until @a
init is called), | |
| * NULL on error (in this case, init is never called) | | * NULL on error (in this case, init is never called) | |
| */ | | */ | |
| struct GNUNET_CORE_Handle * | | struct GNUNET_CORE_Handle * | |
| GNUNET_CORE_connect (const struct GNUNET_CONFIGURATION_Handle *cfg, | | GNUNET_CORE_connect (const struct GNUNET_CONFIGURATION_Handle *cfg, | |
| void *cls, | | void *cls, | |
| GNUNET_CORE_StartupCallback init, | | GNUNET_CORE_StartupCallback init, | |
| GNUNET_CORE_ConnectEventHandler connects, | | GNUNET_CORE_ConnectEventHandler connects, | |
| GNUNET_CORE_DisconnectEventHandler disconnects, | | GNUNET_CORE_DisconnectEventHandler disconnects, | |
| GNUNET_CORE_MessageCallback inbound_notify, | | GNUNET_CORE_MessageCallback inbound_notify, | |
| int inbound_hdr_only, | | int inbound_hdr_only, | |
| GNUNET_CORE_MessageCallback outbound_notify, | | GNUNET_CORE_MessageCallback outbound_notify, | |
| int outbound_hdr_only, | | int outbound_hdr_only, | |
| const struct GNUNET_CORE_MessageHandler *handlers); | | const struct GNUNET_CORE_MessageHandler *handlers); | |
| | | | |
| /** | | /** | |
| * Disconnect from the core service. This function can only | | * Disconnect from the core service. This function can only | |
|
| * be called *after* all pending 'GNUNET_CORE_notify_transmit_ready' | | * be called *after* all pending #GNUNET_CORE_notify_transmit_ready | |
| * requests have been explicitly cancelled. | | * requests have been explicitly cancelled. | |
| * | | * | |
| * @param handle connection to core to disconnect | | * @param handle connection to core to disconnect | |
| */ | | */ | |
| void | | void | |
| GNUNET_CORE_disconnect (struct GNUNET_CORE_Handle *handle); | | GNUNET_CORE_disconnect (struct GNUNET_CORE_Handle *handle); | |
| | | | |
| /** | | /** | |
| * Handle for a transmission request. | | * Handle for a transmission request. | |
| */ | | */ | |
| struct GNUNET_CORE_TransmitHandle; | | struct GNUNET_CORE_TransmitHandle; | |
| | | | |
| /** | | /** | |
|
| * Ask the core to call "notify" once it is ready to transmit the | | * Ask the core to call @a notify once it is ready to transmit the | |
| * given number of bytes to the specified "target". Must only be | | * given number of bytes to the specified @a target. Must only be | |
| * called after a connection to the respective peer has been | | * called after a connection to the respective peer has been | |
| * established (and the client has been informed about this). You may | | * established (and the client has been informed about this). You may | |
| * have one request of this type pending for each connected peer at | | * have one request of this type pending for each connected peer at | |
| * any time. If a peer disconnects, the application MUST call | | * any time. If a peer disconnects, the application MUST call | |
|
| * "GNUNET_CORE_notify_transmit_ready_cancel" on the respective | | * #GNUNET_CORE_notify_transmit_ready_cancel on the respective | |
| * transmission request, if one such request is pending. | | * transmission request, if one such request is pending. | |
| * | | * | |
| * @param handle connection to core service | | * @param handle connection to core service | |
| * @param cork is corking allowed for this transmission? | | * @param cork is corking allowed for this transmission? | |
| * @param priority how important is the message? | | * @param priority how important is the message? | |
| * @param maxdelay how long can the message wait? | | * @param maxdelay how long can the message wait? | |
| * @param target who should receive the message, never NULL (can be this pe
er's identity for loopback) | | * @param target who should receive the message, never NULL (can be this pe
er's identity for loopback) | |
| * @param notify_size how many bytes of buffer space does notify want? | | * @param notify_size how many bytes of buffer space does notify want? | |
| * @param notify function to call when buffer space is available; | | * @param notify function to call when buffer space is available; | |
| * will be called with NULL on timeout; clients MUST cancel | | * will be called with NULL on timeout; clients MUST cancel | |
| * all pending transmission requests DURING the disconnect | | * all pending transmission requests DURING the disconnect | |
| * handler | | * handler | |
|
| * @param notify_cls closure for notify | | * @param notify_cls closure for @a notify | |
| * @return non-NULL if the notify callback was queued, | | * @return non-NULL if the notify callback was queued, | |
| * NULL if we can not even queue the request (request already pendi
ng); | | * NULL if we can not even queue the request (request already pendi
ng); | |
| * if NULL is returned, "notify" will NOT be called. | | * if NULL is returned, "notify" will NOT be called. | |
| */ | | */ | |
| struct GNUNET_CORE_TransmitHandle * | | struct GNUNET_CORE_TransmitHandle * | |
| GNUNET_CORE_notify_transmit_ready (struct GNUNET_CORE_Handle *handle, int c
ork, | | GNUNET_CORE_notify_transmit_ready (struct GNUNET_CORE_Handle *handle, int c
ork, | |
| uint32_t priority, | | uint32_t priority, | |
| struct GNUNET_TIME_Relative maxdelay, | | struct GNUNET_TIME_Relative maxdelay, | |
| const struct GNUNET_PeerIdentity *target
, | | const struct GNUNET_PeerIdentity *target
, | |
| size_t notify_size, | | size_t notify_size, | |
| | | | |
| skipping to change at line 256 | | skipping to change at line 244 | |
| /** | | /** | |
| * Cancel the specified transmission-ready notification. | | * Cancel the specified transmission-ready notification. | |
| * | | * | |
| * @param th handle that was returned by "notify_transmit_ready". | | * @param th handle that was returned by "notify_transmit_ready". | |
| */ | | */ | |
| void | | void | |
| GNUNET_CORE_notify_transmit_ready_cancel (struct GNUNET_CORE_TransmitHandle | | GNUNET_CORE_notify_transmit_ready_cancel (struct GNUNET_CORE_TransmitHandle | |
| *th); | | *th); | |
| | | | |
| /** | | /** | |
|
| * Iterate over all connected peers. Calls peer_cb with each | | * Iterate over all connected peers. Calls @a peer_cb with each | |
| * connected peer, and then once with NULL to indicate that all peers | | * connected peer, and then once with NULL to indicate that all peers | |
| * have been handled. Normal users of the CORE API are not expected | | * have been handled. Normal users of the CORE API are not expected | |
| * to use this function. It is different in that it truly lists | | * to use this function. It is different in that it truly lists | |
| * all connections, not just those relevant to the application. This | | * all connections, not just those relevant to the application. This | |
| * function is used by special applications for diagnostics. This | | * function is used by special applications for diagnostics. This | |
| * function is NOT part of the 'versioned', 'official' API. | | * function is NOT part of the 'versioned', 'official' API. | |
| * | | * | |
| * FIXME: we should probably make it possible to 'cancel' the | | * FIXME: we should probably make it possible to 'cancel' the | |
| * operation... | | * operation... | |
| * | | * | |
| * @param cfg configuration handle | | * @param cfg configuration handle | |
| * @param peer_cb function to call with the peer information | | * @param peer_cb function to call with the peer information | |
|
| * @param cb_cls closure for peer_cb | | * @param cb_cls closure for @a peer_cb | |
| * @return GNUNET_OK on success, GNUNET_SYSERR on errors | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on errors | |
| */ | | */ | |
| int | | int | |
| GNUNET_CORE_iterate_peers (const struct GNUNET_CONFIGURATION_Handle *cfg, | | GNUNET_CORE_iterate_peers (const struct GNUNET_CONFIGURATION_Handle *cfg, | |
| GNUNET_CORE_ConnectEventHandler peer_cb, | | GNUNET_CORE_ConnectEventHandler peer_cb, | |
| void *cb_cls); | | void *cb_cls); | |
| | | | |
| /** | | /** | |
|
| * Handle to cancel 'is_peer_connected' test. | | * Check if the given peer is currently connected. This function is for spe | |
| | | cial | |
| | | * cirumstances (GNUNET_TESTBED uses it), normal users of the CORE API are | |
| | | * expected to track which peers are connected based on the connect/disconn | |
| | | ect | |
| | | * callbacks from #GNUNET_CORE_connect. This function is NOT part of the | |
| | | * 'versioned', 'official' API. This function returns | |
| | | * synchronously after looking in the CORE API cache. | |
| | | * | |
| | | * @param h the core handle | |
| | | * @param pid the identity of the peer to check if it has been connected to | |
| | | us | |
| | | * @return #GNUNET_YES if the peer is connected to us; #GNUNET_NO if not | |
| */ | | */ | |
|
| struct GNUNET_CORE_ConnectTestHandle; | | int | |
| | | GNUNET_CORE_is_peer_connected_sync (const struct GNUNET_CORE_Handle *h, | |
| /** | | const struct GNUNET_PeerIdentity *pid); | |
| * Check if the given peer is currently connected and return information | | | |
| * about the session if so. This function is for special cirumstances | | | |
| * (GNUNET_TESTING uses it), normal users of the CORE API are | | | |
| * expected to track which peers are connected based on the | | | |
| * connect/disconnect callbacks from GNUNET_CORE_connect. This | | | |
| * function is NOT part of the 'versioned', 'official' API. | | | |
| * | | | |
| * @param cfg configuration to use | | | |
| * @param peer the specific peer to check for | | | |
| * @param peer_cb function to call with the peer information | | | |
| * @param cb_cls closure for peer_cb | | | |
| * @return handle to cancel the operation | | | |
| */ | | | |
| struct GNUNET_CORE_ConnectTestHandle * | | | |
| GNUNET_CORE_is_peer_connected (const struct GNUNET_CONFIGURATION_Handle *cf | | | |
| g, | | | |
| const struct GNUNET_PeerIdentity *peer, | | | |
| GNUNET_CORE_ConnectEventHandler peer_cb, | | | |
| void *cb_cls); | | | |
| | | | |
| /** | | /** | |
|
| * Abort 'is_connected' test operation. | | * Create a message queue for sending messages to a peer with CORE. | |
| * | | * Messages may only be queued with #GNUNET_MQ_send once the init callback | |
| * @param cth handle for operation to cancel | | has | |
| */ | | * been called for the given handle. | |
| void | | * There must only be one queue per peer for each core handle. | |
| GNUNET_CORE_is_peer_connected_cancel (struct GNUNET_CORE_ConnectTestHandle | | * The message queue can only be used to transmit messages, | |
| *cth); | | * not to receive them. | |
| | | * | |
| | | * @param h the core handle | |
| | | * @param target the target peer for this queue, may not be NULL | |
| | | * @return a message queue for sending messages over the core handle | |
| | | * to the target peer | |
| | | */ | |
| | | struct GNUNET_MQ_Handle * | |
| | | GNUNET_CORE_mq_create (struct GNUNET_CORE_Handle *h, | |
| | | const struct GNUNET_PeerIdentity *target); | |
| | | | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| { | | { | |
| #endif | | #endif | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| } | | } | |
| #endif | | #endif | |
| | | | |
|
| | | /** @} */ /* end of group core */ | |
| | | | |
| /* ifndef GNUNET_CORE_SERVICE_H */ | | /* ifndef GNUNET_CORE_SERVICE_H */ | |
| #endif | | #endif | |
| /* end of gnunet_core_service.h */ | | /* end of gnunet_core_service.h */ | |
| | | | |
End of changes. 26 change blocks. |
| 79 lines changed or deleted | | 68 lines changed or added | |
|
| gnunet_crypto_lib.h | | gnunet_crypto_lib.h | |
| /* | | /* | |
| This file is part of GNUnet. | | This file is part of GNUnet. | |
|
| (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2012 Christian Grothoff
(and other contributing authors) | | (C) 2001-2013 Christian Grothoff (and other contributing authors) | |
| | | | |
| GNUnet is free software; you can redistribute it and/or modify | | GNUnet is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published | | 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. | | option) any later version. | |
| | | | |
| GNUnet is distributed in the hope that it will be useful, but | | GNUnet is distributed in the hope that it will be useful, but | |
| WITHOUT ANY WARRANTY; without even the implied warranty of | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| General Public License for more details. | | General Public License for more details. | |
| | | | |
| You should have received a copy of the GNU General Public License | | You should have received a copy of the GNU General Public License | |
| along with GNUnet; see the file COPYING. If not, write to the | | along with GNUnet; see the file COPYING. If not, write to the | |
| Free Software Foundation, Inc., 59 Temple Place - Suite 330, | | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| | | | |
| skipping to change at line 30 | | skipping to change at line 30 | |
| | | | |
| /** | | /** | |
| * @file include/gnunet_crypto_lib.h | | * @file include/gnunet_crypto_lib.h | |
| * @brief cryptographic primitives for GNUnet | | * @brief cryptographic primitives for GNUnet | |
| * | | * | |
| * @author Christian Grothoff | | * @author Christian Grothoff | |
| * @author Krista Bennett | | * @author Krista Bennett | |
| * @author Gerd Knorr <kraxel@bytesex.org> | | * @author Gerd Knorr <kraxel@bytesex.org> | |
| * @author Ioana Patrascu | | * @author Ioana Patrascu | |
| * @author Tzvetan Horozov | | * @author Tzvetan Horozov | |
|
| | | * | |
| | | * @defgroup crypto Cryptographic operations | |
| | | * @defgroup hash Hashing and operations on hashes | |
| */ | | */ | |
| | | | |
| #ifndef GNUNET_CRYPTO_LIB_H | | #ifndef GNUNET_CRYPTO_LIB_H | |
| #define GNUNET_CRYPTO_LIB_H | | #define GNUNET_CRYPTO_LIB_H | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| extern "C" | | extern "C" | |
| { | | { | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| } | | } | |
| #endif | | #endif | |
| #endif | | #endif | |
| | | | |
|
| | | /** | |
| | | * @brief A 512-bit hashcode | |
| | | */ | |
| | | struct GNUNET_HashCode; | |
| | | | |
| | | /** | |
| | | * The identity of the host (wraps the signing key of the peer). | |
| | | */ | |
| | | struct GNUNET_PeerIdentity; | |
| | | | |
| #include "gnunet_common.h" | | #include "gnunet_common.h" | |
| #include "gnunet_scheduler_lib.h" | | #include "gnunet_scheduler_lib.h" | |
| | | | |
| /** | | /** | |
|
| * Desired quality level for cryptographic operations. | | * @brief A 512-bit hashcode | |
| | | */ | |
| | | struct GNUNET_HashCode | |
| | | { | |
| | | uint32_t bits[512 / 8 / sizeof (uint32_t)]; /* = 16 */ | |
| | | }; | |
| | | | |
| | | /** | |
| | | * Maximum length of an ECC signature. | |
| | | * Note: round up to multiple of 8 minus 2 for alignment. | |
| | | */ | |
| | | #define GNUNET_CRYPTO_ECC_SIGNATURE_DATA_ENCODING_LENGTH 126 | |
| | | | |
| | | /** | |
| | | * Desired quality level for random numbers. | |
| | | * @ingroup crypto | |
| */ | | */ | |
| enum GNUNET_CRYPTO_Quality | | enum GNUNET_CRYPTO_Quality | |
| { | | { | |
| /** | | /** | |
| * No good quality of the operation is needed (i.e., | | * No good quality of the operation is needed (i.e., | |
| * random numbers can be pseudo-random). | | * random numbers can be pseudo-random). | |
|
| | | * @ingroup crypto | |
| */ | | */ | |
| GNUNET_CRYPTO_QUALITY_WEAK, | | GNUNET_CRYPTO_QUALITY_WEAK, | |
| | | | |
| /** | | /** | |
| * High-quality operations are desired. | | * High-quality operations are desired. | |
|
| | | * @ingroup crypto | |
| */ | | */ | |
| GNUNET_CRYPTO_QUALITY_STRONG, | | GNUNET_CRYPTO_QUALITY_STRONG, | |
| | | | |
| /** | | /** | |
| * Randomness for IVs etc. is required. | | * Randomness for IVs etc. is required. | |
|
| | | * @ingroup crypto | |
| */ | | */ | |
| GNUNET_CRYPTO_QUALITY_NONCE | | GNUNET_CRYPTO_QUALITY_NONCE | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * @brief length of the sessionkey in bytes (256 BIT sessionkey) | | * @brief length of the sessionkey in bytes (256 BIT sessionkey) | |
| */ | | */ | |
| #define GNUNET_CRYPTO_AES_KEY_LENGTH (256/8) | | #define GNUNET_CRYPTO_AES_KEY_LENGTH (256/8) | |
| | | | |
| /** | | /** | |
|
| * @brief Length of RSA encrypted data (2048 bit) | | | |
| * | | | |
| * We currently do not handle encryption of data | | | |
| * that can not be done in a single call to the | | | |
| * RSA methods (read: large chunks of data). | | | |
| * We should never need that, as we can use | | | |
| * the GNUNET_CRYPTO_hash for larger pieces of data for signing, | | | |
| * and for encryption, we only need to encode sessionkeys! | | | |
| */ | | | |
| #define GNUNET_CRYPTO_RSA_DATA_ENCODING_LENGTH 256 | | | |
| | | | |
| /** | | | |
| * Length of an RSA KEY (n,e,len), 2048 bit (=256 octests) key n, 2 byte e | | | |
| */ | | | |
| #define GNUNET_CRYPTO_RSA_KEY_LENGTH 258 | | | |
| | | | |
| /** | | | |
| * Length of a hash value | | * Length of a hash value | |
| */ | | */ | |
| #define GNUNET_CRYPTO_HASH_LENGTH (512/8) | | #define GNUNET_CRYPTO_HASH_LENGTH (512/8) | |
| | | | |
| /** | | /** | |
|
| * Maximum length of an ECC signature. | | * How many characters (without 0-terminator) are our ASCII-encoded | |
| * Note: round up to multiple of 8 minus 2 for alignment. | | * public keys (ECDSA/EDDSA/ECDHE). | |
| */ | | | |
| #define GNUNET_CRYPTO_ECC_SIGNATURE_DATA_ENCODING_LENGTH 190 | | | |
| | | | |
| /** | | | |
| * Maximum length of the public key (q-point, Q = dP) when encoded. | | | |
| */ | | | |
| #define GNUNET_CRYPTO_ECC_MAX_PUBLIC_KEY_LENGTH 140 | | | |
| | | | |
| /** | | | |
| * The private information of an RSA key pair. | | | |
| */ | | | |
| struct GNUNET_CRYPTO_RsaPrivateKey; | | | |
| | | | |
| /** | | | |
| * The private information of an ECC private key. | | | |
| */ | | */ | |
|
| struct GNUNET_CRYPTO_EccPrivateKey; | | #define GNUNET_CRYPTO_PKEY_ASCII_LENGTH 52 | |
| | | | |
| GNUNET_NETWORK_STRUCT_BEGIN | | | |
| | | | |
| /** | | | |
| * GNUnet mandates a certain format for the encoding | | | |
| * of private RSA key information that is provided | | | |
| * by the RSA implementations. This format is used | | | |
| * to serialize a private RSA key (typically when | | | |
| * writing it to disk). | | | |
| */ | | | |
| struct GNUNET_CRYPTO_RsaPrivateKeyBinaryEncoded | | | |
| { | | | |
| /** | | | |
| * Total size of the structure, in bytes, in big-endian! | | | |
| */ | | | |
| uint16_t len GNUNET_PACKED; | | | |
| uint16_t sizen GNUNET_PACKED; /* in big-endian! */ | | | |
| uint16_t sizee GNUNET_PACKED; /* in big-endian! */ | | | |
| uint16_t sized GNUNET_PACKED; /* in big-endian! */ | | | |
| uint16_t sizep GNUNET_PACKED; /* in big-endian! */ | | | |
| uint16_t sizeq GNUNET_PACKED; /* in big-endian! */ | | | |
| uint16_t sizedmp1 GNUNET_PACKED; /* in big-endian! */ | | | |
| uint16_t sizedmq1 GNUNET_PACKED; /* in big-endian! */ | | | |
| /* followed by the actual values */ | | | |
| }; | | | |
| GNUNET_NETWORK_STRUCT_END | | | |
| | | | |
| /** | | /** | |
| * @brief 0-terminated ASCII encoding of a struct GNUNET_HashCode. | | * @brief 0-terminated ASCII encoding of a struct GNUNET_HashCode. | |
| */ | | */ | |
| struct GNUNET_CRYPTO_HashAsciiEncoded | | struct GNUNET_CRYPTO_HashAsciiEncoded | |
| { | | { | |
| unsigned char encoding[104]; | | unsigned char encoding[104]; | |
| }; | | }; | |
| | | | |
|
| /** | | | |
| * @brief 0-terminated ASCII encoding of a 'struct GNUNET_ShortHashCode'. | | | |
| */ | | | |
| struct GNUNET_CRYPTO_ShortHashAsciiEncoded | | | |
| { | | | |
| unsigned char short_encoding[53]; | | | |
| }; | | | |
| | | | |
| /** | | | |
| * @brief an RSA signature | | | |
| */ | | | |
| struct GNUNET_CRYPTO_RsaSignature | | | |
| { | | | |
| unsigned char sig[GNUNET_CRYPTO_RSA_DATA_ENCODING_LENGTH]; | | | |
| }; | | | |
| | | | |
| GNUNET_NETWORK_STRUCT_BEGIN | | GNUNET_NETWORK_STRUCT_BEGIN | |
| | | | |
| /** | | /** | |
|
| * @brief header of what an RSA signature signs | | * @brief header of what an ECC signature signs | |
| * this must be followed by "size - 8" bytes of | | * this must be followed by "size - 8" bytes of | |
| * the actual signed data | | * the actual signed data | |
| */ | | */ | |
|
| struct GNUNET_CRYPTO_RsaSignaturePurpose | | struct GNUNET_CRYPTO_EccSignaturePurpose | |
| { | | { | |
| /** | | /** | |
| * How many bytes does this signature sign? | | * How many bytes does this signature sign? | |
| * (including this purpose header); in network | | * (including this purpose header); in network | |
| * byte order (!). | | * byte order (!). | |
| */ | | */ | |
| uint32_t size GNUNET_PACKED; | | uint32_t size GNUNET_PACKED; | |
| | | | |
| /** | | /** | |
| * What does this signature vouch for? This | | * What does this signature vouch for? This | |
| * must contain a GNUNET_SIGNATURE_PURPOSE_XXX | | * must contain a GNUNET_SIGNATURE_PURPOSE_XXX | |
| * constant (from gnunet_signatures.h). In | | * constant (from gnunet_signatures.h). In | |
| * network byte order! | | * network byte order! | |
| */ | | */ | |
| uint32_t purpose GNUNET_PACKED; | | uint32_t purpose GNUNET_PACKED; | |
| | | | |
| }; | | }; | |
| | | | |
| /** | | /** | |
|
| * @brief A public key. | | * @brief an ECC signature using EdDSA. | |
| | | * See https://gnunet.org/ed25519 | |
| */ | | */ | |
|
| struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded | | struct GNUNET_CRYPTO_EddsaSignature | |
| { | | { | |
|
| | | | |
| /** | | /** | |
|
| * In big-endian, must be GNUNET_CRYPTO_RSA_KEY_LENGTH+4 | | * R value. | |
| */ | | */ | |
|
| uint16_t len GNUNET_PACKED; | | unsigned char r[256 / 8]; | |
| | | | |
| /** | | /** | |
|
| * Size of n in key; in big-endian! | | * S value. | |
| */ | | */ | |
|
| uint16_t sizen GNUNET_PACKED; | | unsigned char s[256 / 8]; | |
| | | | |
| | | }; | |
| | | | |
| | | /** | |
| | | * @brief an ECC signature using ECDSA | |
| | | */ | |
| | | struct GNUNET_CRYPTO_EcdsaSignature | |
| | | { | |
| | | | |
| /** | | /** | |
|
| * The key itself, contains n followed by e. | | * R value. | |
| */ | | */ | |
|
| unsigned char key[GNUNET_CRYPTO_RSA_KEY_LENGTH]; | | unsigned char r[256 / 8]; | |
| | | | |
| /** | | /** | |
|
| * Padding (must be 0) | | * S value. | |
| */ | | */ | |
|
| uint16_t padding GNUNET_PACKED; | | unsigned char s[256 / 8]; | |
| | | | |
| }; | | }; | |
| | | | |
| /** | | /** | |
|
| * RSA Encrypted data. | | * Public ECC key (always for Curve25519) encoded in a format suitable | |
| | | * for network transmission and EdDSA signatures. | |
| */ | | */ | |
|
| struct GNUNET_CRYPTO_RsaEncryptedData | | struct GNUNET_CRYPTO_EddsaPublicKey | |
| { | | { | |
|
| unsigned char encoding[GNUNET_CRYPTO_RSA_DATA_ENCODING_LENGTH]; | | /** | |
| | | * Q consists of an x- and a y-value, each mod p (256 bits), given | |
| | | * here in affine coordinates and Ed25519 standard compact format. | |
| | | */ | |
| | | unsigned char q_y[256 / 8]; | |
| | | | |
| }; | | }; | |
| | | | |
| /** | | /** | |
|
| * @brief header of what an ECC signature signs | | * Public ECC key (always for Curve25519) encoded in a format suitable | |
| * this must be followed by "size - 8" bytes of | | * for network transmission and ECDSA signatures. | |
| * the actual signed data | | | |
| */ | | */ | |
|
| struct GNUNET_CRYPTO_EccSignaturePurpose | | struct GNUNET_CRYPTO_EcdsaPublicKey | |
| { | | { | |
| /** | | /** | |
|
| * How many bytes does this signature sign? | | * Q consists of an x- and a y-value, each mod p (256 bits), given | |
| * (including this purpose header); in network | | * here in affine coordinates and Ed25519 standard compact format. | |
| * byte order (!). | | | |
| */ | | | |
| uint32_t size GNUNET_PACKED; | | | |
| | | | |
| /** | | | |
| * What does this signature vouch for? This | | | |
| * must contain a GNUNET_SIGNATURE_PURPOSE_XXX | | | |
| * constant (from gnunet_signatures.h). In | | | |
| * network byte order! | | | |
| */ | | */ | |
|
| uint32_t purpose GNUNET_PACKED; | | unsigned char q_y[256 / 8]; | |
| | | | |
| }; | | }; | |
| | | | |
| /** | | /** | |
|
| * @brief an ECC signature | | * The identity of the host (wraps the signing key of the peer). | |
| */ | | */ | |
|
| struct GNUNET_CRYPTO_EccSignature | | struct GNUNET_PeerIdentity | |
| { | | { | |
|
| /** | | struct GNUNET_CRYPTO_EddsaPublicKey public_key; | |
| * Overall size of the signature data. | | }; | |
| */ | | | |
| uint16_t size; | | | |
| | | | |
|
| | | /** | |
| | | * Public ECC key (always for Curve25519) encoded in a format suitable | |
| | | * for network transmission and encryption (ECDH), | |
| | | * See http://cr.yp.to/ecdh.html | |
| | | */ | |
| | | struct GNUNET_CRYPTO_EcdhePublicKey | |
| | | { | |
| /** | | /** | |
|
| * S-expression, padded with zeros. | | * Q consists of an x- and a y-value, each mod p (256 bits), given | |
| | | * here in affine coordinates and Ed25519 standard compact format. | |
| */ | | */ | |
|
| char sexpr[GNUNET_CRYPTO_ECC_SIGNATURE_DATA_ENCODING_LENGTH]; | | unsigned char q_y[256 / 8]; | |
| }; | | }; | |
| | | | |
| /** | | /** | |
|
| * Public ECC key (always for NIST P-521) encoded in a format suitable | | * Private ECC key encoded for transmission. To be used only for ECDH | |
| * for network transmission as created using 'gcry_sexp_sprint'. | | * key exchange (ECDHE to be precise). | |
| */ | | */ | |
|
| struct GNUNET_CRYPTO_EccPublicKeyBinaryEncoded | | struct GNUNET_CRYPTO_EcdhePrivateKey | |
| { | | { | |
| /** | | /** | |
|
| * Size of the encoding, in network byte order. | | * d is a value mod n, where n has at most 256 bits. | |
| */ | | */ | |
|
| uint16_t size; | | unsigned char d[256 / 8]; | |
| | | | |
|
| /** | | }; | |
| * Actual length of the q-point binary encoding. | | | |
| */ | | | |
| uint16_t len; | | | |
| | | | |
|
| | | /** | |
| | | * Private ECC key encoded for transmission. To be used only for ECDSA | |
| | | * signatures. | |
| | | */ | |
| | | struct GNUNET_CRYPTO_EcdsaPrivateKey | |
| | | { | |
| /** | | /** | |
|
| * 0-padded q-point in binary encoding (GCRYPT_MPI_FMT_USG). | | * d is a value mod n, where n has at most 256 bits. | |
| */ | | */ | |
|
| unsigned char key[GNUNET_CRYPTO_ECC_MAX_PUBLIC_KEY_LENGTH]; | | unsigned char d[256 / 8]; | |
| | | | |
| }; | | }; | |
| | | | |
|
| struct GNUNET_CRYPTO_EccPrivateKeyBinaryEncoded | | /** | |
| | | * Private ECC key encoded for transmission. To be used only for EdDSA | |
| | | * signatures. | |
| | | */ | |
| | | struct GNUNET_CRYPTO_EddsaPrivateKey | |
| { | | { | |
| /** | | /** | |
|
| * Overall size of the private key. | | * d is a value mod n, where n has at most 256 bits. | |
| */ | | */ | |
|
| uint16_t size; | | unsigned char d[256 / 8]; | |
| | | | |
| /* followd by S-expression, opaque to applications */ | | | |
| | | | |
| /* FIXME: consider defining padding to make this a fixed-size struct */ | | | |
| | | | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * @brief type for session keys | | * @brief type for session keys | |
| */ | | */ | |
|
| struct GNUNET_CRYPTO_AesSessionKey | | struct GNUNET_CRYPTO_SymmetricSessionKey | |
| { | | { | |
| /** | | /** | |
|
| * Actual key. | | * Actual key for AES. | |
| */ | | */ | |
|
| unsigned char key[GNUNET_CRYPTO_AES_KEY_LENGTH]; | | unsigned char aes_key[GNUNET_CRYPTO_AES_KEY_LENGTH]; | |
| | | | |
| /** | | /** | |
|
| * checksum! | | * Actual key for TwoFish. | |
| */ | | */ | |
|
| uint32_t crc32 GNUNET_PACKED; | | unsigned char twofish_key[GNUNET_CRYPTO_AES_KEY_LENGTH]; | |
| | | | |
| }; | | }; | |
|
| | | | |
| GNUNET_NETWORK_STRUCT_END | | GNUNET_NETWORK_STRUCT_END | |
| | | | |
| /** | | /** | |
| * @brief IV for sym cipher | | * @brief IV for sym cipher | |
| * | | * | |
| * NOTE: must be smaller (!) in size than the | | * NOTE: must be smaller (!) in size than the | |
|
| * struct GNUNET_HashCode. | | * `struct GNUNET_HashCode`. | |
| */ | | */ | |
|
| struct GNUNET_CRYPTO_AesInitializationVector | | struct GNUNET_CRYPTO_SymmetricInitializationVector | |
| { | | { | |
|
| unsigned char iv[GNUNET_CRYPTO_AES_KEY_LENGTH / 2]; | | unsigned char aes_iv[GNUNET_CRYPTO_AES_KEY_LENGTH / 2]; | |
| | | | |
| | | unsigned char twofish_iv[GNUNET_CRYPTO_AES_KEY_LENGTH / 2]; | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * @brief type for (message) authentication keys | | * @brief type for (message) authentication keys | |
| */ | | */ | |
| struct GNUNET_CRYPTO_AuthKey | | struct GNUNET_CRYPTO_AuthKey | |
| { | | { | |
| unsigned char key[GNUNET_CRYPTO_HASH_LENGTH]; | | unsigned char key[GNUNET_CRYPTO_HASH_LENGTH]; | |
| }; | | }; | |
| | | | |
| /* **************** Functions and Macros ************* */ | | /* **************** Functions and Macros ************* */ | |
| | | | |
| /** | | /** | |
|
| * Seed a weak random generator. Only GNUNET_CRYPTO_QUALITY_WEAK-mode gener | | * @ingroup crypto | |
| ator | | * Seed a weak random generator. Only #GNUNET_CRYPTO_QUALITY_WEAK-mode gene | |
| | | rator | |
| * can be seeded. | | * can be seeded. | |
| * | | * | |
| * @param seed the seed to use | | * @param seed the seed to use | |
| */ | | */ | |
| void | | void | |
| GNUNET_CRYPTO_seed_weak_random (int32_t seed); | | GNUNET_CRYPTO_seed_weak_random (int32_t seed); | |
| | | | |
| /** | | /** | |
| * Perform an incremental step in a CRC16 (for TCP/IP) calculation. | | * Perform an incremental step in a CRC16 (for TCP/IP) calculation. | |
| * | | * | |
| * @param sum current sum, initially 0 | | * @param sum current sum, initially 0 | |
| * @param buf buffer to calculate CRC over (must be 16-bit aligned) | | * @param buf buffer to calculate CRC over (must be 16-bit aligned) | |
|
| * @param len number of bytes in hdr, must be multiple of 2 | | * @param len number of bytes in @a buf, must be multiple of 2 | |
| * @return updated crc sum (must be subjected to GNUNET_CRYPTO_crc16_finish | | * @return updated crc sum (must be subjected to #GNUNET_CRYPTO_crc16_finis | |
| to get actual crc16) | | h to get actual crc16) | |
| */ | | */ | |
| uint32_t | | uint32_t | |
| GNUNET_CRYPTO_crc16_step (uint32_t sum, const void *buf, size_t len); | | GNUNET_CRYPTO_crc16_step (uint32_t sum, const void *buf, size_t len); | |
| | | | |
| /** | | /** | |
| * Convert results from GNUNET_CRYPTO_crc16_step to final crc16. | | * Convert results from GNUNET_CRYPTO_crc16_step to final crc16. | |
| * | | * | |
| * @param sum cummulative sum | | * @param sum cummulative sum | |
| * @return crc16 value | | * @return crc16 value | |
| */ | | */ | |
| uint16_t | | uint16_t | |
| GNUNET_CRYPTO_crc16_finish (uint32_t sum); | | GNUNET_CRYPTO_crc16_finish (uint32_t sum); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hash | |
| * Calculate the checksum of a buffer in one step. | | * Calculate the checksum of a buffer in one step. | |
| * | | * | |
|
| * @param buf buffer to calculate CRC over (must be 16-bit aligned) | | * @param buf buffer to calculate CRC over (must be 16-bit aligned) | |
| * @param len number of bytes in hdr, must be multiple of 2 | | * @param len number of bytes in @a buf, must be multiple of 2 | |
| * @return crc16 value | | * @return crc16 value | |
| */ | | */ | |
| uint16_t | | uint16_t | |
| GNUNET_CRYPTO_crc16_n (const void *buf, size_t len); | | GNUNET_CRYPTO_crc16_n (const void *buf, size_t len); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hash | |
| * Compute the CRC32 checksum for the first len | | * Compute the CRC32 checksum for the first len | |
| * bytes of the buffer. | | * bytes of the buffer. | |
| * | | * | |
| * @param buf the data over which we're taking the CRC | | * @param buf the data over which we're taking the CRC | |
|
| * @param len the length of the buffer in bytes | | * @param len the length of the buffer @a buf in bytes | |
| * @return the resulting CRC32 checksum | | * @return the resulting CRC32 checksum | |
| */ | | */ | |
| int32_t | | int32_t | |
| GNUNET_CRYPTO_crc32_n (const void *buf, size_t len); | | GNUNET_CRYPTO_crc32_n (const void *buf, size_t len); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup crypto | |
| | | * Fill block with a random values. | |
| | | * | |
| | | * @param mode desired quality of the random number | |
| | | * @param buffer the buffer to fill | |
| | | * @param length buffer length | |
| | | */ | |
| | | void | |
| | | GNUNET_CRYPTO_random_block (enum GNUNET_CRYPTO_Quality mode, void *buffer, | |
| | | size_t length); | |
| | | | |
| | | /** | |
| | | * @ingroup crypto | |
| * Produce a random value. | | * Produce a random value. | |
| * | | * | |
| * @param mode desired quality of the random number | | * @param mode desired quality of the random number | |
| * @param i the upper limit (exclusive) for the random number | | * @param i the upper limit (exclusive) for the random number | |
|
| * @return a random value in the interval [0,i) (exclusive). | | * @return a random value in the interval [0,@a i) (exclusive). | |
| */ | | */ | |
| uint32_t | | uint32_t | |
| GNUNET_CRYPTO_random_u32 (enum GNUNET_CRYPTO_Quality mode, uint32_t i); | | GNUNET_CRYPTO_random_u32 (enum GNUNET_CRYPTO_Quality mode, uint32_t i); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup crypto | |
| * Random on unsigned 64-bit values. | | * Random on unsigned 64-bit values. | |
| * | | * | |
| * @param mode desired quality of the random number | | * @param mode desired quality of the random number | |
|
| * @param max value returned will be in range [0,max) (exclusive) | | * @param max value returned will be in range [0,@a max) (exclusive) | |
| * @return random 64-bit number | | * @return random 64-bit number | |
| */ | | */ | |
| uint64_t | | uint64_t | |
| GNUNET_CRYPTO_random_u64 (enum GNUNET_CRYPTO_Quality mode, uint64_t max); | | GNUNET_CRYPTO_random_u64 (enum GNUNET_CRYPTO_Quality mode, uint64_t max); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup crypto | |
| * Get an array with a random permutation of the | | * Get an array with a random permutation of the | |
| * numbers 0...n-1. | | * numbers 0...n-1. | |
|
| * @param mode GNUNET_CRYPTO_QUALITY_STRONG if the strong (but expensive) P | | * @param mode #GNUNET_CRYPTO_QUALITY_STRONG if the strong (but expensive) | |
| RNG should be used, GNUNET_CRYPTO_QUALITY_WEAK otherwise | | PRNG should be used, | |
| | | * #GNUNET_CRYPTO_QUALITY_WEAK or #GNUNET_CRYPTO_QUALITY_NONCE | |
| | | otherwise | |
| * @param n the size of the array | | * @param n the size of the array | |
| * @return the permutation array (allocated from heap) | | * @return the permutation array (allocated from heap) | |
| */ | | */ | |
| unsigned int * | | unsigned int * | |
| GNUNET_CRYPTO_random_permute (enum GNUNET_CRYPTO_Quality mode, unsigned int
n); | | GNUNET_CRYPTO_random_permute (enum GNUNET_CRYPTO_Quality mode, unsigned int
n); | |
| | | | |
| /** | | /** | |
|
| * Create a new Session key. | | * @ingroup crypto | |
| | | * Create a new random session key. | |
| * | | * | |
| * @param key key to initialize | | * @param key key to initialize | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_CRYPTO_aes_create_session_key (struct GNUNET_CRYPTO_AesSessionKey *k | | GNUNET_CRYPTO_symmetric_create_session_key (struct GNUNET_CRYPTO_SymmetricS | |
| ey); | | essionKey *key); | |
| | | | |
| /** | | | |
| * Check that a new session key is well-formed. | | | |
| * | | | |
| * @param key key to check | | | |
| * @return GNUNET_OK if the key is valid | | | |
| */ | | | |
| int | | | |
| GNUNET_CRYPTO_aes_check_session_key (const struct GNUNET_CRYPTO_AesSessionK | | | |
| ey | | | |
| *key); | | | |
| | | | |
| /** | | /** | |
|
| * Encrypt a block with the public key of another | | * @ingroup crypto | |
| * host that uses the same cyper. | | * Encrypt a block using a symmetric sessionkey. | |
| * | | * | |
| * @param block the block to encrypt | | * @param block the block to encrypt | |
|
| * @param len the size of the block | | * @param size the size of the @a block | |
| * @param sessionkey the key used to encrypt | | * @param sessionkey the key used to encrypt | |
| * @param iv the initialization vector to use, use INITVALUE | | * @param iv the initialization vector to use, use INITVALUE | |
| * for streams. | | * for streams. | |
| * @return the size of the encrypted block, -1 for errors | | * @return the size of the encrypted block, -1 for errors | |
| */ | | */ | |
| ssize_t | | ssize_t | |
|
| GNUNET_CRYPTO_aes_encrypt (const void *block, size_t len, | | GNUNET_CRYPTO_symmetric_encrypt (const void *block, size_t size, | |
| const struct GNUNET_CRYPTO_AesSessionKey *sessio | | const struct GNUNET_CRYPTO_SymmetricSessio | |
| nkey, | | nKey *sessionkey, | |
| const struct GNUNET_CRYPTO_AesInitializationVect | | const struct GNUNET_CRYPTO_SymmetricInitia | |
| or | | lizationVector *iv, | |
| *iv, void *result); | | void *result); | |
| | | | |
| /** | | /** | |
|
| * Decrypt a given block with the sessionkey. | | * @ingroup crypto | |
| | | * Decrypt a given block using a symmetric sessionkey. | |
| * | | * | |
| * @param block the data to decrypt, encoded as returned by encrypt | | * @param block the data to decrypt, encoded as returned by encrypt | |
| * @param size how big is the block? | | * @param size how big is the block? | |
| * @param sessionkey the key used to decrypt | | * @param sessionkey the key used to decrypt | |
| * @param iv the initialization vector to use | | * @param iv the initialization vector to use | |
| * @param result address to store the result at | | * @param result address to store the result at | |
| * @return -1 on failure, size of decrypted block on success | | * @return -1 on failure, size of decrypted block on success | |
| */ | | */ | |
| ssize_t | | ssize_t | |
|
| GNUNET_CRYPTO_aes_decrypt (const void *block, size_t size, | | GNUNET_CRYPTO_symmetric_decrypt (const void *block, size_t size, | |
| const struct GNUNET_CRYPTO_AesSessionKey *sessio | | const struct GNUNET_CRYPTO_SymmetricSessio | |
| nkey, | | nKey *sessionkey, | |
| const struct GNUNET_CRYPTO_AesInitializationVect | | const struct GNUNET_CRYPTO_SymmetricInitia | |
| or | | lizationVector *iv, | |
| *iv, void *result); | | void *result); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup crypto | |
| * @brief Derive an IV | | * @brief Derive an IV | |
| * @param iv initialization vector | | * @param iv initialization vector | |
| * @param skey session key | | * @param skey session key | |
| * @param salt salt for the derivation | | * @param salt salt for the derivation | |
|
| * @param salt_len size of the salt | | * @param salt_len size of the @a salt | |
| * @param ... pairs of void * & size_t for context chunks, terminated by NU
LL | | * @param ... pairs of void * & size_t for context chunks, terminated by NU
LL | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_CRYPTO_aes_derive_iv (struct GNUNET_CRYPTO_AesInitializationVector * | | GNUNET_CRYPTO_symmetric_derive_iv (struct GNUNET_CRYPTO_SymmetricInitializa | |
| iv, | | tionVector *iv, | |
| const struct GNUNET_CRYPTO_AesSessionKey *skey | | const struct GNUNET_CRYPTO_SymmetricSess | |
| , | | ionKey *skey, | |
| const void *salt, size_t salt_len, ...); | | const void *salt, | |
| | | size_t salt_len, ...); | |
| | | | |
| /** | | /** | |
| * @brief Derive an IV | | * @brief Derive an IV | |
| * @param iv initialization vector | | * @param iv initialization vector | |
| * @param skey session key | | * @param skey session key | |
| * @param salt salt for the derivation | | * @param salt salt for the derivation | |
|
| * @param salt_len size of the salt | | * @param salt_len size of the @a salt | |
| * @param argp pairs of void * & size_t for context chunks, terminated by N
ULL | | * @param argp pairs of void * & size_t for context chunks, terminated by N
ULL | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_CRYPTO_aes_derive_iv_v (struct GNUNET_CRYPTO_AesInitializationVector | | GNUNET_CRYPTO_symmetric_derive_iv_v (struct GNUNET_CRYPTO_SymmetricInitiali | |
| *iv, | | zationVector *iv, | |
| const struct GNUNET_CRYPTO_AesSessionKey *sk | | const struct GNUNET_CRYPTO_SymmetricSe | |
| ey, | | ssionKey *skey, | |
| const void *salt, size_t salt_len, va_list a | | const void *salt, | |
| rgp); | | size_t salt_len, | |
| | | va_list argp); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hash | |
| * Convert hash to ASCII encoding. | | * Convert hash to ASCII encoding. | |
| * @param block the hash code | | * @param block the hash code | |
| * @param result where to store the encoding (struct GNUNET_CRYPTO_HashAsci
iEncoded can be | | * @param result where to store the encoding (struct GNUNET_CRYPTO_HashAsci
iEncoded can be | |
| * safely cast to char*, a '\\0' termination is set). | | * safely cast to char*, a '\\0' termination is set). | |
| */ | | */ | |
| void | | void | |
| GNUNET_CRYPTO_hash_to_enc (const struct GNUNET_HashCode * block, | | GNUNET_CRYPTO_hash_to_enc (const struct GNUNET_HashCode * block, | |
| struct GNUNET_CRYPTO_HashAsciiEncoded *result); | | struct GNUNET_CRYPTO_HashAsciiEncoded *result); | |
| | | | |
| /** | | /** | |
|
| * Convert short hash to ASCII encoding. | | * @ingroup hash | |
| * | | | |
| * @param block the hash code | | | |
| * @param result where to store the encoding (struct GNUNET_CRYPTO_ShortHas | | | |
| hAsciiEncoded can be | | | |
| * safely cast to char*, a '\\0' termination is set). | | | |
| */ | | | |
| void | | | |
| GNUNET_CRYPTO_short_hash_to_enc (const struct GNUNET_CRYPTO_ShortHashCode * | | | |
| block, | | | |
| struct GNUNET_CRYPTO_ShortHashAsciiEncoded | | | |
| *result); | | | |
| | | | |
| /** | | | |
| * Convert ASCII encoding back to a 'struct GNUNET_HashCode' | | * Convert ASCII encoding back to a 'struct GNUNET_HashCode' | |
| * | | * | |
| * @param enc the encoding | | * @param enc the encoding | |
|
| * @param enclen number of characters in 'enc' (without 0-terminator, which | | * @param enclen number of characters in @a enc (without 0-terminator, whic | |
| can be missing) | | h can be missing) | |
| * @param result where to store the GNUNET_CRYPTO_hash code | | * @param result where to store the hash code | |
| * @return GNUNET_OK on success, GNUNET_SYSERR if result has the wrong enco | | * @return #GNUNET_OK on success, #GNUNET_SYSERR if result has the wrong en | |
| ding | | coding | |
| */ | | */ | |
| int | | int | |
| GNUNET_CRYPTO_hash_from_string2 (const char *enc, size_t enclen, | | GNUNET_CRYPTO_hash_from_string2 (const char *enc, size_t enclen, | |
|
| struct GNUNET_HashCode * result); | | struct GNUNET_HashCode *result); | |
| | | | |
| /** | | | |
| * Convert ASCII encoding back to a 'struct GNUNET_CRYPTO_ShortHash' | | | |
| * | | | |
| * @param enc the encoding | | | |
| * @param enclen number of characters in 'enc' (without 0-terminator, which | | | |
| can be missing) | | | |
| * @param result where to store the GNUNET_CRYPTO_hash code | | | |
| * @return GNUNET_OK on success, GNUNET_SYSERR if result has the wrong enco | | | |
| ding | | | |
| */ | | | |
| int | | | |
| GNUNET_CRYPTO_short_hash_from_string2 (const char *enc, size_t enclen, | | | |
| struct GNUNET_CRYPTO_ShortHashCode * | | | |
| result); | | | |
| | | | |
| /** | | /** | |
|
| * Convert ASCII encoding back to struct GNUNET_HashCode | | * @ingroup hash | |
| | | * Convert ASCII encoding back to `struct GNUNET_HashCode` | |
| * | | * | |
| * @param enc the encoding | | * @param enc the encoding | |
| * @param result where to store the hash code | | * @param result where to store the hash code | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR if result has the wrong enco
ding | | * @return #GNUNET_OK on success, #GNUNET_SYSERR if result has the wrong en
coding | |
| */ | | */ | |
| #define GNUNET_CRYPTO_hash_from_string(enc, result) \ | | #define GNUNET_CRYPTO_hash_from_string(enc, result) \ | |
| GNUNET_CRYPTO_hash_from_string2 (enc, strlen(enc), result) | | GNUNET_CRYPTO_hash_from_string2 (enc, strlen(enc), result) | |
| | | | |
| /** | | /** | |
|
| * Convert ASCII encoding back to a 'struct GNUNET_CRYPTO_ShortHash' | | * @ingroup hash | |
| * | | * | |
|
| * @param enc the encoding | | * Compute the distance between 2 hashcodes. The | |
| * @param result where to store the GNUNET_CRYPTO_ShortHash | | * computation must be fast, not involve @a a[0] or @a a[4] (they're used | |
| * @return GNUNET_OK on success, GNUNET_SYSERR if result has the wrong enco | | * elsewhere), and be somewhat consistent. And of course, the result | |
| ding | | * should be a positive number. | |
| */ | | | |
| #define GNUNET_CRYPTO_short_hash_from_string(enc, result) \ | | | |
| GNUNET_CRYPTO_short_hash_from_string2 (enc, strlen(enc), result) | | | |
| | | | |
| /** | | | |
| * Compare function for ShortHashCodes, producing a total ordering | | | |
| * of all hashcodes. | | | |
| * | | | |
| * @param h1 some hash code | | | |
| * @param h2 some hash code | | | |
| * @return 1 if h1 > h2, -1 if h1 < h2 and 0 if h1 == h2. | | | |
| */ | | | |
| int | | | |
| GNUNET_CRYPTO_short_hash_cmp (const struct GNUNET_CRYPTO_ShortHashCode * h1 | | | |
| , | | | |
| const struct GNUNET_CRYPTO_ShortHashCode * h2 | | | |
| ); | | | |
| | | | |
| /** | | | |
| * Compute the distance between 2 hashcodes. | | | |
| * The computation must be fast, not involve | | | |
| * a.a or a.e (they're used elsewhere), and | | | |
| * be somewhat consistent. And of course, the | | | |
| * result should be a positive number. | | | |
| * | | * | |
| * @param a some hash code | | * @param a some hash code | |
| * @param b some hash code | | * @param b some hash code | |
| * @return number between 0 and UINT32_MAX | | * @return number between 0 and UINT32_MAX | |
| */ | | */ | |
| uint32_t | | uint32_t | |
|
| GNUNET_CRYPTO_hash_distance_u32 (const struct GNUNET_HashCode * a, | | GNUNET_CRYPTO_hash_distance_u32 (const struct GNUNET_HashCode *a, | |
| const struct GNUNET_HashCode * b); | | const struct GNUNET_HashCode *b); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hash | |
| * Compute hash of a given block. | | * Compute hash of a given block. | |
| * | | * | |
| * @param block the data to hash | | * @param block the data to hash | |
|
| * @param size size of the block | | * @param size size of the @a block | |
| * @param ret pointer to where to write the hashcode | | * @param ret pointer to where to write the hashcode | |
| */ | | */ | |
| void | | void | |
| GNUNET_CRYPTO_hash (const void *block, size_t size, struct GNUNET_HashCode
* ret); | | GNUNET_CRYPTO_hash (const void *block, size_t size, struct GNUNET_HashCode
* ret); | |
| | | | |
| /** | | /** | |
|
| * Compute short (256-bit) hash of a given block. | | * @ingroup hash | |
| * | | | |
| * @param block the data to hash | | | |
| * @param size size of the block | | | |
| * @param ret pointer to where to write the hashcode | | | |
| */ | | | |
| void | | | |
| GNUNET_CRYPTO_short_hash (const void *block, size_t size, | | | |
| struct GNUNET_CRYPTO_ShortHashCode * ret); | | | |
| | | | |
| /** | | | |
| * Double short (256-bit) hash to create a long hash. | | | |
| * | | | |
| * @param sh short hash to double | | | |
| * @param dh where to store the (doubled) long hash (not really a hash) | | | |
| */ | | | |
| void | | | |
| GNUNET_CRYPTO_short_hash_double (const struct GNUNET_CRYPTO_ShortHashCode * | | | |
| sh, | | | |
| struct GNUNET_HashCode *dh); | | | |
| | | | |
| /** | | | |
| * Truncate doubled short hash back to a short hash. | | | |
| * | | | |
| * @param dh doubled short hash to reduce again | | | |
| * @param sh where to store the short hash | | | |
| * @return GNUNET_OK on success, GNUNET_SYSERR if this was not a | | | |
| * doubled short hash | | | |
| */ | | | |
| int | | | |
| GNUNET_CRYPTO_short_hash_from_truncation (const struct GNUNET_HashCode *dh, | | | |
| struct GNUNET_CRYPTO_ShortHashCode | | | |
| *sh); | | | |
| | | | |
| /** | | | |
| * Calculate HMAC of a message (RFC 2104) | | * Calculate HMAC of a message (RFC 2104) | |
| * | | * | |
| * @param key secret key | | * @param key secret key | |
| * @param plaintext input plaintext | | * @param plaintext input plaintext | |
|
| * @param plaintext_len length of plaintext | | * @param plaintext_len length of @a plaintext | |
| * @param hmac where to store the hmac | | * @param hmac where to store the hmac | |
| */ | | */ | |
| void | | void | |
| GNUNET_CRYPTO_hmac (const struct GNUNET_CRYPTO_AuthKey *key, | | GNUNET_CRYPTO_hmac (const struct GNUNET_CRYPTO_AuthKey *key, | |
| const void *plaintext, size_t plaintext_len, | | const void *plaintext, size_t plaintext_len, | |
| struct GNUNET_HashCode * hmac); | | struct GNUNET_HashCode * hmac); | |
| | | | |
| /** | | /** | |
| * Function called once the hash computation over the | | * Function called once the hash computation over the | |
| * specified file has completed. | | * specified file has completed. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param res resulting hash, NULL on error | | * @param res resulting hash, NULL on error | |
| */ | | */ | |
| typedef void (*GNUNET_CRYPTO_HashCompletedCallback) (void *cls, | | typedef void (*GNUNET_CRYPTO_HashCompletedCallback) (void *cls, | |
|
| const struct GNUNET_Ha | | const struct GNUNET_Ha | |
| shCode * | | shCode *res); | |
| res); | | | |
| | | | |
| /** | | /** | |
| * Handle to file hashing operation. | | * Handle to file hashing operation. | |
| */ | | */ | |
| struct GNUNET_CRYPTO_FileHashContext; | | struct GNUNET_CRYPTO_FileHashContext; | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hash | |
| * Compute the hash of an entire file. | | * Compute the hash of an entire file. | |
| * | | * | |
| * @param priority scheduling priority to use | | * @param priority scheduling priority to use | |
| * @param filename name of file to hash | | * @param filename name of file to hash | |
| * @param blocksize number of bytes to process in one task | | * @param blocksize number of bytes to process in one task | |
| * @param callback function to call upon completion | | * @param callback function to call upon completion | |
|
| * @param callback_cls closure for callback | | * @param callback_cls closure for @a callback | |
| * @return NULL on (immediate) errror | | * @return NULL on (immediate) errror | |
| */ | | */ | |
| struct GNUNET_CRYPTO_FileHashContext * | | struct GNUNET_CRYPTO_FileHashContext * | |
| GNUNET_CRYPTO_hash_file (enum GNUNET_SCHEDULER_Priority priority, | | GNUNET_CRYPTO_hash_file (enum GNUNET_SCHEDULER_Priority priority, | |
| const char *filename, size_t blocksize, | | const char *filename, size_t blocksize, | |
| GNUNET_CRYPTO_HashCompletedCallback callback, | | GNUNET_CRYPTO_HashCompletedCallback callback, | |
| void *callback_cls); | | void *callback_cls); | |
| | | | |
| /** | | /** | |
| * Cancel a file hashing operation. | | * Cancel a file hashing operation. | |
| * | | * | |
| * @param fhc operation to cancel (callback must not yet have been invoked) | | * @param fhc operation to cancel (callback must not yet have been invoked) | |
| */ | | */ | |
| void | | void | |
| GNUNET_CRYPTO_hash_file_cancel (struct GNUNET_CRYPTO_FileHashContext *fhc); | | GNUNET_CRYPTO_hash_file_cancel (struct GNUNET_CRYPTO_FileHashContext *fhc); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hash | |
| * Create a random hash code. | | * Create a random hash code. | |
| * | | * | |
| * @param mode desired quality level | | * @param mode desired quality level | |
| * @param result hash code that is randomized | | * @param result hash code that is randomized | |
| */ | | */ | |
| void | | void | |
| GNUNET_CRYPTO_hash_create_random (enum GNUNET_CRYPTO_Quality mode, | | GNUNET_CRYPTO_hash_create_random (enum GNUNET_CRYPTO_Quality mode, | |
|
| struct GNUNET_HashCode * result); | | struct GNUNET_HashCode *result); | |
| | | | |
| /** | | /** | |
|
| * compute result(delta) = b - a | | * @ingroup hash | |
| | | * compute @a result = @a b - @a a | |
| * | | * | |
| * @param a some hash code | | * @param a some hash code | |
| * @param b some hash code | | * @param b some hash code | |
|
| * @param result set to b - a | | * @param result set to @a b - @a a | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_CRYPTO_hash_difference (const struct GNUNET_HashCode * a, | | GNUNET_CRYPTO_hash_difference (const struct GNUNET_HashCode *a, | |
| const struct GNUNET_HashCode * b, | | const struct GNUNET_HashCode *b, | |
| struct GNUNET_HashCode * result); | | struct GNUNET_HashCode *result); | |
| | | | |
| /** | | /** | |
|
| * compute result(b) = a + delta | | * @ingroup hash | |
| | | * compute @a result = @a a + @a delta | |
| * | | * | |
| * @param a some hash code | | * @param a some hash code | |
| * @param delta some hash code | | * @param delta some hash code | |
|
| * @param result set to a + delta | | * @param result set to @a a + @a delta | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_CRYPTO_hash_sum (const struct GNUNET_HashCode * a, | | GNUNET_CRYPTO_hash_sum (const struct GNUNET_HashCode *a, | |
| const struct GNUNET_HashCode * delta, | | const struct GNUNET_HashCode *delta, | |
| struct GNUNET_HashCode * result); | | struct GNUNET_HashCode *result); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hash | |
| * compute result = a ^ b | | * compute result = a ^ b | |
| * | | * | |
| * @param a some hash code | | * @param a some hash code | |
| * @param b some hash code | | * @param b some hash code | |
|
| * @param result set to a ^ b | | * @param result set to @a a ^ @a b | |
| */ | | */ | |
| void | | void | |
| GNUNET_CRYPTO_hash_xor (const struct GNUNET_HashCode * a, const struct GNUN
ET_HashCode * b, | | GNUNET_CRYPTO_hash_xor (const struct GNUNET_HashCode * a, const struct GNUN
ET_HashCode * b, | |
| struct GNUNET_HashCode * result); | | struct GNUNET_HashCode * result); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hash | |
| * Convert a hashcode into a key. | | * Convert a hashcode into a key. | |
| * | | * | |
| * @param hc hash code that serves to generate the key | | * @param hc hash code that serves to generate the key | |
| * @param skey set to a valid session key | | * @param skey set to a valid session key | |
| * @param iv set to a valid initialization vector | | * @param iv set to a valid initialization vector | |
| */ | | */ | |
| void | | void | |
| GNUNET_CRYPTO_hash_to_aes_key (const struct GNUNET_HashCode * hc, | | GNUNET_CRYPTO_hash_to_aes_key (const struct GNUNET_HashCode * hc, | |
|
| struct GNUNET_CRYPTO_AesSessionKey *skey, | | struct GNUNET_CRYPTO_SymmetricSessionKey *sk | |
| struct GNUNET_CRYPTO_AesInitializationVector | | ey, | |
| *iv); | | struct GNUNET_CRYPTO_SymmetricInitialization | |
| | | Vector *iv); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hash | |
| * Obtain a bit from a hashcode. | | * Obtain a bit from a hashcode. | |
| * | | * | |
|
| * @param code the GNUNET_CRYPTO_hash to index bit-wise | | * @param code the `struct GNUNET_HashCode` to index bit-wise | |
| * @param bit index into the hashcode, [0...159] | | * @param bit index into the hashcode, [0...159] | |
| * @return Bit \a bit from hashcode \a code, -1 for invalid index | | * @return Bit \a bit from hashcode \a code, -1 for invalid index | |
| */ | | */ | |
| int | | int | |
|
| GNUNET_CRYPTO_hash_get_bit (const struct GNUNET_HashCode * code, unsigned i | | GNUNET_CRYPTO_hash_get_bit (const struct GNUNET_HashCode *code, | |
| nt bit); | | unsigned int bit); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hash | |
| * Determine how many low order bits match in two | | * Determine how many low order bits match in two | |
|
| * struct GNUNET_HashCodes. i.e. - 010011 and 011111 share | | * `struct GNUNET_HashCodes`. i.e. - 010011 and 011111 share | |
| * the first two lowest order bits, and therefore the | | * the first two lowest order bits, and therefore the | |
| * return value is two (NOT XOR distance, nor how many | | * return value is two (NOT XOR distance, nor how many | |
| * bits match absolutely!). | | * bits match absolutely!). | |
| * | | * | |
| * @param first the first hashcode | | * @param first the first hashcode | |
| * @param second the hashcode to compare first to | | * @param second the hashcode to compare first to | |
|
| * | | | |
| * @return the number of bits that match | | * @return the number of bits that match | |
| */ | | */ | |
| unsigned int | | unsigned int | |
|
| GNUNET_CRYPTO_hash_matching_bits (const struct GNUNET_HashCode * first, | | GNUNET_CRYPTO_hash_matching_bits (const struct GNUNET_HashCode *first, | |
| const struct GNUNET_HashCode * second); | | const struct GNUNET_HashCode *second); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hash | |
| * Compare function for HashCodes, producing a total ordering | | * Compare function for HashCodes, producing a total ordering | |
| * of all hashcodes. | | * of all hashcodes. | |
| * | | * | |
| * @param h1 some hash code | | * @param h1 some hash code | |
| * @param h2 some hash code | | * @param h2 some hash code | |
|
| * @return 1 if h1 > h2, -1 if h1 < h2 and 0 if h1 == h2. | | * @return 1 if @a h1 > @a h2, -1 if @a h1 < @a h2 and 0 if @a h1 == @a h2. | |
| */ | | */ | |
| int | | int | |
|
| GNUNET_CRYPTO_hash_cmp (const struct GNUNET_HashCode * h1, const struct GNU | | GNUNET_CRYPTO_hash_cmp (const struct GNUNET_HashCode *h1, | |
| NET_HashCode * h2); | | const struct GNUNET_HashCode *h2); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hash | |
| * Find out which of the two GNUNET_CRYPTO_hash codes is closer to target | | * Find out which of the two GNUNET_CRYPTO_hash codes is closer to target | |
| * in the XOR metric (Kademlia). | | * in the XOR metric (Kademlia). | |
| * | | * | |
| * @param h1 some hash code | | * @param h1 some hash code | |
| * @param h2 some hash code | | * @param h2 some hash code | |
| * @param target some hash code | | * @param target some hash code | |
|
| * @return -1 if h1 is closer, 1 if h2 is closer and 0 if h1==h2. | | * @return -1 if @a h1 is closer, 1 if @a h2 is closer and 0 if @a h1== @a
h2. | |
| */ | | */ | |
| int | | int | |
|
| GNUNET_CRYPTO_hash_xorcmp (const struct GNUNET_HashCode * h1, | | GNUNET_CRYPTO_hash_xorcmp (const struct GNUNET_HashCode *h1, | |
| const struct GNUNET_HashCode * h2, | | const struct GNUNET_HashCode *h2, | |
| const struct GNUNET_HashCode * target); | | const struct GNUNET_HashCode *target); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hash | |
| * @brief Derive an authentication key | | * @brief Derive an authentication key | |
| * @param key authentication key | | * @param key authentication key | |
| * @param rkey root key | | * @param rkey root key | |
| * @param salt salt | | * @param salt salt | |
| * @param salt_len size of the salt | | * @param salt_len size of the salt | |
| * @param argp pair of void * & size_t for context chunks, terminated by NU
LL | | * @param argp pair of void * & size_t for context chunks, terminated by NU
LL | |
| */ | | */ | |
| void | | void | |
| GNUNET_CRYPTO_hmac_derive_key_v (struct GNUNET_CRYPTO_AuthKey *key, | | GNUNET_CRYPTO_hmac_derive_key_v (struct GNUNET_CRYPTO_AuthKey *key, | |
|
| const struct GNUNET_CRYPTO_AesSessionKey *
rkey, | | const struct GNUNET_CRYPTO_SymmetricSessio
nKey *rkey, | |
| const void *salt, size_t salt_len, | | const void *salt, size_t salt_len, | |
| va_list argp); | | va_list argp); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hash | |
| * @brief Derive an authentication key | | * @brief Derive an authentication key | |
| * @param key authentication key | | * @param key authentication key | |
| * @param rkey root key | | * @param rkey root key | |
| * @param salt salt | | * @param salt salt | |
| * @param salt_len size of the salt | | * @param salt_len size of the salt | |
| * @param ... pair of void * & size_t for context chunks, terminated by NUL
L | | * @param ... pair of void * & size_t for context chunks, terminated by NUL
L | |
| */ | | */ | |
| void | | void | |
| GNUNET_CRYPTO_hmac_derive_key (struct GNUNET_CRYPTO_AuthKey *key, | | GNUNET_CRYPTO_hmac_derive_key (struct GNUNET_CRYPTO_AuthKey *key, | |
|
| const struct GNUNET_CRYPTO_AesSessionKey *rk
ey, | | const struct GNUNET_CRYPTO_SymmetricSessionK
ey *rkey, | |
| const void *salt, size_t salt_len, ...); | | const void *salt, size_t salt_len, ...); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hash | |
| * @brief Derive key | | * @brief Derive key | |
| * @param result buffer for the derived key, allocated by caller | | * @param result buffer for the derived key, allocated by caller | |
| * @param out_len desired length of the derived key | | * @param out_len desired length of the derived key | |
| * @param xtr_algo hash algorithm for the extraction phase, GCRY_MD_... | | * @param xtr_algo hash algorithm for the extraction phase, GCRY_MD_... | |
| * @param prf_algo hash algorithm for the expansion phase, GCRY_MD_... | | * @param prf_algo hash algorithm for the expansion phase, GCRY_MD_... | |
| * @param xts salt | | * @param xts salt | |
|
| * @param xts_len length of xts | | * @param xts_len length of @a xts | |
| * @param skm source key material | | * @param skm source key material | |
|
| * @param skm_len length of skm | | * @param skm_len length of @a skm | |
| * @return GNUNET_YES on success | | * @param ... pair of void * & size_t for context chunks, terminated by NUL | |
| | | L | |
| | | * @return #GNUNET_YES on success | |
| */ | | */ | |
| int | | int | |
| GNUNET_CRYPTO_hkdf (void *result, size_t out_len, int xtr_algo, int prf_alg
o, | | GNUNET_CRYPTO_hkdf (void *result, size_t out_len, int xtr_algo, int prf_alg
o, | |
| const void *xts, size_t xts_len, const void *skm, | | const void *xts, size_t xts_len, const void *skm, | |
| size_t skm_len, ...); | | size_t skm_len, ...); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hash | |
| * @brief Derive key | | * @brief Derive key | |
| * @param result buffer for the derived key, allocated by caller | | * @param result buffer for the derived key, allocated by caller | |
| * @param out_len desired length of the derived key | | * @param out_len desired length of the derived key | |
| * @param xtr_algo hash algorithm for the extraction phase, GCRY_MD_... | | * @param xtr_algo hash algorithm for the extraction phase, GCRY_MD_... | |
| * @param prf_algo hash algorithm for the expansion phase, GCRY_MD_... | | * @param prf_algo hash algorithm for the expansion phase, GCRY_MD_... | |
| * @param xts salt | | * @param xts salt | |
|
| * @param xts_len length of xts | | * @param xts_len length of @a xts | |
| * @param skm source key material | | * @param skm source key material | |
|
| * @param skm_len length of skm | | * @param skm_len length of @a skm | |
| * @param argp va_list of void * & size_t pairs for context chunks | | * @param argp va_list of void * & size_t pairs for context chunks | |
|
| * @return GNUNET_YES on success | | * @return #GNUNET_YES on success | |
| */ | | */ | |
| int | | int | |
| GNUNET_CRYPTO_hkdf_v (void *result, size_t out_len, int xtr_algo, int prf_a
lgo, | | GNUNET_CRYPTO_hkdf_v (void *result, size_t out_len, int xtr_algo, int prf_a
lgo, | |
| const void *xts, size_t xts_len, const void *skm, | | const void *xts, size_t xts_len, const void *skm, | |
| size_t skm_len, va_list argp); | | size_t skm_len, va_list argp); | |
| | | | |
| /** | | /** | |
| * @brief Derive key | | * @brief Derive key | |
| * @param result buffer for the derived key, allocated by caller | | * @param result buffer for the derived key, allocated by caller | |
| * @param out_len desired length of the derived key | | * @param out_len desired length of the derived key | |
| * @param xts salt | | * @param xts salt | |
|
| * @param xts_len length of xts | | * @param xts_len length of @a xts | |
| * @param skm source key material | | * @param skm source key material | |
|
| * @param skm_len length of skm | | * @param skm_len length of @a skm | |
| * @param argp va_list of void * & size_t pairs for context chunks | | * @param argp va_list of void * & size_t pairs for context chunks | |
|
| * @return GNUNET_YES on success | | * @return #GNUNET_YES on success | |
| */ | | */ | |
| int | | int | |
| GNUNET_CRYPTO_kdf_v (void *result, size_t out_len, const void *xts, | | GNUNET_CRYPTO_kdf_v (void *result, size_t out_len, const void *xts, | |
| size_t xts_len, const void *skm, size_t skm_len, | | size_t xts_len, const void *skm, size_t skm_len, | |
| va_list argp); | | va_list argp); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup hash | |
| * @brief Derive key | | * @brief Derive key | |
| * @param result buffer for the derived key, allocated by caller | | * @param result buffer for the derived key, allocated by caller | |
| * @param out_len desired length of the derived key | | * @param out_len desired length of the derived key | |
| * @param xts salt | | * @param xts salt | |
|
| * @param xts_len length of xts | | * @param xts_len length of @a xts | |
| * @param skm source key material | | * @param skm source key material | |
|
| * @param skm_len length of skm | | * @param skm_len length of @a skm | |
| * @param ... void * & size_t pairs for context chunks | | * @param ... void * & size_t pairs for context chunks | |
|
| * @return GNUNET_YES on success | | * @return #GNUNET_YES on success | |
| */ | | */ | |
| int | | int | |
| GNUNET_CRYPTO_kdf (void *result, size_t out_len, const void *xts, | | GNUNET_CRYPTO_kdf (void *result, size_t out_len, const void *xts, | |
| size_t xts_len, const void *skm, size_t skm_len, ...); | | size_t xts_len, const void *skm, size_t skm_len, ...); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup crypto | |
| | | * Extract the public key for the given private key. | |
| | | * | |
| | | * @param priv the private key | |
| | | * @param pub where to write the public key | |
| | | */ | |
| | | void | |
| | | GNUNET_CRYPTO_ecdsa_key_get_public (const struct GNUNET_CRYPTO_EcdsaPrivate | |
| | | Key *priv, | |
| | | struct GNUNET_CRYPTO_EcdsaPublicKey *pu | |
| | | b); | |
| | | | |
| | | /** | |
| | | * @ingroup crypto | |
| | | * Extract the public key for the given private key. | |
| | | * | |
| | | * @param priv the private key | |
| | | * @param pub where to write the public key | |
| | | */ | |
| | | void | |
| | | GNUNET_CRYPTO_eddsa_key_get_public (const struct GNUNET_CRYPTO_EddsaPrivate | |
| | | Key *priv, | |
| | | struct GNUNET_CRYPTO_EddsaPublicKey *pu | |
| | | b); | |
| | | | |
| | | /** | |
| | | * @ingroup crypto | |
| | | * Extract the public key for the given private key. | |
| | | * | |
| | | * @param priv the private key | |
| | | * @param pub where to write the public key | |
| | | */ | |
| | | void | |
| | | GNUNET_CRYPTO_ecdhe_key_get_public (const struct GNUNET_CRYPTO_EcdhePrivate | |
| | | Key *priv, | |
| | | struct GNUNET_CRYPTO_EcdhePublicKey *pu | |
| | | b); | |
| | | | |
| | | /** | |
| * Convert a public key to a string. | | * Convert a public key to a string. | |
| * | | * | |
| * @param pub key to convert | | * @param pub key to convert | |
|
| * @return string representing 'pub' | | * @return string representing @a pub | |
| */ | | */ | |
| char * | | char * | |
|
| GNUNET_CRYPTO_rsa_public_key_to_string (const struct GNUNET_CRYPTO_RsaPubli | | GNUNET_CRYPTO_ecdsa_public_key_to_string (const struct GNUNET_CRYPTO_EcdsaP | |
| cKeyBinaryEncoded *pub); | | ublicKey *pub); | |
| | | | |
| | | /** | |
| | | * Convert a public key to a string. | |
| | | * | |
| | | * @param pub key to convert | |
| | | * @return string representing @a pub | |
| | | */ | |
| | | char * | |
| | | GNUNET_CRYPTO_eddsa_public_key_to_string (const struct GNUNET_CRYPTO_EddsaP | |
| | | ublicKey *pub); | |
| | | | |
| /** | | /** | |
| * Convert a string representing a public key to a public key. | | * Convert a string representing a public key to a public key. | |
| * | | * | |
| * @param enc encoded public key | | * @param enc encoded public key | |
|
| * @param enclen number of bytes in enc (without 0-terminator) | | * @param enclen number of bytes in @a enc (without 0-terminator) | |
| * @param pub where to store the public key | | * @param pub where to store the public key | |
|
| * @return GNUNET_OK on success | | * @return #GNUNET_OK on success | |
| */ | | */ | |
| int | | int | |
|
| GNUNET_CRYPTO_rsa_public_key_from_string (const char *enc, | | GNUNET_CRYPTO_ecdsa_public_key_from_string (const char *enc, | |
| size_t enclen, | | size_t enclen, | |
| struct GNUNET_CRYPTO_RsaPublicKeyB | | struct GNUNET_CRYPTO_EcdsaPubli | |
| inaryEncoded *pub); | | cKey *pub); | |
| | | | |
| /** | | | |
| * Encode the private key in a format suitable for | | | |
| * storing it into a file. | | | |
| * @return encoding of the private key | | | |
| */ | | | |
| struct GNUNET_CRYPTO_RsaPrivateKeyBinaryEncoded * | | | |
| GNUNET_CRYPTO_rsa_encode_key (const struct GNUNET_CRYPTO_RsaPrivateKey *hos | | | |
| tkey); | | | |
| | | | |
| /** | | /** | |
|
| * Decode the private key from the data-format back | | * Convert a string representing a public key to a public key. | |
| * to the "normal", internal format. | | | |
| * | | * | |
|
| * @param buf the buffer where the private key data is stored | | * @param enc encoded public key | |
| * @param len the length of the data in 'buffer' | | * @param enclen number of bytes in @a enc (without 0-terminator) | |
| * @return NULL on error | | * @param pub where to store the public key | |
| | | * @return #GNUNET_OK on success | |
| */ | | */ | |
|
| struct GNUNET_CRYPTO_RsaPrivateKey * | | int | |
| GNUNET_CRYPTO_rsa_decode_key (const char *buf, uint16_t len); | | GNUNET_CRYPTO_eddsa_public_key_from_string (const char *enc, | |
| | | size_t enclen, | |
| | | struct GNUNET_CRYPTO_EddsaPubli | |
| | | cKey *pub); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup crypto | |
| * Create a new private key by reading it from a file. If the | | * Create a new private key by reading it from a file. If the | |
| * files does not exist, create a new key and write it to the | | * files does not exist, create a new key and write it to the | |
|
| * file. Caller must free return value. Note that this function | | * file. Caller must free return value. Note that this function | |
| * can not guarantee that another process might not be trying | | * can not guarantee that another process might not be trying | |
| * the same operation on the same file at the same time. | | * the same operation on the same file at the same time. | |
| * If the contents of the file | | * If the contents of the file | |
| * are invalid the old file is deleted and a fresh key is | | * are invalid the old file is deleted and a fresh key is | |
| * created. | | * created. | |
| * | | * | |
|
| * @param filename name of file to use for storage | | * @param filename name of file to use to store the key | |
| * @return new private key, NULL on error (for example, | | * @return new private key, NULL on error (for example, | |
|
| * permission denied) | | * permission denied); free using #GNUNET_free | |
| * @deprecated use 'GNUNET_CRYPTO_rsa_key_create_start' instead | | | |
| */ | | */ | |
|
| struct GNUNET_CRYPTO_RsaPrivateKey * | | struct GNUNET_CRYPTO_EcdsaPrivateKey * | |
| GNUNET_CRYPTO_rsa_key_create_from_file (const char *filename); | | GNUNET_CRYPTO_ecdsa_key_create_from_file (const char *filename); | |
| | | | |
| /** | | /** | |
|
| * Handle to cancel private key generation. | | * @ingroup crypto | |
| */ | | * Create a new private key by reading it from a file. If the | |
| struct GNUNET_CRYPTO_RsaKeyGenerationContext; | | * files does not exist, create a new key and write it to the | |
| | | * file. Caller must free return value. Note that this function | |
| /** | | * can not guarantee that another process might not be trying | |
| * Function called upon completion of 'GNUNET_CRYPTO_rsa_key_create_async'. | | * the same operation on the same file at the same time. | |
| | | * If the contents of the file | |
| | | * are invalid the old file is deleted and a fresh key is | |
| | | * created. | |
| * | | * | |
|
| * @param cls closure | | * @param filename name of file to use to store the key | |
| * @param pk NULL on error, otherwise the private key (which must be free'd | | * @return new private key, NULL on error (for example, | |
| by the callee) | | * permission denied); free using #GNUNET_free | |
| * @param emsg NULL on success, otherwise an error message | | | |
| */ | | */ | |
|
| typedef void (*GNUNET_CRYPTO_RsaKeyCallback)(void *cls, | | struct GNUNET_CRYPTO_EddsaPrivateKey * | |
| struct GNUNET_CRYPTO_RsaPrivate | | GNUNET_CRYPTO_eddsa_key_create_from_file (const char *filename); | |
| Key *pk, | | | |
| const char *emsg); | | | |
| | | | |
| /** | | /** | |
|
| * Create a new private key by reading it from a file. If the files | | * @ingroup crypto | |
| * does not exist, create a new key and write it to the file. If the | | * Create a new private key by reading our peer's key from | |
| * contents of the file are invalid the old file is deleted and a | | * the file specified in the configuration. | |
| * fresh key is created. | | | |
| * | | * | |
|
| * @param filename name of file to use for storage | | * @param cfg the configuration to use | |
| * @param cont function to call when done (or on errors) | | * @return new private key, NULL on error (for example, | |
| * @param cont_cls closure for 'cont' | | * permission denied); free using #GNUNET_free | |
| * @return handle to abort operation, NULL on fatal errors (cont will not b | | | |
| e called if NULL is returned) | | | |
| */ | | */ | |
|
| struct GNUNET_CRYPTO_RsaKeyGenerationContext * | | struct GNUNET_CRYPTO_EddsaPrivateKey * | |
| GNUNET_CRYPTO_rsa_key_create_start (const char *filename, | | GNUNET_CRYPTO_eddsa_key_create_from_configuration (const struct GNUNET_CONF | |
| GNUNET_CRYPTO_RsaKeyCallback cont, | | IGURATION_Handle *cfg); | |
| void *cont_cls); | | | |
| | | | |
| /** | | /** | |
|
| * Abort RSA key generation. | | * @ingroup crypto | |
| | | * Create a new private key. Caller must free return value. | |
| * | | * | |
|
| * @param gc key generation context to abort | | * @return fresh private key; free using #GNUNET_free | |
| */ | | */ | |
|
| void | | struct GNUNET_CRYPTO_EcdsaPrivateKey * | |
| GNUNET_CRYPTO_rsa_key_create_stop (struct GNUNET_CRYPTO_RsaKeyGenerationCon | | GNUNET_CRYPTO_ecdsa_key_create (void); | |
| text *gc); | | | |
| | | | |
| /** | | /** | |
|
| * Setup a hostkey file for a peer given the name of the | | * @ingroup crypto | |
| * configuration file (!). This function is used so that | | * Create a new private key. Caller must free return value. | |
| * at a later point code can be certain that reading a | | | |
| * hostkey is fast (for example in time-dependent testcases). | | | |
| * | | * | |
|
| * @param cfg_name name of the configuration file to use | | * @return fresh private key; free using #GNUNET_free | |
| */ | | */ | |
|
| void | | struct GNUNET_CRYPTO_EddsaPrivateKey * | |
| GNUNET_CRYPTO_rsa_setup_hostkey (const char *cfg_name); | | GNUNET_CRYPTO_eddsa_key_create (void); | |
| | | | |
| /** | | /** | |
|
| * Deterministically (!) create a private key using only the | | * @ingroup crypto | |
| * given HashCode as input to the PRNG. | | * Create a new private key. Caller must free return value. | |
| * | | * | |
|
| * @param hc "random" input to PRNG | | * @return fresh private key; free using #GNUNET_free | |
| * @return some private key purely dependent on input | | | |
| */ | | */ | |
|
| struct GNUNET_CRYPTO_RsaPrivateKey * | | struct GNUNET_CRYPTO_EcdhePrivateKey * | |
| GNUNET_CRYPTO_rsa_key_create_from_hash (const struct GNUNET_HashCode *hc); | | GNUNET_CRYPTO_ecdhe_key_create (void); | |
| | | | |
| /** | | /** | |
|
| * Free memory occupied by the private key. | | * @ingroup crypto | |
| | | * Clear memory that was used to store a private key. | |
| * | | * | |
|
| * @param key pointer to the memory to free | | * @param pk location of the key | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_CRYPTO_rsa_key_free (struct GNUNET_CRYPTO_RsaPrivateKey *key); | | GNUNET_CRYPTO_eddsa_key_clear (struct GNUNET_CRYPTO_EddsaPrivateKey *pk); | |
| | | | |
| /** | | /** | |
|
| * Extract the public key of the host. | | * @ingroup crypto | |
| | | * Clear memory that was used to store a private key. | |
| * | | * | |
|
| * @param priv the private key | | * @param pk location of the key | |
| * @param pub where to write the public key | | | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_CRYPTO_rsa_key_get_public (const struct GNUNET_CRYPTO_RsaPrivateKey | | GNUNET_CRYPTO_ecdsa_key_clear (struct GNUNET_CRYPTO_EcdsaPrivateKey *pk); | |
| *priv, | | | |
| struct GNUNET_CRYPTO_RsaPublicKeyBinaryEn | | | |
| coded | | | |
| *pub); | | | |
| | | | |
| /** | | /** | |
|
| * Encrypt a block with the public key of another host that uses the | | * @ingroup crypto | |
| * same cyper. | | * Clear memory that was used to store a private key. | |
| * | | * | |
|
| * @param block the block to encrypt | | * @param pk location of the key | |
| * @param size the size of block | | | |
| * @param publicKey the encoded public key used to encrypt | | | |
| * @param target where to store the encrypted block | | | |
| * @return GNUNET_SYSERR on error, GNUNET_OK if ok | | | |
| */ | | | |
| int | | | |
| GNUNET_CRYPTO_rsa_encrypt (const void *block, size_t size, | | | |
| const struct GNUNET_CRYPTO_RsaPublicKeyBinaryEnc | | | |
| oded | | | |
| *publicKey, | | | |
| struct GNUNET_CRYPTO_RsaEncryptedData *target); | | | |
| | | | |
| /** | | | |
| * Decrypt a given block with the hostkey. | | | |
| * | | | |
| * @param key the key to use | | | |
| * @param block the data to decrypt, encoded as returned by encrypt, not co | | | |
| nsumed | | | |
| * @param result pointer to a location where the result can be stored | | | |
| * @param max how many bytes of a result are expected? Must be exact. | | | |
| * @return the size of the decrypted block (that is, size) or -1 on error | | | |
| */ | | | |
| ssize_t | | | |
| GNUNET_CRYPTO_rsa_decrypt (const struct GNUNET_CRYPTO_RsaPrivateKey *key, | | | |
| const struct GNUNET_CRYPTO_RsaEncryptedData *blo | | | |
| ck, | | | |
| void *result, size_t max); | | | |
| | | | |
| /** | | | |
| * Sign a given block. | | | |
| * | | | |
| * @param key private key to use for the signing | | | |
| * @param purpose what to sign (size, purpose) | | | |
| * @param sig where to write the signature | | | |
| * @return GNUNET_SYSERR on error, GNUNET_OK on success | | | |
| */ | | | |
| int | | | |
| GNUNET_CRYPTO_rsa_sign (const struct GNUNET_CRYPTO_RsaPrivateKey *key, | | | |
| const struct GNUNET_CRYPTO_RsaSignaturePurpose *pur | | | |
| pose, | | | |
| struct GNUNET_CRYPTO_RsaSignature *sig); | | | |
| | | | |
| /** | | | |
| * Verify signature. Note that the caller MUST have already | | | |
| * checked that "validate->size" bytes are actually available. | | | |
| * | | | |
| * @param purpose what is the purpose that validate should have? | | | |
| * @param validate block to validate (size, purpose, data) | | | |
| * @param sig signature that is being validated | | | |
| * @param publicKey public key of the signer | | | |
| * @return GNUNET_OK if ok, GNUNET_SYSERR if invalid | | | |
| */ | | | |
| int | | | |
| GNUNET_CRYPTO_rsa_verify (uint32_t purpose, | | | |
| const struct GNUNET_CRYPTO_RsaSignaturePurpose | | | |
| *validate, | | | |
| const struct GNUNET_CRYPTO_RsaSignature *sig, | | | |
| const struct GNUNET_CRYPTO_RsaPublicKeyBinaryEnco | | | |
| ded | | | |
| *publicKey); | | | |
| | | | |
| /** | | | |
| * Function called upon completion of 'GNUNET_CRYPTO_ecc_key_create_async'. | | | |
| * | | | |
| * @param cls closure | | | |
| * @param pk NULL on error, otherwise the private key (which must be free'd | | | |
| by the callee) | | | |
| * @param emsg NULL on success, otherwise an error message | | | |
| */ | | | |
| typedef void (*GNUNET_CRYPTO_EccKeyCallback)(void *cls, | | | |
| struct GNUNET_CRYPTO_EccPrivate | | | |
| Key *pk, | | | |
| const char *emsg); | | | |
| | | | |
| /** | | | |
| * Free memory occupied by ECC key | | | |
| * | | | |
| * @param privatekey pointer to the memory to free | | | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_CRYPTO_ecc_key_free (struct GNUNET_CRYPTO_EccPrivateKey *privatekey)
; | | GNUNET_CRYPTO_ecdhe_key_clear (struct GNUNET_CRYPTO_EcdhePrivateKey *pk); | |
| | | | |
| /** | | /** | |
|
| * Extract the public key for the given private key. | | * @ingroup crypto | |
| | | * Get the shared private key we use for anonymous users. | |
| * | | * | |
|
| * @param priv the private key | | * @return "anonymous" private key; do not free | |
| * @param pub where to write the public key | | | |
| */ | | */ | |
|
| void | | const struct GNUNET_CRYPTO_EcdsaPrivateKey * | |
| GNUNET_CRYPTO_ecc_key_get_public (const struct GNUNET_CRYPTO_EccPrivateKey | | GNUNET_CRYPTO_ecdsa_key_get_anonymous (void); | |
| *priv, | | | |
| struct GNUNET_CRYPTO_EccPublicKeyBinaryEn | | | |
| coded *pub); | | | |
| | | | |
| /** | | /** | |
|
| * Convert a public key to a string. | | * @ingroup crypto | |
| * | | * Setup a hostkey file for a peer given the name of the | |
| * @param pub key to convert | | * configuration file (!). This function is used so that | |
| * @return string representing 'pub' | | * at a later point code can be certain that reading a | |
| | | * hostkey is fast (for example in time-dependent testcases). | |
| | | * | |
| | | * @param cfg_name name of the configuration file to use | |
| */ | | */ | |
|
| char * | | void | |
| GNUNET_CRYPTO_ecc_public_key_to_string (struct GNUNET_CRYPTO_EccPublicKeyBi | | GNUNET_CRYPTO_eddsa_setup_hostkey (const char *cfg_name); | |
| naryEncoded *pub); | | | |
| | | | |
| /** | | /** | |
|
| * Convert a string representing a public key to a public key. | | * @ingroup crypto | |
| | | * Retrieve the identity of the host's peer. | |
| * | | * | |
|
| * @param enc encoded public key | | * @param cfg configuration to use | |
| * @param enclen number of bytes in enc (without 0-terminator) | | * @param dst pointer to where to write the peer identity | |
| * @param pub where to store the public key | | * @return #GNUNET_OK on success, #GNUNET_SYSERR if the identity | |
| * @return GNUNET_OK on success | | * could not be retrieved | |
| */ | | */ | |
| int | | int | |
|
| GNUNET_CRYPTO_ecc_public_key_from_string (const char *enc, | | GNUNET_CRYPTO_get_peer_identity (const struct GNUNET_CONFIGURATION_Handle * | |
| size_t enclen, | | cfg, | |
| struct GNUNET_CRYPTO_EccPublicKeyB | | struct GNUNET_PeerIdentity *dst); | |
| inaryEncoded *pub); | | | |
| | | | |
| /** | | | |
| * Encode the private key in a format suitable for | | | |
| * storing it into a file. | | | |
| * | | | |
| * @param key key to encode | | | |
| * @return encoding of the private key. | | | |
| * The first 4 bytes give the size of the array, as usual. | | | |
| */ | | | |
| struct GNUNET_CRYPTO_EccPrivateKeyBinaryEncoded * | | | |
| GNUNET_CRYPTO_ecc_encode_key (const struct GNUNET_CRYPTO_EccPrivateKey *key | | | |
| ); | | | |
| | | | |
| /** | | /** | |
|
| * Decode the private key from the file-format back | | * Compare two Peer Identities. | |
| * to the "normal", internal format. | | | |
| * | | * | |
|
| * @param buf the buffer where the private key data is stored | | * @param first first peer identity | |
| * @param len the length of the data in 'buffer' | | * @param second second peer identity | |
| * @return NULL on error | | * @return bigger than 0 if first > second, | |
| | | * 0 if they are the same | |
| | | * smaller than 0 if second > first | |
| */ | | */ | |
|
| struct GNUNET_CRYPTO_EccPrivateKey * | | int | |
| GNUNET_CRYPTO_ecc_decode_key (const char *buf, | | GNUNET_CRYPTO_cmp_peer_identity (const struct GNUNET_PeerIdentity *first, | |
| size_t len); | | const struct GNUNET_PeerIdentity *second); | |
| | | | |
| /** | | | |
| * Create a new private key by reading it from a file. If the | | | |
| * files does not exist, create a new key and write it to the | | | |
| * file. Caller must free return value. Note that this function | | | |
| * can not guarantee that another process might not be trying | | | |
| * the same operation on the same file at the same time. | | | |
| * If the contents of the file | | | |
| * are invalid the old file is deleted and a fresh key is | | | |
| * created. | | | |
| * | | | |
| * @return new private key, NULL on error (for example, | | | |
| * permission denied) | | | |
| */ | | | |
| struct GNUNET_CRYPTO_EccPrivateKey * | | | |
| GNUNET_CRYPTO_ecc_key_create_from_file (const char *filename); | | | |
| | | | |
| /** | | | |
| * Handle to cancel private key generation and state for the | | | |
| * key generation operation. | | | |
| */ | | | |
| struct GNUNET_CRYPTO_EccKeyGenerationContext; | | | |
| | | | |
| /** | | | |
| * Create a new private key by reading it from a file. If the files | | | |
| * does not exist, create a new key and write it to the file. If the | | | |
| * contents of the file are invalid the old file is deleted and a | | | |
| * fresh key is created. | | | |
| * | | | |
| * @param filename name of file to use for storage | | | |
| * @param cont function to call when done (or on errors) | | | |
| * @param cont_cls closure for 'cont' | | | |
| * @return handle to abort operation, NULL on fatal errors (cont will not b | | | |
| e called if NULL is returned) | | | |
| */ | | | |
| struct GNUNET_CRYPTO_EccKeyGenerationContext * | | | |
| GNUNET_CRYPTO_ecc_key_create_start (const char *filename, | | | |
| GNUNET_CRYPTO_EccKeyCallback cont, | | | |
| void *cont_cls); | | | |
| | | | |
| /** | | /** | |
|
| * Abort ECC key generation. | | * @ingroup crypto | |
| | | * Derive key material from a public and a private ECC key. | |
| * | | * | |
|
| * @param gc key generation context to abort | | * @param priv private key to use for the ECDH (x) | |
| | | * @param pub public key to use for the ECDH (yG) | |
| | | * @param key_material where to write the key material (xyG) | |
| | | * @return #GNUNET_SYSERR on error, #GNUNET_OK on success | |
| */ | | */ | |
|
| void | | int | |
| GNUNET_CRYPTO_ecc_key_create_stop (struct GNUNET_CRYPTO_EccKeyGenerationCon | | GNUNET_CRYPTO_ecc_ecdh (const struct GNUNET_CRYPTO_EcdhePrivateKey *priv, | |
| text *gc); | | const struct GNUNET_CRYPTO_EcdhePublicKey *pub, | |
| | | struct GNUNET_HashCode *key_material); | |
| | | | |
| /** | | /** | |
|
| * Setup a hostkey file for a peer given the name of the | | * @ingroup crypto | |
| * configuration file (!). This function is used so that | | * EdDSA sign a given block. | |
| * at a later point code can be certain that reading a | | | |
| * hostkey is fast (for example in time-dependent testcases). | | | |
| * | | * | |
|
| * @param cfg_name name of the configuration file to use | | * @param priv private key to use for the signing | |
| | | * @param purpose what to sign (size, purpose) | |
| | | * @param sig where to write the signature | |
| | | * @return #GNUNET_SYSERR on error, #GNUNET_OK on success | |
| */ | | */ | |
|
| void | | int | |
| GNUNET_CRYPTO_ecc_setup_hostkey (const char *cfg_name); | | GNUNET_CRYPTO_eddsa_sign (const struct GNUNET_CRYPTO_EddsaPrivateKey *priv, | |
| | | const struct GNUNET_CRYPTO_EccSignaturePurpose *p | |
| | | urpose, | |
| | | struct GNUNET_CRYPTO_EddsaSignature *sig); | |
| | | | |
| /** | | /** | |
|
| * Sign a given block. | | * @ingroup crypto | |
| | | * ECDSA Sign a given block. | |
| * | | * | |
|
| * @param key private key to use for the signing | | * @param priv private key to use for the signing | |
| * @param purpose what to sign (size, purpose) | | * @param purpose what to sign (size, purpose) | |
| * @param sig where to write the signature | | * @param sig where to write the signature | |
|
| * @return GNUNET_SYSERR on error, GNUNET_OK on success | | * @return #GNUNET_SYSERR on error, #GNUNET_OK on success | |
| */ | | */ | |
| int | | int | |
|
| GNUNET_CRYPTO_ecc_sign (const struct GNUNET_CRYPTO_EccPrivateKey *key, | | GNUNET_CRYPTO_ecdsa_sign (const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv, | |
| const struct GNUNET_CRYPTO_EccSignaturePurpose *pur | | const struct GNUNET_CRYPTO_EccSignaturePurpose *p | |
| pose, | | urpose, | |
| struct GNUNET_CRYPTO_EccSignature *sig); | | struct GNUNET_CRYPTO_EcdsaSignature *sig); | |
| | | | |
| /** | | /** | |
|
| * Verify signature. | | * @ingroup crypto | |
| | | * Verify EdDSA signature. | |
| * | | * | |
| * @param purpose what is the purpose that the signature should have? | | * @param purpose what is the purpose that the signature should have? | |
| * @param validate block to validate (size, purpose, data) | | * @param validate block to validate (size, purpose, data) | |
| * @param sig signature that is being validated | | * @param sig signature that is being validated | |
|
| * @param publicKey public key of the signer | | * @param pub public key of the signer | |
| * @returns GNUNET_OK if ok, GNUNET_SYSERR if invalid | | * @returns #GNUNET_OK if ok, #GNUNET_SYSERR if invalid | |
| */ | | */ | |
| int | | int | |
|
| GNUNET_CRYPTO_ecc_verify (uint32_t purpose, | | GNUNET_CRYPTO_eddsa_verify (uint32_t purpose, | |
| const struct GNUNET_CRYPTO_EccSignaturePurpose | | const struct GNUNET_CRYPTO_EccSignaturePurpose | |
| *validate, | | *validate, | |
| const struct GNUNET_CRYPTO_EccSignature *sig, | | const struct GNUNET_CRYPTO_EddsaSignature *sig, | |
| const struct GNUNET_CRYPTO_EccPublicKeyBinaryEnco | | const struct GNUNET_CRYPTO_EddsaPublicKey *pub) | |
| ded | | ; | |
| *publicKey); | | | |
| | | | |
| /** | | /** | |
|
| * This function should only be called in testcases | | * @ingroup crypto | |
| * where strong entropy gathering is not desired | | * Verify ECDSA signature. | |
| * (for example, for hostkey generation). | | | |
| */ | | | |
| void | | | |
| GNUNET_CRYPTO_random_disable_entropy_gathering (void); | | | |
| | | | |
| /** | | | |
| * Check if we are using weak random number generation. | | | |
| * | | * | |
|
| * @return GNUNET_YES if weak number generation is on | | * @param purpose what is the purpose that the signature should have? | |
| * (thus will return YES if 'GNUNET_CRYPTO_random_disable_entropy_g | | * @param validate block to validate (size, purpose, data) | |
| athering' | | * @param sig signature that is being validated | |
| * was called previously). | | * @param pub public key of the signer | |
| | | * @returns #GNUNET_OK if ok, #GNUNET_SYSERR if invalid | |
| */ | | */ | |
| int | | int | |
|
| GNUNET_CRYPTO_random_is_weak (void); | | GNUNET_CRYPTO_ecdsa_verify (uint32_t purpose, | |
| | | const struct GNUNET_CRYPTO_EccSignaturePurpose | |
| | | *validate, | |
| | | const struct GNUNET_CRYPTO_EcdsaSignature *sig, | |
| | | const struct GNUNET_CRYPTO_EcdsaPublicKey *pub) | |
| | | ; | |
| | | | |
| | | /** | |
| | | * @ingroup crypto | |
| | | * Derive a private key from a given private key and a label. | |
| | | * Essentially calculates a private key 'h = H(l,P) * d mod n' | |
| | | * where n is the size of the ECC group and P is the public | |
| | | * key associated with the private key 'd'. | |
| | | * | |
| | | * @param priv original private key | |
| | | * @param label label to use for key deriviation | |
| | | * @param context additional context to use for HKDF of 'h'; | |
| | | * typically the name of the subsystem/application | |
| | | * @return derived private key | |
| | | */ | |
| | | struct GNUNET_CRYPTO_EcdsaPrivateKey * | |
| | | GNUNET_CRYPTO_ecdsa_private_key_derive (const struct GNUNET_CRYPTO_EcdsaPri | |
| | | vateKey *priv, | |
| | | const char *label, | |
| | | const char *context); | |
| | | | |
| | | /** | |
| | | * @ingroup crypto | |
| | | * Derive a public key from a given public key and a label. | |
| | | * Essentially calculates a public key 'V = H(l,P) * P'. | |
| | | * | |
| | | * @param pub original public key | |
| | | * @param label label to use for key deriviation | |
| | | * @param context additional context to use for HKDF of 'h'. | |
| | | * typically the name of the subsystem/application | |
| | | * @param result where to write the derived public key | |
| | | */ | |
| | | void | |
| | | GNUNET_CRYPTO_ecdsa_public_key_derive (const struct GNUNET_CRYPTO_EcdsaPubl | |
| | | icKey *pub, | |
| | | const char *label, | |
| | | const char *context, | |
| | | struct GNUNET_CRYPTO_EcdsaPublicKey | |
| | | *result); | |
| | | | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| { | | { | |
| #endif | | #endif | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| } | | } | |
| #endif | | #endif | |
| | | | |
| /* ifndef GNUNET_CRYPTO_LIB_H */ | | /* ifndef GNUNET_CRYPTO_LIB_H */ | |
| #endif | | #endif | |
| | | | |
End of changes. 206 change blocks. |
| 647 lines changed or deleted | | 523 lines changed or added | |
|
| gnunet_datastore_service.h | | gnunet_datastore_service.h | |
| /* | | /* | |
| This file is part of GNUnet | | This file is part of GNUnet | |
| (C) 2004, 2005, 2006, 2007, 2009, 2010, 2011 Christian Grothoff (and o
ther contributing authors) | | (C) 2004, 2005, 2006, 2007, 2009, 2010, 2011 Christian Grothoff (and o
ther contributing authors) | |
| | | | |
| GNUnet is free software; you can redistribute it and/or modify | | GNUnet is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published | | 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. | | option) any later version. | |
| | | | |
| GNUnet is distributed in the hope that it will be useful, but | | GNUnet is distributed in the hope that it will be useful, but | |
| WITHOUT ANY WARRANTY; without even the implied warranty of | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| General Public License for more details. | | General Public License for more details. | |
| | | | |
| You should have received a copy of the GNU General Public License | | You should have received a copy of the GNU General Public License | |
| along with GNUnet; see the file COPYING. If not, write to the | | along with GNUnet; see the file COPYING. If not, write to the | |
| Free Software Foundation, Inc., 59 Temple Place - Suite 330, | | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| | | | |
| skipping to change at line 84 | | skipping to change at line 84 | |
| * @param drop set to GNUNET_YES to delete all data in datastore (!) | | * @param drop set to GNUNET_YES to delete all data in datastore (!) | |
| */ | | */ | |
| void | | void | |
| GNUNET_DATASTORE_disconnect (struct GNUNET_DATASTORE_Handle *h, int drop); | | GNUNET_DATASTORE_disconnect (struct GNUNET_DATASTORE_Handle *h, int drop); | |
| | | | |
| /** | | /** | |
| * Continuation called to notify client about result of the | | * Continuation called to notify client about result of the | |
| * operation. | | * operation. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
|
| * @param success GNUNET_SYSERR on failure (including timeout/queue drop) | | * @param success #GNUNET_SYSERR on failure (including timeout/queue drop) | |
| * GNUNET_NO if content was already there | | * #GNUNET_NO if content was already there | |
| * GNUNET_YES (or other positive value) on success | | * #GNUNET_YES (or other positive value) on success | |
| * @param min_expiration minimum expiration time required for 0-priority co
ntent to be stored | | * @param min_expiration minimum expiration time required for 0-priority co
ntent to be stored | |
| * by the datacache at this time, zero for unknown, forever
if we have no | | * by the datacache at this time, zero for unknown, forever
if we have no | |
| * space for 0-priority content | | * space for 0-priority content | |
| * @param msg NULL on success, otherwise an error message | | * @param msg NULL on success, otherwise an error message | |
| */ | | */ | |
| typedef void (*GNUNET_DATASTORE_ContinuationWithStatus) (void *cls, | | typedef void (*GNUNET_DATASTORE_ContinuationWithStatus) (void *cls, | |
| int32_t success, | | int32_t success, | |
| struct GNUNET_TIME_
Absolute min_expiration, | | struct GNUNET_TIME_
Absolute min_expiration, | |
| const char *msg); | | const char *msg); | |
| | | | |
| | | | |
| skipping to change at line 145 | | skipping to change at line 145 | |
| * @param type type of the content | | * @param type type of the content | |
| * @param priority priority of the content | | * @param priority priority of the content | |
| * @param anonymity anonymity-level for the content | | * @param anonymity anonymity-level for the content | |
| * @param replication how often should the content be replicated to other p
eers? | | * @param replication how often should the content be replicated to other p
eers? | |
| * @param expiration expiration time for the content | | * @param expiration expiration time for the content | |
| * @param queue_priority ranking of this request in the priority queue | | * @param queue_priority ranking of this request in the priority queue | |
| * @param max_queue_size at what queue size should this request be dropped | | * @param max_queue_size at what queue size should this request be dropped | |
| * (if other requests of higher priority are in the queue) | | * (if other requests of higher priority are in the queue) | |
| * @param timeout timeout for the operation | | * @param timeout timeout for the operation | |
| * @param cont continuation to call when done | | * @param cont continuation to call when done | |
|
| * @param cont_cls closure for cont | | * @param cont_cls closure for @a cont | |
| * @return NULL if the entry was not queued, otherwise a handle that can be
used to | | * @return NULL if the entry was not queued, otherwise a handle that can be
used to | |
| * cancel; note that even if NULL is returned, the callback will be
invoked | | * cancel; note that even if NULL is returned, the callback will be
invoked | |
| * (or rather, will already have been invoked) | | * (or rather, will already have been invoked) | |
| */ | | */ | |
| struct GNUNET_DATASTORE_QueueEntry * | | struct GNUNET_DATASTORE_QueueEntry * | |
| GNUNET_DATASTORE_put (struct GNUNET_DATASTORE_Handle *h, uint32_t rid, | | GNUNET_DATASTORE_put (struct GNUNET_DATASTORE_Handle *h, uint32_t rid, | |
|
| const struct GNUNET_HashCode * key, size_t size, | | const struct GNUNET_HashCode *key, size_t size, | |
| const void *data, enum GNUNET_BLOCK_Type type, | | const void *data, enum GNUNET_BLOCK_Type type, | |
| uint32_t priority, uint32_t anonymity, | | uint32_t priority, uint32_t anonymity, | |
| uint32_t replication, | | uint32_t replication, | |
| struct GNUNET_TIME_Absolute expiration, | | struct GNUNET_TIME_Absolute expiration, | |
| unsigned int queue_priority, unsigned int max_queue_s
ize, | | unsigned int queue_priority, unsigned int max_queue_s
ize, | |
| struct GNUNET_TIME_Relative timeout, | | struct GNUNET_TIME_Relative timeout, | |
| GNUNET_DATASTORE_ContinuationWithStatus cont, | | GNUNET_DATASTORE_ContinuationWithStatus cont, | |
| void *cont_cls); | | void *cont_cls); | |
| | | | |
| /** | | /** | |
| | | | |
| skipping to change at line 178 | | skipping to change at line 178 | |
| * @param rid reservation ID (value of "success" in original continuation | | * @param rid reservation ID (value of "success" in original continuation | |
| * from the "reserve" function). | | * from the "reserve" function). | |
| * @param queue_priority ranking of this request in the priority queue | | * @param queue_priority ranking of this request in the priority queue | |
| * @param max_queue_size at what queue size should this request be dropped | | * @param max_queue_size at what queue size should this request be dropped | |
| * (if other requests of higher priority are in the queue) | | * (if other requests of higher priority are in the queue) | |
| * @param queue_priority ranking of this request in the priority queue | | * @param queue_priority ranking of this request in the priority queue | |
| * @param max_queue_size at what queue size should this request be dropped | | * @param max_queue_size at what queue size should this request be dropped | |
| * (if other requests of higher priority are in the queue) | | * (if other requests of higher priority are in the queue) | |
| * @param timeout how long to wait at most for a response | | * @param timeout how long to wait at most for a response | |
| * @param cont continuation to call when done | | * @param cont continuation to call when done | |
|
| * @param cont_cls closure for cont | | * @param cont_cls closure for @a cont | |
| * @return NULL if the entry was not queued, otherwise a handle that can be
used to | | * @return NULL if the entry was not queued, otherwise a handle that can be
used to | |
| * cancel; note that even if NULL is returned, the callback will be
invoked | | * cancel; note that even if NULL is returned, the callback will be
invoked | |
| * (or rather, will already have been invoked) | | * (or rather, will already have been invoked) | |
| */ | | */ | |
| struct GNUNET_DATASTORE_QueueEntry * | | struct GNUNET_DATASTORE_QueueEntry * | |
| GNUNET_DATASTORE_release_reserve (struct GNUNET_DATASTORE_Handle *h, | | GNUNET_DATASTORE_release_reserve (struct GNUNET_DATASTORE_Handle *h, | |
| uint32_t rid, unsigned int queue_priority
, | | uint32_t rid, unsigned int queue_priority
, | |
| unsigned int max_queue_size, | | unsigned int max_queue_size, | |
| struct GNUNET_TIME_Relative timeout, | | struct GNUNET_TIME_Relative timeout, | |
| GNUNET_DATASTORE_ContinuationWithStatus c
ont, | | GNUNET_DATASTORE_ContinuationWithStatus c
ont, | |
| | | | |
| skipping to change at line 203 | | skipping to change at line 203 | |
| * | | * | |
| * @param h handle to the datastore | | * @param h handle to the datastore | |
| * @param uid identifier for the value | | * @param uid identifier for the value | |
| * @param priority how much to increase the priority of the value | | * @param priority how much to increase the priority of the value | |
| * @param expiration new expiration value should be MAX of existing and thi
s argument | | * @param expiration new expiration value should be MAX of existing and thi
s argument | |
| * @param queue_priority ranking of this request in the priority queue | | * @param queue_priority ranking of this request in the priority queue | |
| * @param max_queue_size at what queue size should this request be dropped | | * @param max_queue_size at what queue size should this request be dropped | |
| * (if other requests of higher priority are in the queue) | | * (if other requests of higher priority are in the queue) | |
| * @param timeout how long to wait at most for a response | | * @param timeout how long to wait at most for a response | |
| * @param cont continuation to call when done | | * @param cont continuation to call when done | |
|
| * @param cont_cls closure for cont | | * @param cont_cls closure for @a cont | |
| * @return NULL if the entry was not queued, otherwise a handle that can be
used to | | * @return NULL if the entry was not queued, otherwise a handle that can be
used to | |
| * cancel; note that even if NULL is returned, the callback will be
invoked | | * cancel; note that even if NULL is returned, the callback will be
invoked | |
| * (or rather, will already have been invoked) | | * (or rather, will already have been invoked) | |
| */ | | */ | |
| struct GNUNET_DATASTORE_QueueEntry * | | struct GNUNET_DATASTORE_QueueEntry * | |
| GNUNET_DATASTORE_update (struct GNUNET_DATASTORE_Handle *h, uint64_t uid, | | GNUNET_DATASTORE_update (struct GNUNET_DATASTORE_Handle *h, uint64_t uid, | |
| uint32_t priority, | | uint32_t priority, | |
| struct GNUNET_TIME_Absolute expiration, | | struct GNUNET_TIME_Absolute expiration, | |
| unsigned int queue_priority, | | unsigned int queue_priority, | |
| unsigned int max_queue_size, | | unsigned int max_queue_size, | |
| struct GNUNET_TIME_Relative timeout, | | struct GNUNET_TIME_Relative timeout, | |
| GNUNET_DATASTORE_ContinuationWithStatus cont, | | GNUNET_DATASTORE_ContinuationWithStatus cont, | |
| void *cont_cls); | | void *cont_cls); | |
| | | | |
| /** | | /** | |
|
| * Explicitly remove some content from the database. | | * Explicitly remove some content from the database. @a cont will be | |
| * The "cont"inuation will be called with status | | * called with status #GNUNET_OK if content was removed, #GNUNET_NO if | |
| * "GNUNET_OK" if content was removed, "GNUNET_NO" | | * no matching entry was found and #GNUNET_SYSERR on all other types | |
| * if no matching entry was found and "GNUNET_SYSERR" | | * of errors. | |
| * on all other types of errors. | | | |
| * | | * | |
| * @param h handle to the datastore | | * @param h handle to the datastore | |
| * @param key key for the value | | * @param key key for the value | |
|
| * @param size number of bytes in data | | * @param size number of bytes in @a data | |
| * @param data content stored | | * @param data content stored | |
| * @param queue_priority ranking of this request in the priority queue | | * @param queue_priority ranking of this request in the priority queue | |
| * @param max_queue_size at what queue size should this request be dropped | | * @param max_queue_size at what queue size should this request be dropped | |
| * (if other requests of higher priority are in the queue) | | * (if other requests of higher priority are in the queue) | |
| * @param timeout how long to wait at most for a response | | * @param timeout how long to wait at most for a response | |
| * @param cont continuation to call when done | | * @param cont continuation to call when done | |
|
| * @param cont_cls closure for cont | | * @param cont_cls closure for @a cont | |
| * @return NULL if the entry was not queued, otherwise a handle that can be
used to | | * @return NULL if the entry was not queued, otherwise a handle that can be
used to | |
| * cancel; note that even if NULL is returned, the callback will be
invoked | | * cancel; note that even if NULL is returned, the callback will be
invoked | |
| * (or rather, will already have been invoked) | | * (or rather, will already have been invoked) | |
| */ | | */ | |
| struct GNUNET_DATASTORE_QueueEntry * | | struct GNUNET_DATASTORE_QueueEntry * | |
| GNUNET_DATASTORE_remove (struct GNUNET_DATASTORE_Handle *h, | | GNUNET_DATASTORE_remove (struct GNUNET_DATASTORE_Handle *h, | |
| const struct GNUNET_HashCode * key, size_t size, | | const struct GNUNET_HashCode * key, size_t size, | |
| const void *data, unsigned int queue_priority, | | const void *data, unsigned int queue_priority, | |
| unsigned int max_queue_size, | | unsigned int max_queue_size, | |
| struct GNUNET_TIME_Relative timeout, | | struct GNUNET_TIME_Relative timeout, | |
| | | | |
| skipping to change at line 263 | | skipping to change at line 262 | |
| * @param size number of bytes in data | | * @param size number of bytes in data | |
| * @param data content stored | | * @param data content stored | |
| * @param type type of the content | | * @param type type of the content | |
| * @param priority priority of the content | | * @param priority priority of the content | |
| * @param anonymity anonymity-level for the content | | * @param anonymity anonymity-level for the content | |
| * @param expiration expiration time for the content | | * @param expiration expiration time for the content | |
| * @param uid unique identifier for the datum; | | * @param uid unique identifier for the datum; | |
| * maybe 0 if no unique identifier is available | | * maybe 0 if no unique identifier is available | |
| */ | | */ | |
| typedef void (*GNUNET_DATASTORE_DatumProcessor) (void *cls, | | typedef void (*GNUNET_DATASTORE_DatumProcessor) (void *cls, | |
|
| const struct GNUNET_HashCo
de * key, | | const struct GNUNET_HashCo
de *key, | |
| size_t size, const void *d
ata, | | size_t size, const void *d
ata, | |
| enum GNUNET_BLOCK_Type typ
e, | | enum GNUNET_BLOCK_Type typ
e, | |
| uint32_t priority, | | uint32_t priority, | |
| uint32_t anonymity, | | uint32_t anonymity, | |
|
| struct GNUNET_TIME_Absolut | | struct GNUNET_TIME_Absolut | |
| e | | e expiration, | |
| expiration, uint64_t uid); | | uint64_t uid); | |
| | | | |
| /** | | /** | |
| * Get a result for a particular key from the datastore. The processor | | * Get a result for a particular key from the datastore. The processor | |
| * will only be called once. | | * will only be called once. | |
| * | | * | |
| * @param h handle to the datastore | | * @param h handle to the datastore | |
| * @param offset offset of the result (modulo num-results); set to | | * @param offset offset of the result (modulo num-results); set to | |
| * a random 64-bit value initially; then increment by | | * a random 64-bit value initially; then increment by | |
| * one each time; detect that all results have been found by
uid | | * one each time; detect that all results have been found by
uid | |
| * being again the first uid ever returned. | | * being again the first uid ever returned. | |
| * @param key maybe NULL (to match all entries) | | * @param key maybe NULL (to match all entries) | |
| * @param type desired type, 0 for any | | * @param type desired type, 0 for any | |
| * @param queue_priority ranking of this request in the priority queue | | * @param queue_priority ranking of this request in the priority queue | |
| * @param max_queue_size at what queue size should this request be dropped | | * @param max_queue_size at what queue size should this request be dropped | |
| * (if other requests of higher priority are in the queue) | | * (if other requests of higher priority are in the queue) | |
| * @param timeout how long to wait at most for a response | | * @param timeout how long to wait at most for a response | |
| * @param proc function to call on a matching value; | | * @param proc function to call on a matching value; | |
| * or with a NULL value if no datum matches | | * or with a NULL value if no datum matches | |
|
| * @param proc_cls closure for proc | | * @param proc_cls closure for @a proc | |
| * @return NULL if the entry was not queued, otherwise a handle that can be
used to | | * @return NULL if the entry was not queued, otherwise a handle that can be
used to | |
| * cancel | | * cancel | |
| */ | | */ | |
| struct GNUNET_DATASTORE_QueueEntry * | | struct GNUNET_DATASTORE_QueueEntry * | |
| GNUNET_DATASTORE_get_key (struct GNUNET_DATASTORE_Handle *h, uint64_t offse
t, | | GNUNET_DATASTORE_get_key (struct GNUNET_DATASTORE_Handle *h, uint64_t offse
t, | |
|
| const struct GNUNET_HashCode * key, | | const struct GNUNET_HashCode *key, | |
| enum GNUNET_BLOCK_Type type, | | enum GNUNET_BLOCK_Type type, | |
| unsigned int queue_priority, | | unsigned int queue_priority, | |
| unsigned int max_queue_size, | | unsigned int max_queue_size, | |
| struct GNUNET_TIME_Relative timeout, | | struct GNUNET_TIME_Relative timeout, | |
| GNUNET_DATASTORE_DatumProcessor proc, void *proc_
cls); | | GNUNET_DATASTORE_DatumProcessor proc, void *proc_
cls); | |
| | | | |
| /** | | /** | |
| * Get a single zero-anonymity value from the datastore. | | * Get a single zero-anonymity value from the datastore. | |
| * Note that some implementations can ignore the 'offset' and | | * Note that some implementations can ignore the 'offset' and | |
| * instead return a random zero-anonymity value. In that case, | | * instead return a random zero-anonymity value. In that case, | |
| | | | |
End of changes. 13 change blocks. |
| 21 lines changed or deleted | | 20 lines changed or added | |
|
| gnunet_dht_service.h | | gnunet_dht_service.h | |
| /* | | /* | |
| This file is part of GNUnet | | This file is part of GNUnet | |
|
| (C) 2004, 2005, 2006, 2008, 2009, 2011 Christian Grothoff (and other
contributing authors) | | (C) 2004-2013 Christian Grothoff (and other contributing authors) | |
| | | | |
| GNUnet is free software; you can redistribute it and/or modify | | GNUnet is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published | | it under the terms of the GNU General Public License as published | |
| by the Free Software Foundation; either version 3, or (at your | | by the Free Software Foundation; either version 3, or (at your | |
| option) any later version. | | option) any later version. | |
| | | | |
| GNUnet is distributed in the hope that it will be useful, but | | GNUnet is distributed in the hope that it will be useful, but | |
| WITHOUT ANY WARRANTY; without even the implied warranty of | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| General Public License for more details. | | General Public License for more details. | |
| | | | |
| skipping to change at line 25 | | skipping to change at line 25 | |
| You should have received a copy of the GNU General Public License | | You should have received a copy of the GNU General Public License | |
| along with GNUnet; see the file COPYING. If not, write to the | | along with GNUnet; see the file COPYING. If not, write to the | |
| Free Software Foundation, Inc., 59 Temple Place - Suite 330, | | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| Boston, MA 02111-1307, USA. | | Boston, MA 02111-1307, USA. | |
| */ | | */ | |
| | | | |
| /** | | /** | |
| * @file include/gnunet_dht_service.h | | * @file include/gnunet_dht_service.h | |
| * @brief API to the DHT service | | * @brief API to the DHT service | |
| * @author Christian Grothoff | | * @author Christian Grothoff | |
|
| | | * @defgroup dht Distributed Hash Table | |
| | | * @{ | |
| */ | | */ | |
| | | | |
| #ifndef GNUNET_DHT_SERVICE_H | | #ifndef GNUNET_DHT_SERVICE_H | |
| #define GNUNET_DHT_SERVICE_H | | #define GNUNET_DHT_SERVICE_H | |
| | | | |
| #include "gnunet_util_lib.h" | | #include "gnunet_util_lib.h" | |
| #include "gnunet_block_lib.h" | | #include "gnunet_block_lib.h" | |
| #include "gnunet_hello_lib.h" | | #include "gnunet_hello_lib.h" | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| | | | |
| skipping to change at line 67 | | skipping to change at line 69 | |
| /** | | /** | |
| * Handle to control a find peer operation. | | * Handle to control a find peer operation. | |
| */ | | */ | |
| struct GNUNET_DHT_FindPeerHandle; | | struct GNUNET_DHT_FindPeerHandle; | |
| | | | |
| /** | | /** | |
| * Options for routing. | | * Options for routing. | |
| */ | | */ | |
| enum GNUNET_DHT_RouteOption | | enum GNUNET_DHT_RouteOption | |
| { | | { | |
|
| /** | | /** | |
| * Default. Do nothing special. | | * Default. Do nothing special. | |
| */ | | */ | |
| GNUNET_DHT_RO_NONE = 0, | | GNUNET_DHT_RO_NONE = 0, | |
| | | | |
|
| /** | | /** | |
| * Each peer along the way should look at 'enc' (otherwise | | * Each peer along the way should look at 'enc' (otherwise | |
| * only the k-peers closest to the key should look at it). | | * only the k-peers closest to the key should look at it). | |
| */ | | */ | |
| GNUNET_DHT_RO_DEMULTIPLEX_EVERYWHERE = 1, | | GNUNET_DHT_RO_DEMULTIPLEX_EVERYWHERE = 1, | |
| | | | |
|
| /** | | /** | |
| * We should keep track of the route that the message | | * We should keep track of the route that the message | |
| * took in the P2P network. | | * took in the P2P network. | |
| */ | | */ | |
| GNUNET_DHT_RO_RECORD_ROUTE = 2, | | GNUNET_DHT_RO_RECORD_ROUTE = 2, | |
| | | | |
| /** | | /** | |
| * This is a 'FIND-PEER' request, so approximate results are fine. | | * This is a 'FIND-PEER' request, so approximate results are fine. | |
| */ | | */ | |
| GNUNET_DHT_RO_FIND_PEER = 4, | | GNUNET_DHT_RO_FIND_PEER = 4, | |
| | | | |
|
| /** | | /** | |
| * Possible message option for query key randomization. | | * Possible message option for query key randomization. | |
| */ | | */ | |
| GNUNET_DHT_RO_BART = 8 | | GNUNET_DHT_RO_BART = 8 | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Initialize the connection with the DHT service. | | * Initialize the connection with the DHT service. | |
| * | | * | |
| * @param cfg configuration to use | | * @param cfg configuration to use | |
| * @param ht_len size of the internal hash table to use for | | * @param ht_len size of the internal hash table to use for | |
| * processing multiple GET/FIND requests in parallel | | * processing multiple GET/FIND requests in parallel | |
| * @return NULL on error | | * @return NULL on error | |
| | | | |
| skipping to change at line 124 | | skipping to change at line 126 | |
| | | | |
| /* *************** Standard API: get and put ******************* */ | | /* *************** Standard API: get and put ******************* */ | |
| | | | |
| /** | | /** | |
| * Opaque handle to cancel a PUT operation. | | * Opaque handle to cancel a PUT operation. | |
| */ | | */ | |
| struct GNUNET_DHT_PutHandle; | | struct GNUNET_DHT_PutHandle; | |
| | | | |
| /** | | /** | |
| * Type of a PUT continuation. You must not call | | * Type of a PUT continuation. You must not call | |
|
| * "GNUNET_DHT_disconnect" in this continuation. | | * #GNUNET_DHT_disconnect in this continuation. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
|
| * @param success GNUNET_OK if the PUT was transmitted, | | * @param success #GNUNET_OK if the PUT was transmitted, | |
| * GNUNET_NO on timeout, | | * #GNUNET_NO on timeout, | |
| * GNUNET_SYSERR on disconnect from service | | * #GNUNET_SYSERR on disconnect from service | |
| * after the PUT message was transmitted | | * after the PUT message was transmitted | |
| * (so we don't know if it was received or not) | | * (so we don't know if it was received or not) | |
| */ | | */ | |
| typedef void (*GNUNET_DHT_PutContinuation)(void *cls, | | typedef void (*GNUNET_DHT_PutContinuation)(void *cls, | |
| int success); | | int success); | |
| | | | |
| /** | | /** | |
| * Perform a PUT operation storing data in the DHT. | | * Perform a PUT operation storing data in the DHT. | |
| * | | * | |
| * @param handle handle to DHT service | | * @param handle handle to DHT service | |
| * @param key the key to store under | | * @param key the key to store under | |
| * @param desired_replication_level estimate of how many | | * @param desired_replication_level estimate of how many | |
| * nearest peers this request should reach | | * nearest peers this request should reach | |
| * @param options routing options for this message | | * @param options routing options for this message | |
| * @param type type of the value | | * @param type type of the value | |
|
| * @param size number of bytes in data; must be less than 64k | | * @param size number of bytes in @a data; must be less than 64k | |
| * @param data the data to store | | * @param data the data to store | |
| * @param exp desired expiration time for the value | | * @param exp desired expiration time for the value | |
| * @param timeout how long to wait for transmission of this request | | * @param timeout how long to wait for transmission of this request | |
| * @param cont continuation to call when done (transmitting request to serv
ice) | | * @param cont continuation to call when done (transmitting request to serv
ice) | |
|
| * You must not call "GNUNET_DHT_disconnect" in this continuation | | * You must not call #GNUNET_DHT_disconnect in this continuation | |
| * @param cont_cls closure for cont | | * @param cont_cls closure for @a cont | |
| * @return handle to cancel the "PUT" operation, NULL on error | | * @return handle to cancel the "PUT" operation, NULL on error | |
| * (size too big) | | * (size too big) | |
| */ | | */ | |
| struct GNUNET_DHT_PutHandle * | | struct GNUNET_DHT_PutHandle * | |
| GNUNET_DHT_put (struct GNUNET_DHT_Handle *handle, | | GNUNET_DHT_put (struct GNUNET_DHT_Handle *handle, | |
|
| const struct GNUNET_HashCode * key, | | const struct GNUNET_HashCode *key, | |
| uint32_t desired_replication_level, | | uint32_t desired_replication_level, | |
| enum GNUNET_DHT_RouteOption options, | | enum GNUNET_DHT_RouteOption options, | |
| enum GNUNET_BLOCK_Type type, | | enum GNUNET_BLOCK_Type type, | |
|
| size_t size, const void *data, | | size_t size, const void *data, | |
| struct GNUNET_TIME_Absolute exp, | | struct GNUNET_TIME_Absolute exp, | |
| struct GNUNET_TIME_Relative timeout, | | struct GNUNET_TIME_Relative timeout, | |
|
| GNUNET_DHT_PutContinuation cont, | | GNUNET_DHT_PutContinuation cont, | |
| void *cont_cls); | | void *cont_cls); | |
| | | | |
| /** | | /** | |
| * Cancels a DHT PUT operation. Note that the PUT request may still | | * Cancels a DHT PUT operation. Note that the PUT request may still | |
| * go out over the network (we can't stop that); However, if the PUT | | * go out over the network (we can't stop that); However, if the PUT | |
| * has not yet been sent to the service, cancelling the PUT will stop | | * has not yet been sent to the service, cancelling the PUT will stop | |
| * this from happening (but there is no way for the user of this API | | * this from happening (but there is no way for the user of this API | |
| * to tell if that is the case). The only use for this API is to | | * to tell if that is the case). The only use for this API is to | |
|
| * prevent a later call to 'cont' from "GNUNET_DHT_put" (i.e. because | | * prevent a later call to 'cont' from #GNUNET_DHT_put (i.e. because | |
| * the system is shutting down). | | * the system is shutting down). | |
| * | | * | |
| * @param ph put operation to cancel ('cont' will no longer be called) | | * @param ph put operation to cancel ('cont' will no longer be called) | |
| */ | | */ | |
| void | | void | |
| GNUNET_DHT_put_cancel (struct GNUNET_DHT_PutHandle *ph); | | GNUNET_DHT_put_cancel (struct GNUNET_DHT_PutHandle *ph); | |
| | | | |
| /** | | /** | |
| * Iterator called on each result obtained for a DHT | | * Iterator called on each result obtained for a DHT | |
| * operation that expects a reply | | * operation that expects a reply | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param exp when will this value expire | | * @param exp when will this value expire | |
| * @param key key of the result | | * @param key key of the result | |
| * @param get_path peers on reply path (or NULL if not recorded) | | * @param get_path peers on reply path (or NULL if not recorded) | |
|
| * @param get_path_length number of entries in get_path | | * [0] = datastore's first neighbor, [length - 1] = local p | |
| | | eer | |
| | | * @param get_path_length number of entries in @a get_path | |
| * @param put_path peers on the PUT path (or NULL if not recorded) | | * @param put_path peers on the PUT path (or NULL if not recorded) | |
|
| * @param put_path_length number of entries in get_path | | * [0] = origin, [length - 1] = datastore | |
| | | * @param put_path_length number of entries in @a put_path | |
| * @param type type of the result | | * @param type type of the result | |
|
| * @param size number of bytes in data | | * @param size number of bytes in @a data | |
| * @param data pointer to the result data | | * @param data pointer to the result data | |
| */ | | */ | |
| typedef void (*GNUNET_DHT_GetIterator) (void *cls, | | typedef void (*GNUNET_DHT_GetIterator) (void *cls, | |
| struct GNUNET_TIME_Absolute exp, | | struct GNUNET_TIME_Absolute exp, | |
|
| const struct GNUNET_HashCode * key, | | const struct GNUNET_HashCode *key, | |
| const struct GNUNET_PeerIdentity * | | const struct GNUNET_PeerIdentity *g | |
| get_path, unsigned int get_path_len | | et_path, | |
| gth, | | unsigned int get_path_length, | |
| const struct GNUNET_PeerIdentity * | | const struct GNUNET_PeerIdentity *p | |
| put_path, unsigned int put_path_len | | ut_path, | |
| gth, | | unsigned int put_path_length, | |
| enum GNUNET_BLOCK_Type type, | | enum GNUNET_BLOCK_Type type, | |
| size_t size, const void *data); | | size_t size, const void *data); | |
| | | | |
| /** | | /** | |
| * Perform an asynchronous GET operation on the DHT identified. See | | * Perform an asynchronous GET operation on the DHT identified. See | |
|
| * also "GNUNET_BLOCK_evaluate". | | * also #GNUNET_BLOCK_evaluate. | |
| * | | * | |
| * @param handle handle to the DHT service | | * @param handle handle to the DHT service | |
| * @param type expected type of the response object | | * @param type expected type of the response object | |
| * @param key the key to look up | | * @param key the key to look up | |
| * @param desired_replication_level estimate of how many | | * @param desired_replication_level estimate of how many | |
| nearest peers this request should reach | | nearest peers this request should reach | |
| * @param options routing options for this message | | * @param options routing options for this message | |
| * @param xquery extended query data (can be NULL, depending on type) | | * @param xquery extended query data (can be NULL, depending on type) | |
|
| * @param xquery_size number of bytes in xquery | | * @param xquery_size number of bytes in @a xquery | |
| * @param iter function to call on each result | | * @param iter function to call on each result | |
|
| * @param iter_cls closure for iter | | * @param iter_cls closure for @a iter | |
| * | | * | |
| * @return handle to stop the async get | | * @return handle to stop the async get | |
| */ | | */ | |
| struct GNUNET_DHT_GetHandle * | | struct GNUNET_DHT_GetHandle * | |
| GNUNET_DHT_get_start (struct GNUNET_DHT_Handle *handle, | | GNUNET_DHT_get_start (struct GNUNET_DHT_Handle *handle, | |
| enum GNUNET_BLOCK_Type type, | | enum GNUNET_BLOCK_Type type, | |
|
| const struct GNUNET_HashCode *key, | | const struct GNUNET_HashCode *key, | |
| uint32_t desired_replication_level, | | uint32_t desired_replication_level, | |
| enum GNUNET_DHT_RouteOption options, | | enum GNUNET_DHT_RouteOption options, | |
|
| const void *xquery, size_t xquery_size, | | const void *xquery, size_t xquery_size, | |
| GNUNET_DHT_GetIterator iter, void *iter_cls); | | GNUNET_DHT_GetIterator iter, void *iter_cls); | |
| | | | |
| /** | | /** | |
| * Tell the DHT not to return any of the following known results | | * Tell the DHT not to return any of the following known results | |
| * to this client. | | * to this client. | |
| * | | * | |
| * @param get_handle get operation for which results should be filtered | | * @param get_handle get operation for which results should be filtered | |
| * @param num_results number of results to be blocked that are | | * @param num_results number of results to be blocked that are | |
|
| * provided in this call (size of the 'results' array) | | * provided in this call (size of the @a results array) | |
| * @param results array of hash codes over the 'data' of the results | | * @param results array of hash codes over the 'data' of the results | |
| * to be blocked | | * to be blocked | |
| */ | | */ | |
| void | | void | |
| GNUNET_DHT_get_filter_known_results (struct GNUNET_DHT_GetHandle *get_handl
e, | | GNUNET_DHT_get_filter_known_results (struct GNUNET_DHT_GetHandle *get_handl
e, | |
| unsigned int num_results, | | unsigned int num_results, | |
| const struct GNUNET_HashCode *results); | | const struct GNUNET_HashCode *results); | |
| | | | |
| /** | | /** | |
| * Stop async DHT-get. Frees associated resources. | | * Stop async DHT-get. Frees associated resources. | |
| | | | |
| skipping to change at line 272 | | skipping to change at line 276 | |
| */ | | */ | |
| struct GNUNET_DHT_MonitorHandle; | | struct GNUNET_DHT_MonitorHandle; | |
| | | | |
| /** | | /** | |
| * Callback called on each GET request going through the DHT. | | * Callback called on each GET request going through the DHT. | |
| * | | * | |
| * @param cls Closure. | | * @param cls Closure. | |
| * @param options Options, for instance RecordRoute, DemultiplexEverywhere. | | * @param options Options, for instance RecordRoute, DemultiplexEverywhere. | |
| * @param type The type of data in the request. | | * @param type The type of data in the request. | |
| * @param hop_count Hop count so far. | | * @param hop_count Hop count so far. | |
|
| * @param path_length number of entries in path (or 0 if not recorded). | | * @param path_length number of entries in @a path (or 0 if not recorded). | |
| * @param path peers on the GET path (or NULL if not recorded). | | * @param path peers on the GET path (or NULL if not recorded). | |
| * @param desired_replication_level Desired replication level. | | * @param desired_replication_level Desired replication level. | |
| * @param key Key of the requested data. | | * @param key Key of the requested data. | |
| */ | | */ | |
| typedef void (*GNUNET_DHT_MonitorGetCB) (void *cls, | | typedef void (*GNUNET_DHT_MonitorGetCB) (void *cls, | |
| enum GNUNET_DHT_RouteOption option
s, | | enum GNUNET_DHT_RouteOption option
s, | |
| enum GNUNET_BLOCK_Type type, | | enum GNUNET_BLOCK_Type type, | |
| uint32_t hop_count, | | uint32_t hop_count, | |
| uint32_t desired_replication_level
, | | uint32_t desired_replication_level
, | |
| unsigned int path_length, | | unsigned int path_length, | |
| const struct GNUNET_PeerIdentity *
path, | | const struct GNUNET_PeerIdentity *
path, | |
| const struct GNUNET_HashCode * key
); | | const struct GNUNET_HashCode * key
); | |
| | | | |
| /** | | /** | |
| * Callback called on each GET reply going through the DHT. | | * Callback called on each GET reply going through the DHT. | |
| * | | * | |
| * @param cls Closure. | | * @param cls Closure. | |
| * @param type The type of data in the result. | | * @param type The type of data in the result. | |
| * @param get_path Peers on GET path (or NULL if not recorded). | | * @param get_path Peers on GET path (or NULL if not recorded). | |
|
| * @param get_path_length number of entries in get_path. | | * @param get_path_length number of entries in @a get_path. | |
| * @param put_path peers on the PUT path (or NULL if not recorded). | | * @param put_path peers on the PUT path (or NULL if not recorded). | |
|
| * @param put_path_length number of entries in get_path. | | * @param put_path_length number of entries in @a get_path. | |
| * @param exp Expiration time of the data. | | * @param exp Expiration time of the data. | |
| * @param key Key of the data. | | * @param key Key of the data. | |
| * @param data Pointer to the result data. | | * @param data Pointer to the result data. | |
|
| * @param size Number of bytes in data. | | * @param size Number of bytes in @a data. | |
| */ | | */ | |
| typedef void (*GNUNET_DHT_MonitorGetRespCB) (void *cls, | | typedef void (*GNUNET_DHT_MonitorGetRespCB) (void *cls, | |
| enum GNUNET_BLOCK_Type type, | | enum GNUNET_BLOCK_Type type, | |
|
| const struct GNUNET_PeerIdenti | | const struct GNUNET_PeerIdenti | |
| ty | | ty *get_path, | |
| *get_path, | | | |
| unsigned int get_path_length, | | unsigned int get_path_length, | |
|
| const struct GNUNET_PeerIdenti | | const struct GNUNET_PeerIdenti | |
| ty | | ty *put_path, | |
| * put_path, | | | |
| unsigned int put_path_length, | | unsigned int put_path_length, | |
| struct GNUNET_TIME_Absolute ex
p, | | struct GNUNET_TIME_Absolute ex
p, | |
|
| const struct GNUNET_HashCode *
key, | | const struct GNUNET_HashCode *
key, | |
| const void *data, | | const void *data, | |
| size_t size); | | size_t size); | |
| | | | |
| /** | | /** | |
| * Callback called on each PUT request going through the DHT. | | * Callback called on each PUT request going through the DHT. | |
| * | | * | |
| * @param cls Closure. | | * @param cls Closure. | |
| * @param options Options, for instance RecordRoute, DemultiplexEverywhere. | | * @param options Options, for instance RecordRoute, DemultiplexEverywhere. | |
| * @param type The type of data in the request. | | * @param type The type of data in the request. | |
| * @param hop_count Hop count so far. | | * @param hop_count Hop count so far. | |
|
| * @param path_length number of entries in path (or 0 if not recorded). | | * @param path_length number of entries in @a path (or 0 if not recorded). | |
| * @param path peers on the PUT path (or NULL if not recorded). | | * @param path peers on the PUT path (or NULL if not recorded). | |
| * @param desired_replication_level Desired replication level. | | * @param desired_replication_level Desired replication level. | |
| * @param exp Expiration time of the data. | | * @param exp Expiration time of the data. | |
| * @param key Key under which data is to be stored. | | * @param key Key under which data is to be stored. | |
| * @param data Pointer to the data carried. | | * @param data Pointer to the data carried. | |
| * @param size Number of bytes in data. | | * @param size Number of bytes in data. | |
| */ | | */ | |
| typedef void (*GNUNET_DHT_MonitorPutCB) (void *cls, | | typedef void (*GNUNET_DHT_MonitorPutCB) (void *cls, | |
| enum GNUNET_DHT_RouteOption option
s, | | enum GNUNET_DHT_RouteOption option
s, | |
| enum GNUNET_BLOCK_Type type, | | enum GNUNET_BLOCK_Type type, | |
| uint32_t hop_count, | | uint32_t hop_count, | |
| uint32_t desired_replication_level
, | | uint32_t desired_replication_level
, | |
| unsigned int path_length, | | unsigned int path_length, | |
| const struct GNUNET_PeerIdentity *
path, | | const struct GNUNET_PeerIdentity *
path, | |
| struct GNUNET_TIME_Absolute exp, | | struct GNUNET_TIME_Absolute exp, | |
|
| const struct GNUNET_HashCode * key
, | | const struct GNUNET_HashCode *key, | |
| const void *data, | | const void *data, | |
| size_t size); | | size_t size); | |
| | | | |
| /** | | /** | |
| * Start monitoring the local DHT service. | | * Start monitoring the local DHT service. | |
| * | | * | |
| * @param handle Handle to the DHT service. | | * @param handle Handle to the DHT service. | |
| * @param type Type of blocks that are of interest. | | * @param type Type of blocks that are of interest. | |
| * @param key Key of data of interest, NULL for all. | | * @param key Key of data of interest, NULL for all. | |
| * @param get_cb Callback to process monitored get messages. | | * @param get_cb Callback to process monitored get messages. | |
| * @param get_resp_cb Callback to process monitored get response messages. | | * @param get_resp_cb Callback to process monitored get response messages. | |
| * @param put_cb Callback to process monitored put messages. | | * @param put_cb Callback to process monitored put messages. | |
|
| * @param cb_cls Closure for cb. | | * @param cb_cls Closure for callbacks | |
| * | | | |
| * @return Handle to stop monitoring. | | * @return Handle to stop monitoring. | |
| */ | | */ | |
| struct GNUNET_DHT_MonitorHandle * | | struct GNUNET_DHT_MonitorHandle * | |
| GNUNET_DHT_monitor_start (struct GNUNET_DHT_Handle *handle, | | GNUNET_DHT_monitor_start (struct GNUNET_DHT_Handle *handle, | |
| enum GNUNET_BLOCK_Type type, | | enum GNUNET_BLOCK_Type type, | |
| const struct GNUNET_HashCode *key, | | const struct GNUNET_HashCode *key, | |
| GNUNET_DHT_MonitorGetCB get_cb, | | GNUNET_DHT_MonitorGetCB get_cb, | |
| GNUNET_DHT_MonitorGetRespCB get_resp_cb, | | GNUNET_DHT_MonitorGetRespCB get_resp_cb, | |
| GNUNET_DHT_MonitorPutCB put_cb, | | GNUNET_DHT_MonitorPutCB put_cb, | |
| void *cb_cls); | | void *cb_cls); | |
| | | | |
| /** | | /** | |
| * Stop monitoring. | | * Stop monitoring. | |
|
| | | * On return handle will no longer be valid, caller must not use again!!! | |
| * | | * | |
| * @param handle The handle to the monitor request returned by monitor_star
t. | | * @param handle The handle to the monitor request returned by monitor_star
t. | |
|
| * | | | |
| * On return handle will no longer be valid, caller must not use again!!! | | | |
| */ | | */ | |
| void | | void | |
| GNUNET_DHT_monitor_stop (struct GNUNET_DHT_MonitorHandle *handle); | | GNUNET_DHT_monitor_stop (struct GNUNET_DHT_MonitorHandle *handle); | |
| | | | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| { | | { | |
| #endif | | #endif | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| } | | } | |
| #endif | | #endif | |
| | | | |
|
| | | /** @} */ /* end of group dht */ | |
| | | | |
| #endif | | #endif | |
| /* gnunet_dht_service.h */ | | /* gnunet_dht_service.h */ | |
| | | | |
End of changes. 37 change blocks. |
| 60 lines changed or deleted | | 63 lines changed or added | |
|
| gnunet_disk_lib.h | | gnunet_disk_lib.h | |
| /* | | /* | |
| This file is part of GNUnet. | | This file is part of GNUnet. | |
| (C) 2001-2012 Christian Grothoff (and other contributing authors) | | (C) 2001-2012 Christian Grothoff (and other contributing authors) | |
| | | | |
| GNUnet is free software; you can redistribute it and/or modify | | GNUnet is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published | | 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. | | option) any later version. | |
| | | | |
| GNUnet is distributed in the hope that it will be useful, but | | GNUnet is distributed in the hope that it will be useful, but | |
| WITHOUT ANY WARRANTY; without even the implied warranty of | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| General Public License for more details. | | General Public License for more details. | |
| | | | |
| You should have received a copy of the GNU General Public License | | You should have received a copy of the GNU General Public License | |
| along with GNUnet; see the file COPYING. If not, write to the | | along with GNUnet; see the file COPYING. If not, write to the | |
| Free Software Foundation, Inc., 59 Temple Place - Suite 330, | | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| Boston, MA 02111-1307, USA. | | Boston, MA 02111-1307, USA. | |
| */ | | */ | |
| /** | | /** | |
| * @file include/gnunet_disk_lib.h | | * @file include/gnunet_disk_lib.h | |
| * @brief disk IO apis | | * @brief disk IO apis | |
| * @author Christian Grothoff | | * @author Christian Grothoff | |
| */ | | */ | |
| #ifndef GNUNET_DISK_LIB_H | | #ifndef GNUNET_DISK_LIB_H | |
| #define GNUNET_DISK_LIB_H | | #define GNUNET_DISK_LIB_H | |
| | | | |
|
| #if WINDOWS | | | |
| #define OFF_T uint64_t | | | |
| #else | | | |
| #define OFF_T off_t | | | |
| #endif | | | |
| | | | |
| /** | | /** | |
| * Handle used to manage a pipe. | | * Handle used to manage a pipe. | |
| */ | | */ | |
| struct GNUNET_DISK_PipeHandle; | | struct GNUNET_DISK_PipeHandle; | |
| | | | |
| /** | | /** | |
| * Type of a handle. | | * Type of a handle. | |
| */ | | */ | |
| enum GNUNET_FILE_Type | | enum GNUNET_FILE_Type | |
| { | | { | |
| | | | |
| skipping to change at line 265 | | skipping to change at line 259 | |
| */ | | */ | |
| GNUNET_DISK_PIPE_END_READ = 0, | | GNUNET_DISK_PIPE_END_READ = 0, | |
| | | | |
| /** | | /** | |
| * The writing-end of a pipe. | | * The writing-end of a pipe. | |
| */ | | */ | |
| GNUNET_DISK_PIPE_END_WRITE = 1 | | GNUNET_DISK_PIPE_END_WRITE = 1 | |
| }; | | }; | |
| | | | |
| /** | | /** | |
|
| * Get the number of blocks that are left on the partition that | | | |
| * contains the given file (for normal users). | | | |
| * | | | |
| * @param part a file on the partition to check | | | |
| * @return -1 on errors, otherwise the number of free blocks | | | |
| */ | | | |
| long | | | |
| GNUNET_DISK_get_blocks_available (const char *part); | | | |
| | | | |
| /** | | | |
| * Checks whether a handle is invalid | | * Checks whether a handle is invalid | |
| * | | * | |
| * @param h handle to check | | * @param h handle to check | |
|
| * @return GNUNET_YES if invalid, GNUNET_NO if valid | | * @return #GNUNET_YES if invalid, #GNUNET_NO if valid | |
| */ | | */ | |
| int | | int | |
| GNUNET_DISK_handle_invalid (const struct GNUNET_DISK_FileHandle *h); | | GNUNET_DISK_handle_invalid (const struct GNUNET_DISK_FileHandle *h); | |
| | | | |
| /** | | /** | |
| * Check that fil corresponds to a filename | | * Check that fil corresponds to a filename | |
| * (of a file that exists and that is not a directory). | | * (of a file that exists and that is not a directory). | |
| * | | * | |
| * @param fil filename to check | | * @param fil filename to check | |
|
| * @return GNUNET_YES if yes, GNUNET_NO if not a file, GNUNET_SYSERR if som
ething | | * @return #GNUNET_YES if yes, #GNUNET_NO if not a file, #GNUNET_SYSERR if
something | |
| * else (will print an error message in that case, too). | | * else (will print an error message in that case, too). | |
| */ | | */ | |
| int | | int | |
| GNUNET_DISK_file_test (const char *fil); | | GNUNET_DISK_file_test (const char *fil); | |
| | | | |
| /** | | /** | |
| * Move a file out of the way (create a backup) by | | * Move a file out of the way (create a backup) by | |
| * renaming it to "orig.NUM~" where NUM is the smallest | | * renaming it to "orig.NUM~" where NUM is the smallest | |
| * number that is not used yet. | | * number that is not used yet. | |
| * | | * | |
| | | | |
| skipping to change at line 311 | | skipping to change at line 295 | |
| void | | void | |
| GNUNET_DISK_file_backup (const char *fil); | | GNUNET_DISK_file_backup (const char *fil); | |
| | | | |
| /** | | /** | |
| * Move the read/write pointer in a file | | * Move the read/write pointer in a file | |
| * @param h handle of an open file | | * @param h handle of an open file | |
| * @param offset position to move to | | * @param offset position to move to | |
| * @param whence specification to which position the offset parameter relat
es to | | * @param whence specification to which position the offset parameter relat
es to | |
| * @return the new position on success, GNUNET_SYSERR otherwise | | * @return the new position on success, GNUNET_SYSERR otherwise | |
| */ | | */ | |
|
| OFF_T | | off_t | |
| GNUNET_DISK_file_seek (const struct GNUNET_DISK_FileHandle *h, OFF_T offset | | GNUNET_DISK_file_seek (const struct GNUNET_DISK_FileHandle *h, off_t offset | |
| , | | , | |
| enum GNUNET_DISK_Seek whence); | | enum GNUNET_DISK_Seek whence); | |
| | | | |
| /** | | /** | |
| * Get the size of the file (or directory) of the given file (in | | * Get the size of the file (or directory) of the given file (in | |
| * bytes). | | * bytes). | |
| * | | * | |
| * @param filename name of the file or directory | | * @param filename name of the file or directory | |
| * @param size set to the size of the file (or, | | * @param size set to the size of the file (or, | |
| * in the case of directories, the sum | | * in the case of directories, the sum | |
| * of all sizes of files in the directory) | | * of all sizes of files in the directory) | |
|
| * @param includeSymLinks should symbolic links be | | * @param include_symbolic_links should symbolic links be | |
| * included? | | * included? | |
|
| * @param singleFileMode GNUNET_YES to only get size of one file | | * @param single_file_mode #GNUNET_YES to only get size of one file | |
| * and return GNUNET_SYSERR for directories. | | * and return #GNUNET_SYSERR for directories. | |
| * @return GNUNET_SYSERR on error, GNUNET_OK on success | | * @return #GNUNET_SYSERR on error, #GNUNET_OK on success | |
| */ | | */ | |
| int | | int | |
|
| GNUNET_DISK_file_size (const char *filename, uint64_t * size, | | GNUNET_DISK_file_size (const char *filename, uint64_t *size, | |
| int includeSymLinks, int singleFileMode); | | int include_symbolic_links, | |
| | | int single_file_mode); | |
| | | | |
| /** | | /** | |
| * Obtain some unique identifiers for the given file | | * Obtain some unique identifiers for the given file | |
| * that can be used to identify it in the local system. | | * that can be used to identify it in the local system. | |
| * This function is used between GNUnet processes to | | * This function is used between GNUnet processes to | |
| * quickly check if two files with the same absolute path | | * quickly check if two files with the same absolute path | |
| * are actually identical. The two processes represent | | * are actually identical. The two processes represent | |
| * the same peer but may communicate over the network | | * the same peer but may communicate over the network | |
| * (and the file may be on an NFS volume). This function | | * (and the file may be on an NFS volume). This function | |
| * may not be supported on all operating systems. | | * may not be supported on all operating systems. | |
| * | | * | |
| * @param filename name of the file | | * @param filename name of the file | |
| * @param dev set to the device ID | | * @param dev set to the device ID | |
| * @param ino set to the inode ID | | * @param ino set to the inode ID | |
| * @return GNUNET_OK on success | | * @return GNUNET_OK on success | |
| */ | | */ | |
| int | | int | |
|
| GNUNET_DISK_file_get_identifiers (const char *filename, uint64_t * dev, | | GNUNET_DISK_file_get_identifiers (const char *filename, | |
| uint64_t * ino); | | uint64_t *dev, | |
| | | uint64_t *ino); | |
| | | | |
| /** | | /** | |
| * Create an (empty) temporary file on disk. If the given name is not | | * Create an (empty) temporary file on disk. If the given name is not | |
| * an absolute path, the current 'TMPDIR' will be prepended. In any case, | | * an absolute path, the current 'TMPDIR' will be prepended. In any case, | |
| * 6 random characters will be appended to the name to create a unique | | * 6 random characters will be appended to the name to create a unique | |
| * filename. | | * filename. | |
| * | | * | |
| * @param t component to use for the name; | | * @param t component to use for the name; | |
| * does NOT contain "XXXXXX" or "/tmp/". | | * does NOT contain "XXXXXX" or "/tmp/". | |
| * @return NULL on error, otherwise name of fresh | | * @return NULL on error, otherwise name of fresh | |
| | | | |
| skipping to change at line 386 | | skipping to change at line 372 | |
| GNUNET_DISK_mkdtemp (const char *t); | | GNUNET_DISK_mkdtemp (const char *t); | |
| | | | |
| /** | | /** | |
| * Open a file. Note that the access permissions will only be | | * Open a file. Note that the access permissions will only be | |
| * used if a new file is created and if the underlying operating | | * used if a new file is created and if the underlying operating | |
| * system supports the given permissions. | | * system supports the given permissions. | |
| * | | * | |
| * @param fn file name to be opened | | * @param fn file name to be opened | |
| * @param flags opening flags, a combination of GNUNET_DISK_OPEN_xxx bit fl
ags | | * @param flags opening flags, a combination of GNUNET_DISK_OPEN_xxx bit fl
ags | |
| * @param perm permissions for the newly created file, use | | * @param perm permissions for the newly created file, use | |
|
| * GNUNET_DISK_PERM_NONE if a file could not be created by this | | * #GNUNET_DISK_PERM_NONE if a file could not be created by thi
s | |
| * call (because of flags) | | * call (because of flags) | |
| * @return IO handle on success, NULL on error | | * @return IO handle on success, NULL on error | |
| */ | | */ | |
| struct GNUNET_DISK_FileHandle * | | struct GNUNET_DISK_FileHandle * | |
|
| GNUNET_DISK_file_open (const char *fn, enum GNUNET_DISK_OpenFlags flags, | | GNUNET_DISK_file_open (const char *fn, | |
| | | enum GNUNET_DISK_OpenFlags flags, | |
| enum GNUNET_DISK_AccessPermissions perm); | | enum GNUNET_DISK_AccessPermissions perm); | |
| | | | |
| /** | | /** | |
| * Get the size of an open file. | | * Get the size of an open file. | |
| * | | * | |
| * @param fh open file handle | | * @param fh open file handle | |
| * @param size where to write size of the file | | * @param size where to write size of the file | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR on error | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
| GNUNET_DISK_file_handle_size (struct GNUNET_DISK_FileHandle *fh, | | GNUNET_DISK_file_handle_size (struct GNUNET_DISK_FileHandle *fh, | |
|
| OFF_T *size); | | off_t *size); | |
| | | | |
| /** | | /** | |
| * Creates an interprocess channel | | * Creates an interprocess channel | |
| * | | * | |
|
| * @param blocking_read creates an asynchronous pipe for reading if set to | | * @param blocking_read creates an asynchronous pipe for reading if set to | |
| GNUNET_NO | | #GNUNET_NO | |
| * @param blocking_write creates an asynchronous pipe for writing if set to | | * @param blocking_write creates an asynchronous pipe for writing if set to | |
| GNUNET_NO | | #GNUNET_NO | |
| * @param inherit_read 1 to make read handle inheritable, 0 otherwise (NT o
nly) | | * @param inherit_read 1 to make read handle inheritable, 0 otherwise (NT o
nly) | |
| * @param inherit_write 1 to make write handle inheritable, 0 otherwise (NT
only) | | * @param inherit_write 1 to make write handle inheritable, 0 otherwise (NT
only) | |
| * @return handle to the new pipe, NULL on error | | * @return handle to the new pipe, NULL on error | |
| */ | | */ | |
| struct GNUNET_DISK_PipeHandle * | | struct GNUNET_DISK_PipeHandle * | |
|
| GNUNET_DISK_pipe (int blocking_read, int blocking_write, int inherit_read, | | GNUNET_DISK_pipe (int blocking_read, | |
| int inherit_write); | | int blocking_write, | |
| | | int inherit_read, | |
| | | int inherit_write); | |
| | | | |
| /** | | /** | |
| * Creates a pipe object from a couple of file descriptors. | | * Creates a pipe object from a couple of file descriptors. | |
| * Useful for wrapping existing pipe FDs. | | * Useful for wrapping existing pipe FDs. | |
| * | | * | |
|
| * @param blocking_read creates an asynchronous pipe for reading if set to | | * @param blocking_read creates an asynchronous pipe for reading if set to | |
| GNUNET_NO | | #GNUNET_NO | |
| * @param blocking_write creates an asynchronous pipe for writing if set to | | * @param blocking_write creates an asynchronous pipe for writing if set to | |
| GNUNET_NO | | #GNUNET_NO | |
| * @param fd an array of two fd values. One of them may be -1 for read-only
or write-only pipes | | * @param fd an array of two fd values. One of them may be -1 for read-only
or write-only pipes | |
| * | | * | |
| * @return handle to the new pipe, NULL on error | | * @return handle to the new pipe, NULL on error | |
| */ | | */ | |
| struct GNUNET_DISK_PipeHandle * | | struct GNUNET_DISK_PipeHandle * | |
|
| GNUNET_DISK_pipe_from_fd (int blocking_read, int blocking_write, int fd[2]) | | GNUNET_DISK_pipe_from_fd (int blocking_read, | |
| ; | | int blocking_write, | |
| | | int fd[2]); | |
| | | | |
| /** | | /** | |
| * Closes an interprocess channel | | * Closes an interprocess channel | |
| * @param p pipe | | * @param p pipe | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR otherwise | | * @return #GNUNET_OK on success, #GNUNET_SYSERR otherwise | |
| */ | | */ | |
| int | | int | |
| GNUNET_DISK_pipe_close (struct GNUNET_DISK_PipeHandle *p); | | GNUNET_DISK_pipe_close (struct GNUNET_DISK_PipeHandle *p); | |
| | | | |
| /** | | /** | |
| * Closes one half of an interprocess channel | | * Closes one half of an interprocess channel | |
| * | | * | |
| * @param p pipe to close end of | | * @param p pipe to close end of | |
| * @param end which end of the pipe to close | | * @param end which end of the pipe to close | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR otherwise | | * @return #GNUNET_OK on success, #GNUNET_SYSERR otherwise | |
| */ | | */ | |
| int | | int | |
| GNUNET_DISK_pipe_close_end (struct GNUNET_DISK_PipeHandle *p, | | GNUNET_DISK_pipe_close_end (struct GNUNET_DISK_PipeHandle *p, | |
| enum GNUNET_DISK_PipeEnd end); | | enum GNUNET_DISK_PipeEnd end); | |
| | | | |
| /** | | /** | |
|
| | | * Detaches one of the ends from the pipe. | |
| | | * Detached end is a fully-functional FileHandle, it will | |
| | | * not be affected by anything you do with the pipe afterwards. | |
| | | * Each end of a pipe can only be detched from it once (i.e. | |
| | | * it is not duplicated). | |
| | | * | |
| | | * @param p pipe to detach an end from | |
| | | * @param end which end of the pipe to detach | |
| | | * @return Detached end on success, NULL on failure | |
| | | * (or if that end is not present or is closed). | |
| | | */ | |
| | | struct GNUNET_DISK_FileHandle * | |
| | | GNUNET_DISK_pipe_detach_end (struct GNUNET_DISK_PipeHandle *p, | |
| | | enum GNUNET_DISK_PipeEnd end); | |
| | | | |
| | | /** | |
| * Close an open file. | | * Close an open file. | |
| * | | * | |
| * @param h file handle | | * @param h file handle | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR otherwise | | * @return #GNUNET_OK on success, #GNUNET_SYSERR otherwise | |
| */ | | */ | |
| int | | int | |
| GNUNET_DISK_file_close (struct GNUNET_DISK_FileHandle *h); | | GNUNET_DISK_file_close (struct GNUNET_DISK_FileHandle *h); | |
| | | | |
| /** | | /** | |
| * Get the handle to a particular pipe end | | * Get the handle to a particular pipe end | |
| * | | * | |
| * @param p pipe | | * @param p pipe | |
| * @param n end to access | | * @param n end to access | |
| * @return handle for the respective end | | * @return handle for the respective end | |
| */ | | */ | |
| const struct GNUNET_DISK_FileHandle * | | const struct GNUNET_DISK_FileHandle * | |
| GNUNET_DISK_pipe_handle (const struct GNUNET_DISK_PipeHandle *p, | | GNUNET_DISK_pipe_handle (const struct GNUNET_DISK_PipeHandle *p, | |
| enum GNUNET_DISK_PipeEnd n); | | enum GNUNET_DISK_PipeEnd n); | |
| | | | |
|
| | | #if WINDOWS | |
| | | /** | |
| | | * Get a GNUnet file handle from a W32 handle (W32-only). | |
| | | * Do not call on non-W32 platforms (returns NULL). | |
| | | * | |
| | | * @param handle native handle | |
| | | * @return GNUnet file handle corresponding to the W32 handle | |
| | | */ | |
| | | struct GNUNET_DISK_FileHandle * | |
| | | GNUNET_DISK_get_handle_from_w32_handle (HANDLE osfh); | |
| | | #else | |
| | | | |
| | | /** | |
| | | * Update POSIX permissions mask of a file on disk. If both argumets | |
| | | * are #GNUNET_NO, the file is made world-read-write-executable (777). | |
| | | * | |
| | | * @param fn name of the file to update | |
| | | * @param require_uid_match #GNUNET_YES means 700 | |
| | | * @param require_gid_match #GNUNET_YES means 770 unless @a require_uid_mat | |
| | | ch is set | |
| | | */ | |
| | | void | |
| | | GNUNET_DISK_fix_permissions (const char *fn, | |
| | | int require_uid_match, | |
| | | int require_gid_match); | |
| | | | |
| | | #endif | |
| | | | |
| | | /** | |
| | | * Get a handle from a native integer FD. | |
| | | * | |
| | | * @param fno native integer file descriptor | |
| | | * @return file handle corresponding to the descriptor | |
| | | */ | |
| | | struct GNUNET_DISK_FileHandle * | |
| | | GNUNET_DISK_get_handle_from_int_fd (int fno); | |
| | | | |
| /** | | /** | |
| * Get a handle from a native FD. | | * Get a handle from a native FD. | |
| * | | * | |
| * @param fd native file descriptor | | * @param fd native file descriptor | |
| * @return file handle corresponding to the descriptor | | * @return file handle corresponding to the descriptor | |
| */ | | */ | |
| struct GNUNET_DISK_FileHandle * | | struct GNUNET_DISK_FileHandle * | |
| GNUNET_DISK_get_handle_from_native (FILE *fd); | | GNUNET_DISK_get_handle_from_native (FILE *fd); | |
| | | | |
| /** | | /** | |
| * Read the contents of a binary file into a buffer. | | * Read the contents of a binary file into a buffer. | |
|
| | | * | |
| * @param h handle to an open file | | * @param h handle to an open file | |
| * @param result the buffer to write the result to | | * @param result the buffer to write the result to | |
| * @param len the maximum number of bytes to read | | * @param len the maximum number of bytes to read | |
|
| * @return the number of bytes read on success, GNUNET_SYSERR on failure | | * @return the number of bytes read on success, #GNUNET_SYSERR on failure | |
| */ | | */ | |
| ssize_t | | ssize_t | |
|
| GNUNET_DISK_file_read (const struct GNUNET_DISK_FileHandle *h, void *result | | GNUNET_DISK_file_read (const struct GNUNET_DISK_FileHandle *h, | |
| , | | void *result, | |
| size_t len); | | size_t len); | |
| | | | |
| /** | | /** | |
| * Read the contents of a binary file into a buffer. | | * Read the contents of a binary file into a buffer. | |
| * Guarantees not to block (returns GNUNET_SYSERR and sets errno to EAGAIN | | * Guarantees not to block (returns GNUNET_SYSERR and sets errno to EAGAIN | |
| * when no data can be read). | | * when no data can be read). | |
| * | | * | |
| * @param h handle to an open file | | * @param h handle to an open file | |
| * @param result the buffer to write the result to | | * @param result the buffer to write the result to | |
| * @param len the maximum number of bytes to read | | * @param len the maximum number of bytes to read | |
|
| * @return the number of bytes read on success, GNUNET_SYSERR on failure | | * @return the number of bytes read on success, #GNUNET_SYSERR on failure | |
| */ | | */ | |
| ssize_t | | ssize_t | |
| GNUNET_DISK_file_read_non_blocking (const struct GNUNET_DISK_FileHandle * h
, | | GNUNET_DISK_file_read_non_blocking (const struct GNUNET_DISK_FileHandle * h
, | |
|
| void *result, size_t len); | | void *result, | |
| | | size_t len); | |
| | | | |
| /** | | /** | |
| * Read the contents of a binary file into a buffer. | | * Read the contents of a binary file into a buffer. | |
| * | | * | |
| * @param fn file name | | * @param fn file name | |
| * @param result the buffer to write the result to | | * @param result the buffer to write the result to | |
| * @param len the maximum number of bytes to read | | * @param len the maximum number of bytes to read | |
|
| * @return number of bytes read, GNUNET_SYSERR on failure | | * @return number of bytes read, #GNUNET_SYSERR on failure | |
| */ | | */ | |
| ssize_t | | ssize_t | |
|
| GNUNET_DISK_fn_read (const char *fn, void *result, size_t len); | | GNUNET_DISK_fn_read (const char *fn, | |
| | | void *result, | |
| | | size_t len); | |
| | | | |
| /** | | /** | |
| * Write a buffer to a file. | | * Write a buffer to a file. | |
| * | | * | |
| * @param h handle to open file | | * @param h handle to open file | |
| * @param buffer the data to write | | * @param buffer the data to write | |
| * @param n number of bytes to write | | * @param n number of bytes to write | |
|
| * @return number of bytes written on success, GNUNET_SYSERR on error | | * @return number of bytes written on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| ssize_t | | ssize_t | |
| GNUNET_DISK_file_write (const struct GNUNET_DISK_FileHandle *h, | | GNUNET_DISK_file_write (const struct GNUNET_DISK_FileHandle *h, | |
|
| const void *buffer, size_t n); | | const void *buffer, | |
| | | size_t n); | |
| | | | |
| /** | | /** | |
| * Write a buffer to a file, blocking, if necessary. | | * Write a buffer to a file, blocking, if necessary. | |
|
| | | * | |
| * @param h handle to open file | | * @param h handle to open file | |
| * @param buffer the data to write | | * @param buffer the data to write | |
| * @param n number of bytes to write | | * @param n number of bytes to write | |
|
| * @return number of bytes written on success, GNUNET_SYSERR on error | | * @return number of bytes written on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| ssize_t | | ssize_t | |
|
| GNUNET_DISK_file_write_blocking (const struct GNUNET_DISK_FileHandle * h, | | GNUNET_DISK_file_write_blocking (const struct GNUNET_DISK_FileHandle *h, | |
| const void *buffer, size_t n); | | const void *buffer, | |
| | | size_t n); | |
| | | | |
| /** | | /** | |
| * Write a buffer to a file. If the file is longer than | | * Write a buffer to a file. If the file is longer than | |
| * the given buffer size, it will be truncated. | | * the given buffer size, it will be truncated. | |
| * | | * | |
| * @param fn file name | | * @param fn file name | |
| * @param buffer the data to write | | * @param buffer the data to write | |
| * @param n number of bytes to write | | * @param n number of bytes to write | |
| * @param mode file permissions | | * @param mode file permissions | |
|
| * @return number of bytes written on success, GNUNET_SYSERR on error | | * @return number of bytes written on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| ssize_t | | ssize_t | |
|
| GNUNET_DISK_fn_write (const char *fn, const void *buffer, size_t n, | | GNUNET_DISK_fn_write (const char *fn, | |
| | | const void *buffer, | |
| | | size_t n, | |
| enum GNUNET_DISK_AccessPermissions mode); | | enum GNUNET_DISK_AccessPermissions mode); | |
| | | | |
| /** | | /** | |
| * Copy a file. | | * Copy a file. | |
| * | | * | |
| * @param src file to copy | | * @param src file to copy | |
| * @param dst destination file name | | * @param dst destination file name | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR on error | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
| GNUNET_DISK_file_copy (const char *src, const char *dst); | | GNUNET_DISK_file_copy (const char *src, const char *dst); | |
| | | | |
| /** | | /** | |
| * Scan a directory for files. | | * Scan a directory for files. | |
| * | | * | |
|
| * @param dirName the name of the directory | | * @param dir_name the name of the directory | |
| * @param callback the method to call for each file | | * @param callback the method to call for each file | |
|
| * @param callback_cls closure for callback | | * @param callback_cls closure for @a callback | |
| * @return the number of files found, -1 on error | | * @return the number of files found, -1 on error | |
| */ | | */ | |
| int | | int | |
|
| GNUNET_DISK_directory_scan (const char *dirName, | | GNUNET_DISK_directory_scan (const char *dir_name, | |
| GNUNET_FileNameCallback callback, | | GNUNET_FileNameCallback callback, | |
| void *callback_cls); | | void *callback_cls); | |
| | | | |
| /** | | /** | |
| * Opaque handle used for iterating over a directory. | | * Opaque handle used for iterating over a directory. | |
| */ | | */ | |
| struct GNUNET_DISK_DirectoryIterator; | | struct GNUNET_DISK_DirectoryIterator; | |
| | | | |
| /** | | /** | |
| * Function called to iterate over a directory. | | * Function called to iterate over a directory. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
|
| * @param di argument to pass to "GNUNET_DISK_directory_iterator_next" to | | * @param di argument to pass to #GNUNET_DISK_directory_iterator_next to | |
| * get called on the next entry (or finish cleanly); | | * get called on the next entry (or finish cleanly); | |
| * NULL on error (will be the last call in that case) | | * NULL on error (will be the last call in that case) | |
| * @param filename complete filename (absolute path) | | * @param filename complete filename (absolute path) | |
| * @param dirname directory name (absolute path) | | * @param dirname directory name (absolute path) | |
| */ | | */ | |
| typedef void (*GNUNET_DISK_DirectoryIteratorCallback) (void *cls, | | typedef void (*GNUNET_DISK_DirectoryIteratorCallback) (void *cls, | |
|
| struct | | struct GNUNET_DISK_D | |
| GNUNET_DISK_Director | | irectoryIterator *di, | |
| yIterator | | | |
| * di, | | | |
| const char *filename
, | | const char *filename
, | |
| const char *dirname)
; | | const char *dirname)
; | |
| | | | |
| /** | | /** | |
| * This function must be called during the DiskIteratorCallback | | * This function must be called during the DiskIteratorCallback | |
| * (exactly once) to schedule the task to process the next | | * (exactly once) to schedule the task to process the next | |
| * filename in the directory (if there is one). | | * filename in the directory (if there is one). | |
| * | | * | |
| * @param iter opaque handle for the iterator | | * @param iter opaque handle for the iterator | |
|
| * @param can set to GNUNET_YES to terminate the iteration early | | * @param can set to #GNUNET_YES to terminate the iteration early | |
| * @return GNUNET_YES if iteration will continue, | | * @return #GNUNET_YES if iteration will continue, | |
| * GNUNET_NO if this was the last entry (and iteration is complete) | | * #GNUNET_NO if this was the last entry (and iteration is complete | |
| , | | ), | |
| * GNUNET_SYSERR if "can" was YES | | * #GNUNET_SYSERR if @a can was #GNUNET_YES | |
| */ | | */ | |
| int | | int | |
| GNUNET_DISK_directory_iterator_next (struct GNUNET_DISK_DirectoryIterator *
iter, | | GNUNET_DISK_directory_iterator_next (struct GNUNET_DISK_DirectoryIterator *
iter, | |
| int can); | | int can); | |
| | | | |
| /** | | /** | |
| * Scan a directory for files using the scheduler to run a task for | | * Scan a directory for files using the scheduler to run a task for | |
| * each entry. The name of the directory must be expanded first (!). | | * each entry. The name of the directory must be expanded first (!). | |
| * If a scheduler does not need to be used, GNUNET_DISK_directory_scan | | * If a scheduler does not need to be used, GNUNET_DISK_directory_scan | |
| * may provide a simpler API. | | * may provide a simpler API. | |
| * | | * | |
| * @param prio priority to use | | * @param prio priority to use | |
|
| * @param dirName the name of the directory | | * @param dir_name the name of the directory | |
| * @param callback the method to call for each file | | * @param callback the method to call for each file | |
|
| * @param callback_cls closure for callback | | * @param callback_cls closure for @a callback | |
| * @return GNUNET_YES if directory is not empty and 'callback' | | * @return #GNUNET_YES if directory is not empty and @a callback | |
| * will be called later, GNUNET_NO otherwise, GNUNET_SYSERR on erro | | * will be called later, #GNUNET_NO otherwise, #GNUNET_SYSERR on er | |
| r. | | ror. | |
| */ | | */ | |
| int | | int | |
| GNUNET_DISK_directory_iterator_start (enum GNUNET_SCHEDULER_Priority prio, | | GNUNET_DISK_directory_iterator_start (enum GNUNET_SCHEDULER_Priority prio, | |
|
| const char *dirName, | | const char *dir_name, | |
| GNUNET_DISK_DirectoryIteratorCallback | | GNUNET_DISK_DirectoryIteratorCallback | |
| callback, void *callback_cls); | | callback, void *callback_cls); | |
| | | | |
| /** | | /** | |
| * Create the directory structure for storing | | * Create the directory structure for storing | |
| * a file. | | * a file. | |
| * | | * | |
| * @param filename name of a file in the directory | | * @param filename name of a file in the directory | |
|
| * @returns GNUNET_OK on success, GNUNET_SYSERR on failure, | | * @returns #GNUNET_OK on success, #GNUNET_SYSERR on failure, | |
| * GNUNET_NO if directory exists but is not writeable | | * #GNUNET_NO if directory exists but is not writeable | |
| */ | | */ | |
| int | | int | |
| GNUNET_DISK_directory_create_for_file (const char *filename); | | GNUNET_DISK_directory_create_for_file (const char *filename); | |
| | | | |
| /** | | /** | |
|
| * Test if "fil" is a directory and listable. Optionally, also check if the | | * Test if @a fil is a directory and listable. Optionally, also check if th
e | |
| * directory is readable. Will not print an error message if the directory
does | | * directory is readable. Will not print an error message if the directory
does | |
|
| * not exist. Will log errors if GNUNET_SYSERR is returned (i.e., a file e
xists | | * not exist. Will log errors if #GNUNET_SYSERR is returned (i.e., a file
exists | |
| * with the same name). | | * with the same name). | |
| * | | * | |
| * @param fil filename to test | | * @param fil filename to test | |
|
| * @param is_readable GNUNET_YES to additionally check if "fil" is readable | | * @param is_readable #GNUNET_YES to additionally check if @a fil is readab | |
| ; | | le; | |
| * GNUNET_NO to disable this check | | * #GNUNET_NO to disable this check | |
| * @return GNUNET_YES if yes, GNUNET_NO if not; GNUNET_SYSERR if it | | * @return #GNUNET_YES if yes, #GNUNET_NO if not; #GNUNET_SYSERR if it | |
| * does not exist or stat'ed | | * does not exist or `stat`ed | |
| */ | | */ | |
| int | | int | |
| GNUNET_DISK_directory_test (const char *fil, int is_readable); | | GNUNET_DISK_directory_test (const char *fil, int is_readable); | |
| | | | |
| /** | | /** | |
| * Remove all files in a directory (rm -rf). Call with | | * Remove all files in a directory (rm -rf). Call with | |
| * caution. | | * caution. | |
| * | | * | |
| * @param filename the file to remove | | * @param filename the file to remove | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR on error | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
| GNUNET_DISK_directory_remove (const char *filename); | | GNUNET_DISK_directory_remove (const char *filename); | |
| | | | |
| /** | | /** | |
| * Implementation of "mkdir -p" | | * Implementation of "mkdir -p" | |
| * | | * | |
| * @param dir the directory to create | | * @param dir the directory to create | |
|
| * @returns GNUNET_SYSERR on failure, GNUNET_OK otherwise | | * @returns #GNUNET_SYSERR on failure, #GNUNET_OK otherwise | |
| */ | | */ | |
| int | | int | |
| GNUNET_DISK_directory_create (const char *dir); | | GNUNET_DISK_directory_create (const char *dir); | |
| | | | |
| /** | | /** | |
| * Lock a part of a file. | | * Lock a part of a file. | |
| * | | * | |
| * @param fh file handle | | * @param fh file handle | |
|
| * @param lockStart absolute position from where to lock | | * @param lock_start absolute position from where to lock | |
| * @param lockEnd absolute position until where to lock | | * @param lock_end absolute position until where to lock | |
| * @param excl GNUNET_YES for an exclusive lock | | * @param excl #GNUNET_YES for an exclusive lock | |
| * @return GNUNET_OK on success, GNUNET_SYSERR on error | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
|
| GNUNET_DISK_file_lock (struct GNUNET_DISK_FileHandle *fh, OFF_T lockStart, | | GNUNET_DISK_file_lock (struct GNUNET_DISK_FileHandle *fh, | |
| OFF_T lockEnd, int excl); | | off_t lock_start, | |
| | | off_t lock_end, int excl); | |
| | | | |
| /** | | /** | |
|
| * Unlock a part of a file | | * Unlock a part of a file. | |
| | | * | |
| * @param fh file handle | | * @param fh file handle | |
|
| * @param unlockStart absolute position from where to unlock | | * @param unlock_start absolute position from where to unlock | |
| * @param unlockEnd absolute position until where to unlock | | * @param unlock_end absolute position until where to unlock | |
| * @return GNUNET_OK on success, GNUNET_SYSERR on error | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
|
| GNUNET_DISK_file_unlock (struct GNUNET_DISK_FileHandle *fh, OFF_T unlockSta | | GNUNET_DISK_file_unlock (struct GNUNET_DISK_FileHandle *fh, | |
| rt, | | off_t unlock_start, | |
| OFF_T unlockEnd); | | off_t unlock_end); | |
| | | | |
| /** | | /** | |
| * @brief Removes special characters as ':' from a filename. | | * @brief Removes special characters as ':' from a filename. | |
| * @param fn the filename to canonicalize | | * @param fn the filename to canonicalize | |
| */ | | */ | |
| void | | void | |
| GNUNET_DISK_filename_canonicalize (char *fn); | | GNUNET_DISK_filename_canonicalize (char *fn); | |
| | | | |
| /** | | /** | |
| * @brief Change owner of a file | | * @brief Change owner of a file | |
| * @param filename file to change | | * @param filename file to change | |
| * @param user new owner of the file | | * @param user new owner of the file | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR on failure | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on failure | |
| */ | | */ | |
| int | | int | |
| GNUNET_DISK_file_change_owner (const char *filename, const char *user); | | GNUNET_DISK_file_change_owner (const char *filename, const char *user); | |
| | | | |
| /** | | /** | |
|
| * Construct full path to a file inside of the private | | | |
| * directory used by GNUnet. Also creates the corresponding | | | |
| * directory. If the resulting name is supposed to be | | | |
| * a directory, end the last argument in '/' (or pass | | | |
| * DIR_SEPARATOR_STR as the last argument before NULL). | | | |
| * | | | |
| * @param cfg configuration to use | | | |
| * @param serviceName name of the service asking | | | |
| * @param ... is NULL-terminated list of | | | |
| * path components to append to the | | | |
| * private directory name. | | | |
| * @return the constructed filename | | | |
| */ | | | |
| char * | | | |
| GNUNET_DISK_get_home_filename (const struct GNUNET_CONFIGURATION_Handle *cf | | | |
| g, | | | |
| const char *serviceName, ...); | | | |
| | | | |
| /** | | | |
| * Opaque handle for a memory-mapping operation. | | * Opaque handle for a memory-mapping operation. | |
| */ | | */ | |
| struct GNUNET_DISK_MapHandle; | | struct GNUNET_DISK_MapHandle; | |
| | | | |
| /** | | /** | |
| * Map a file into memory | | * Map a file into memory | |
| * @param h open file handle | | * @param h open file handle | |
| * @param m handle to the new mapping (will be set) | | * @param m handle to the new mapping (will be set) | |
| * @param access access specification, GNUNET_DISK_MAP_TYPE_xxx | | * @param access access specification, GNUNET_DISK_MAP_TYPE_xxx | |
| * @param len size of the mapping | | * @param len size of the mapping | |
| | | | |
| skipping to change at line 755 | | skipping to change at line 792 | |
| */ | | */ | |
| void * | | void * | |
| GNUNET_DISK_file_map (const struct GNUNET_DISK_FileHandle *h, | | GNUNET_DISK_file_map (const struct GNUNET_DISK_FileHandle *h, | |
| struct GNUNET_DISK_MapHandle **m, | | struct GNUNET_DISK_MapHandle **m, | |
| enum GNUNET_DISK_MapType access, size_t len); | | enum GNUNET_DISK_MapType access, size_t len); | |
| | | | |
| /** | | /** | |
| * Unmap a file | | * Unmap a file | |
| * | | * | |
| * @param h mapping handle | | * @param h mapping handle | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR otherwise | | * @return #GNUNET_OK on success, #GNUNET_SYSERR otherwise | |
| */ | | */ | |
| int | | int | |
| GNUNET_DISK_file_unmap (struct GNUNET_DISK_MapHandle *h); | | GNUNET_DISK_file_unmap (struct GNUNET_DISK_MapHandle *h); | |
| | | | |
| /** | | /** | |
| * Write file changes to disk | | * Write file changes to disk | |
| * @param h handle to an open file | | * @param h handle to an open file | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR otherwise | | * @return #GNUNET_OK on success, #GNUNET_SYSERR otherwise | |
| */ | | */ | |
| int | | int | |
| GNUNET_DISK_file_sync (const struct GNUNET_DISK_FileHandle *h); | | GNUNET_DISK_file_sync (const struct GNUNET_DISK_FileHandle *h); | |
| | | | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| { | | { | |
| #endif | | #endif | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| } | | } | |
| #endif | | #endif | |
| | | | |
End of changes. 62 change blocks. |
| 129 lines changed or deleted | | 162 lines changed or added | |
|
| gnunet_dnsparser_lib.h | | gnunet_dnsparser_lib.h | |
| /* | | /* | |
| This file is part of GNUnet | | This file is part of GNUnet | |
|
| (C) 2010, 2011, 2012 Christian Grothoff (and other contributing autho
rs) | | (C) 2010-2013 Christian Grothoff (and other contributing authors) | |
| | | | |
| GNUnet is free software; you can redistribute it and/or modify | | GNUnet is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published | | 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. | | option) any later version. | |
| | | | |
| GNUnet is distributed in the hope that it will be useful, but | | GNUnet is distributed in the hope that it will be useful, but | |
| WITHOUT ANY WARRANTY; without even the implied warranty of | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| General Public License for more details. | | General Public License for more details. | |
| | | | |
| You should have received a copy of the GNU General Public License | | You should have received a copy of the GNU General Public License | |
| along with GNUnet; see the file COPYING. If not, write to the | | along with GNUnet; see the file COPYING. If not, write to the | |
| Free Software Foundation, Inc., 59 Temple Place - Suite 330, | | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| | | | |
| skipping to change at line 30 | | skipping to change at line 30 | |
| | | | |
| /** | | /** | |
| * @file include/gnunet_dnsparser_lib.h | | * @file include/gnunet_dnsparser_lib.h | |
| * @brief API for helper library to parse DNS packets. | | * @brief API for helper library to parse DNS packets. | |
| * @author Philipp Toelke | | * @author Philipp Toelke | |
| * @author Christian Grothoff | | * @author Christian Grothoff | |
| */ | | */ | |
| #ifndef GNUNET_DNSPARSER_LIB_H | | #ifndef GNUNET_DNSPARSER_LIB_H | |
| #define GNUNET_DNSPARSER_LIB_H | | #define GNUNET_DNSPARSER_LIB_H | |
| | | | |
|
| #include "platform.h" | | #include "gnunet_util_lib.h" | |
| #include "gnunet_common.h" | | #include "gnunet_tun_lib.h" | |
| | | | |
| /** | | /** | |
| * Maximum length of a label in DNS. | | * Maximum length of a label in DNS. | |
| */ | | */ | |
| #define GNUNET_DNSPARSER_MAX_LABEL_LENGTH 63 | | #define GNUNET_DNSPARSER_MAX_LABEL_LENGTH 63 | |
| | | | |
| /** | | /** | |
| * Maximum length of a name in DNS. | | * Maximum length of a name in DNS. | |
| */ | | */ | |
| #define GNUNET_DNSPARSER_MAX_NAME_LENGTH 253 | | #define GNUNET_DNSPARSER_MAX_NAME_LENGTH 253 | |
| | | | |
| skipping to change at line 55 | | skipping to change at line 55 | |
| */ | | */ | |
| #define GNUNET_DNSPARSER_TYPE_A 1 | | #define GNUNET_DNSPARSER_TYPE_A 1 | |
| #define GNUNET_DNSPARSER_TYPE_NS 2 | | #define GNUNET_DNSPARSER_TYPE_NS 2 | |
| #define GNUNET_DNSPARSER_TYPE_CNAME 5 | | #define GNUNET_DNSPARSER_TYPE_CNAME 5 | |
| #define GNUNET_DNSPARSER_TYPE_SOA 6 | | #define GNUNET_DNSPARSER_TYPE_SOA 6 | |
| #define GNUNET_DNSPARSER_TYPE_PTR 12 | | #define GNUNET_DNSPARSER_TYPE_PTR 12 | |
| #define GNUNET_DNSPARSER_TYPE_MX 15 | | #define GNUNET_DNSPARSER_TYPE_MX 15 | |
| #define GNUNET_DNSPARSER_TYPE_TXT 16 | | #define GNUNET_DNSPARSER_TYPE_TXT 16 | |
| #define GNUNET_DNSPARSER_TYPE_AAAA 28 | | #define GNUNET_DNSPARSER_TYPE_AAAA 28 | |
| #define GNUNET_DNSPARSER_TYPE_SRV 33 | | #define GNUNET_DNSPARSER_TYPE_SRV 33 | |
|
| | | #define GNUNET_DNSPARSER_TYPE_CERT 37 | |
| #define GNUNET_DNSPARSER_TYPE_TLSA 52 | | #define GNUNET_DNSPARSER_TYPE_TLSA 52 | |
| | | | |
| /** | | /** | |
|
| * A few common DNS classes (ok, only one is common, but I list a | | | |
| * couple more to make it clear what we're talking about here). | | | |
| */ | | | |
| #define GNUNET_DNSPARSER_CLASS_INTERNET 1 | | | |
| #define GNUNET_DNSPARSER_CLASS_CHAOS 3 | | | |
| #define GNUNET_DNSPARSER_CLASS_HESIOD 4 | | | |
| | | | |
| #define GNUNET_DNSPARSER_OPCODE_QUERY 0 | | | |
| #define GNUNET_DNSPARSER_OPCODE_INVERSE_QUERY 1 | | | |
| #define GNUNET_DNSPARSER_OPCODE_STATUS 2 | | | |
| | | | |
| /** | | | |
| * RFC 1035 codes. | | | |
| */ | | | |
| #define GNUNET_DNSPARSER_RETURN_CODE_NO_ERROR 0 | | | |
| #define GNUNET_DNSPARSER_RETURN_CODE_FORMAT_ERROR 1 | | | |
| #define GNUNET_DNSPARSER_RETURN_CODE_SERVER_FAILURE 2 | | | |
| #define GNUNET_DNSPARSER_RETURN_CODE_NAME_ERROR 3 | | | |
| #define GNUNET_DNSPARSER_RETURN_CODE_NOT_IMPLEMENTED 4 | | | |
| #define GNUNET_DNSPARSER_RETURN_CODE_REFUSED 5 | | | |
| | | | |
| /** | | | |
| * RFC 2136 codes | | | |
| */ | | | |
| #define GNUNET_DNSPARSER_RETURN_CODE_YXDOMAIN 6 | | | |
| #define GNUNET_DNSPARSER_RETURN_CODE_YXRRSET 7 | | | |
| #define GNUNET_DNSPARSER_RETURN_CODE_NXRRSET 8 | | | |
| #define GNUNET_DNSPARSER_RETURN_CODE_NOT_AUTH 9 | | | |
| #define GNUNET_DNSPARSER_RETURN_CODE_NOT_ZONE 10 | | | |
| | | | |
| /** | | | |
| * DNS flags (largely RFC 1035 / RFC 2136). | | | |
| */ | | | |
| struct GNUNET_DNSPARSER_Flags | | | |
| { | | | |
| #if __BYTE_ORDER == __LITTLE_ENDIAN | | | |
| /** | | | |
| * Set to 1 if recursion is desired (client -> server) | | | |
| */ | | | |
| unsigned int recursion_desired : 1 GNUNET_PACKED; | | | |
| | | | |
| /** | | | |
| * Set to 1 if message is truncated | | | |
| */ | | | |
| unsigned int message_truncated : 1 GNUNET_PACKED; | | | |
| | | | |
| /** | | | |
| * Set to 1 if this is an authoritative answer | | | |
| */ | | | |
| unsigned int authoritative_answer : 1 GNUNET_PACKED; | | | |
| | | | |
| /** | | | |
| * See GNUNET_DNSPARSER_OPCODE_ defines. | | | |
| */ | | | |
| unsigned int opcode : 4 GNUNET_PACKED; | | | |
| | | | |
| /** | | | |
| * query:0, response:1 | | | |
| */ | | | |
| unsigned int query_or_response : 1 GNUNET_PACKED; | | | |
| | | | |
| /** | | | |
| * See GNUNET_DNSPARSER_RETURN_CODE_ defines. | | | |
| */ | | | |
| unsigned int return_code : 4 GNUNET_PACKED; | | | |
| | | | |
| /** | | | |
| * See RFC 4035. | | | |
| */ | | | |
| unsigned int checking_disabled : 1 GNUNET_PACKED; | | | |
| | | | |
| /** | | | |
| * Response has been cryptographically verified, RFC 4035. | | | |
| */ | | | |
| unsigned int authenticated_data : 1 GNUNET_PACKED; | | | |
| | | | |
| /** | | | |
| * Always zero. | | | |
| */ | | | |
| unsigned int zero : 1 GNUNET_PACKED; | | | |
| | | | |
| /** | | | |
| * Set to 1 if recursion is available (server -> client) | | | |
| */ | | | |
| unsigned int recursion_available : 1 GNUNET_PACKED; | | | |
| #elif __BYTE_ORDER == __BIG_ENDIAN | | | |
| | | | |
| /** | | | |
| * query:0, response:1 | | | |
| */ | | | |
| unsigned int query_or_response : 1 GNUNET_PACKED; | | | |
| | | | |
| /** | | | |
| * See GNUNET_DNSPARSER_OPCODE_ defines. | | | |
| */ | | | |
| unsigned int opcode : 4 GNUNET_PACKED; | | | |
| | | | |
| /** | | | |
| * Set to 1 if this is an authoritative answer | | | |
| */ | | | |
| unsigned int authoritative_answer : 1 GNUNET_PACKED; | | | |
| | | | |
| /** | | | |
| * Set to 1 if message is truncated | | | |
| */ | | | |
| unsigned int message_truncated : 1 GNUNET_PACKED; | | | |
| | | | |
| /** | | | |
| * Set to 1 if recursion is desired (client -> server) | | | |
| */ | | | |
| unsigned int recursion_desired : 1 GNUNET_PACKED; | | | |
| | | | |
| /** | | | |
| * Set to 1 if recursion is available (server -> client) | | | |
| */ | | | |
| unsigned int recursion_available : 1 GNUNET_PACKED; | | | |
| | | | |
| /** | | | |
| * Always zero. | | | |
| */ | | | |
| unsigned int zero : 1 GNUNET_PACKED; | | | |
| | | | |
| /** | | | |
| * Response has been cryptographically verified, RFC 4035. | | | |
| */ | | | |
| unsigned int authenticated_data : 1 GNUNET_PACKED; | | | |
| | | | |
| /** | | | |
| * See RFC 4035. | | | |
| */ | | | |
| unsigned int checking_disabled : 1 GNUNET_PACKED; | | | |
| | | | |
| /** | | | |
| * See GNUNET_DNSPARSER_RETURN_CODE_ defines. | | | |
| */ | | | |
| unsigned int return_code : 4 GNUNET_PACKED; | | | |
| #else | | | |
| #error byteorder undefined | | | |
| #endif | | | |
| | | | |
| } GNUNET_GCC_STRUCT_LAYOUT; | | | |
| | | | |
| /** | | | |
| * A DNS query. | | * A DNS query. | |
| */ | | */ | |
| struct GNUNET_DNSPARSER_Query | | struct GNUNET_DNSPARSER_Query | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Name of the record that the query is for (0-terminated). | | * Name of the record that the query is for (0-terminated). | |
| * In UTF-8 format. The library will convert from and to DNS-IDNA | | * In UTF-8 format. The library will convert from and to DNS-IDNA | |
| * as necessary. Use 'GNUNET_DNSPARSER_check_label' to test if an | | * as necessary. Use 'GNUNET_DNSPARSER_check_label' to test if an | |
| * individual label is well-formed. If a given name is not well-formed, | | * individual label is well-formed. If a given name is not well-formed, | |
| * creating the DNS packet will fail. | | * creating the DNS packet will fail. | |
| */ | | */ | |
| char *name; | | char *name; | |
| | | | |
| /** | | /** | |
| * See GNUNET_DNSPARSER_TYPE_*. | | * See GNUNET_DNSPARSER_TYPE_*. | |
| */ | | */ | |
| uint16_t type; | | uint16_t type; | |
| | | | |
| /** | | /** | |
|
| * See GNUNET_DNSPARSER_CLASS_*. | | * See GNUNET_TUN_DNS_CLASS_*. | |
| */ | | */ | |
|
| uint16_t class; | | uint16_t dns_traffic_class; | |
| | | | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Information from MX records (RFC 1035). | | * Information from MX records (RFC 1035). | |
| */ | | */ | |
| struct GNUNET_DNSPARSER_MxRecord | | struct GNUNET_DNSPARSER_MxRecord | |
| { | | { | |
| | | | |
| /** | | /** | |
| | | | |
| skipping to change at line 319 | | skipping to change at line 177 | |
| uint16_t weight; | | uint16_t weight; | |
| | | | |
| /** | | /** | |
| * TCP or UDP port of the service. | | * TCP or UDP port of the service. | |
| */ | | */ | |
| uint16_t port; | | uint16_t port; | |
| | | | |
| }; | | }; | |
| | | | |
| /** | | /** | |
|
| | | * DNS CERT types as defined in RFC 4398. | |
| | | */ | |
| | | enum GNUNET_DNSPARSER_CertType | |
| | | { | |
| | | /** | |
| | | * Reserved value | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTTYPE_RESERVED = 0, | |
| | | | |
| | | /** | |
| | | * An x509 PKIX certificate | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTTYPE_PKIX = 1, | |
| | | | |
| | | /** | |
| | | * A SKPI certificate | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTTYPE_SKPI = 2, | |
| | | | |
| | | /** | |
| | | * A PGP certificate | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTTYPE_PGP = 3, | |
| | | | |
| | | /** | |
| | | * An x509 PKIX cert URL | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTTYPE_IPKIX = 4, | |
| | | | |
| | | /** | |
| | | * A SKPI cert URL | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTTYPE_ISKPI = 5, | |
| | | | |
| | | /** | |
| | | * A PGP cert fingerprint and URL | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTTYPE_IPGP = 6, | |
| | | | |
| | | /** | |
| | | * An attribute Certificate | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTTYPE_ACPKIX = 7, | |
| | | | |
| | | /** | |
| | | * An attribute cert URL | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTTYPE_IACKPIX = 8 | |
| | | }; | |
| | | | |
| | | /** | |
| | | * DNSCERT algorithms as defined in http://www.iana.org/assignments/ | |
| | | * dns-sec-alg-numbers/dns-sec-alg-numbers.xhtml, under dns-sec-alg-number | |
| | | s-1 | |
| | | */ | |
| | | enum GNUNET_DNSPARSER_CertAlgorithm | |
| | | { | |
| | | /** | |
| | | * No defined | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTALGO_UNDEFINED = 0, | |
| | | | |
| | | /** | |
| | | * RSA/MD5 | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTALGO_RSAMD5 = 1, | |
| | | | |
| | | /** | |
| | | * Diffie-Hellman | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTALGO_DH = 2, | |
| | | | |
| | | /** | |
| | | * DSA/SHA1 | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTALGO_DSASHA = 3, | |
| | | | |
| | | /** | |
| | | * Reserved | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTALGO_RSRVD4 = 4, | |
| | | | |
| | | /** | |
| | | * RSA/SHA1 | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTALGO_RSASHA = 5, | |
| | | | |
| | | /** | |
| | | * DSA/NSEC3/SHA | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTALGO_DSANSEC3 = 6, | |
| | | | |
| | | /** | |
| | | * RSA/NSEC3/SHA | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTALGO_RSANSEC3 = 7, | |
| | | | |
| | | /** | |
| | | * RSA/SHA256 | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTALGO_RSASHA256 = 8, | |
| | | | |
| | | /** | |
| | | * Reserved | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTALGO_RSRVD9 = 9, | |
| | | | |
| | | /** | |
| | | * RSA/SHA512 | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTALGO_RSASHA512 = 10, | |
| | | | |
| | | /** | |
| | | * GOST R 34.10-2001 | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTALGO_GOST_R34 = 12, | |
| | | | |
| | | /** | |
| | | * ECDSA Curve P-256/SHA256 | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTALGO_ECDSA_P256SHA256 = 13, | |
| | | | |
| | | /** | |
| | | * ECDSA Curve P-384/SHA384 | |
| | | */ | |
| | | GNUNET_DNSPARSER_CERTALGO_ECDSA_P384SHA384 = 14 | |
| | | | |
| | | }; | |
| | | | |
| | | /** | |
| | | * Information from CERT records (RFC 4034). | |
| | | */ | |
| | | struct GNUNET_DNSPARSER_CertRecord | |
| | | { | |
| | | | |
| | | /** | |
| | | * Certificate type | |
| | | */ | |
| | | enum GNUNET_DNSPARSER_CertType cert_type; | |
| | | | |
| | | /** | |
| | | * Certificate KeyTag | |
| | | */ | |
| | | uint16_t cert_tag; | |
| | | | |
| | | /** | |
| | | * Algorithm | |
| | | */ | |
| | | enum GNUNET_DNSPARSER_CertAlgorithm algorithm; | |
| | | | |
| | | /** | |
| | | * Number of bytes in @e certificate_data | |
| | | */ | |
| | | size_t certificate_size; | |
| | | | |
| | | /** | |
| | | * Data of the certificate. | |
| | | */ | |
| | | char *certificate_data; | |
| | | | |
| | | }; | |
| | | | |
| | | /** | |
| * Information from SOA records (RFC 1035). | | * Information from SOA records (RFC 1035). | |
| */ | | */ | |
| struct GNUNET_DNSPARSER_SoaRecord | | struct GNUNET_DNSPARSER_SoaRecord | |
| { | | { | |
| | | | |
| /** | | /** | |
|
| *The domainname of the name server that was the | | * The domainname of the name server that was the | |
| * original or primary source of data for this zone. | | * original or primary source of data for this zone. | |
| * In UTF-8 format. The library will convert from and to DNS-IDNA | | * In UTF-8 format. The library will convert from and to DNS-IDNA | |
|
| * as necessary. Use 'GNUNET_DNSPARSER_check_label' to test if an | | * as necessary. Use #GNUNET_DNSPARSER_check_label to test if an | |
| * individual label is well-formed. If a given name is not well-formed, | | * individual label is well-formed. If a given name is not well-formed, | |
| * creating the DNS packet will fail. | | * creating the DNS packet will fail. | |
| */ | | */ | |
| char *mname; | | char *mname; | |
| | | | |
| /** | | /** | |
| * A domainname which specifies the mailbox of the | | * A domainname which specifies the mailbox of the | |
| * person responsible for this zone. | | * person responsible for this zone. | |
| * In UTF-8 format. The library will convert from and to DNS-IDNA | | * In UTF-8 format. The library will convert from and to DNS-IDNA | |
| * as necessary. Use 'GNUNET_DNSPARSER_check_label' to test if an | | * as necessary. Use 'GNUNET_DNSPARSER_check_label' to test if an | |
| | | | |
| skipping to change at line 400 | | skipping to change at line 420 | |
| | | | |
| /** | | /** | |
| * A DNS response record. | | * A DNS response record. | |
| */ | | */ | |
| struct GNUNET_DNSPARSER_Record | | struct GNUNET_DNSPARSER_Record | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Name of the record that the query is for (0-terminated). | | * Name of the record that the query is for (0-terminated). | |
| * In UTF-8 format. The library will convert from and to DNS-IDNA | | * In UTF-8 format. The library will convert from and to DNS-IDNA | |
|
| * as necessary. Use 'GNUNET_DNSPARSER_check_label' to test if an | | * as necessary. Use #GNUNET_DNSPARSER_check_label to test if an | |
| * individual label is well-formed. If a given name is not well-formed, | | * individual label is well-formed. If a given name is not well-formed, | |
| * creating the DNS packet will fail. | | * creating the DNS packet will fail. | |
| */ | | */ | |
| char *name; | | char *name; | |
| | | | |
| /** | | /** | |
| * Payload of the record (which one of these is valid depends on the 'typ
e'). | | * Payload of the record (which one of these is valid depends on the 'typ
e'). | |
| */ | | */ | |
| union | | union | |
| { | | { | |
| | | | |
| /** | | /** | |
| * For NS, CNAME and PTR records, this is the uncompressed 0-terminated
hostname. | | * For NS, CNAME and PTR records, this is the uncompressed 0-terminated
hostname. | |
| * In UTF-8 format. The library will convert from and to DNS-IDNA | | * In UTF-8 format. The library will convert from and to DNS-IDNA | |
|
| * as necessary. Use 'GNUNET_DNSPARSER_check_label' to test if an | | * as necessary. Use #GNUNET_DNSPARSER_check_label to test if an | |
| * individual label is well-formed. If a given name is not well-formed, | | * individual label is well-formed. If a given name is not well-formed, | |
| * creating the DNS packet will fail. | | * creating the DNS packet will fail. | |
| */ | | */ | |
| char *hostname; | | char *hostname; | |
| | | | |
| /** | | /** | |
| * SOA data for SOA records. | | * SOA data for SOA records. | |
| */ | | */ | |
| struct GNUNET_DNSPARSER_SoaRecord *soa; | | struct GNUNET_DNSPARSER_SoaRecord *soa; | |
| | | | |
| /** | | /** | |
|
| | | * CERT data for CERT records. | |
| | | */ | |
| | | struct GNUNET_DNSPARSER_CertRecord *cert; | |
| | | | |
| | | /** | |
| * MX data for MX records. | | * MX data for MX records. | |
| */ | | */ | |
| struct GNUNET_DNSPARSER_MxRecord *mx; | | struct GNUNET_DNSPARSER_MxRecord *mx; | |
| | | | |
| /** | | /** | |
| * SRV data for SRV records. | | * SRV data for SRV records. | |
| */ | | */ | |
| struct GNUNET_DNSPARSER_SrvRecord *srv; | | struct GNUNET_DNSPARSER_SrvRecord *srv; | |
| | | | |
| /** | | /** | |
| | | | |
| skipping to change at line 454 | | skipping to change at line 479 | |
| * When does the record expire? | | * When does the record expire? | |
| */ | | */ | |
| struct GNUNET_TIME_Absolute expiration_time; | | struct GNUNET_TIME_Absolute expiration_time; | |
| | | | |
| /** | | /** | |
| * See GNUNET_DNSPARSER_TYPE_*. | | * See GNUNET_DNSPARSER_TYPE_*. | |
| */ | | */ | |
| uint16_t type; | | uint16_t type; | |
| | | | |
| /** | | /** | |
|
| * See GNUNET_DNSPARSER_CLASS_*. | | * See GNUNET_TUN_DNS_CLASS_*. | |
| */ | | */ | |
|
| uint16_t class; | | uint16_t dns_traffic_class; | |
| | | | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Easy-to-process, parsed version of a DNS packet. | | * Easy-to-process, parsed version of a DNS packet. | |
| */ | | */ | |
| struct GNUNET_DNSPARSER_Packet | | struct GNUNET_DNSPARSER_Packet | |
| { | | { | |
| /** | | /** | |
| * Array of all queries in the packet, must contain "num_queries" entries
. | | * Array of all queries in the packet, must contain "num_queries" entries
. | |
| | | | |
| skipping to change at line 508 | | skipping to change at line 533 | |
| unsigned int num_authority_records; | | unsigned int num_authority_records; | |
| | | | |
| /** | | /** | |
| * Number of additional records in the packet, should be 0 for queries. | | * Number of additional records in the packet, should be 0 for queries. | |
| */ | | */ | |
| unsigned int num_additional_records; | | unsigned int num_additional_records; | |
| | | | |
| /** | | /** | |
| * Bitfield of DNS flags. | | * Bitfield of DNS flags. | |
| */ | | */ | |
|
| struct GNUNET_DNSPARSER_Flags flags; | | struct GNUNET_TUN_DnsFlags flags; | |
| | | | |
| /** | | /** | |
| * DNS ID (to match replies to requests). | | * DNS ID (to match replies to requests). | |
| */ | | */ | |
| uint16_t id; | | uint16_t id; | |
| | | | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Check if a label in UTF-8 format can be coded into valid IDNA. | | * Check if a label in UTF-8 format can be coded into valid IDNA. | |
| * This can fail if the ASCII-conversion becomes longer than 63 characters. | | * This can fail if the ASCII-conversion becomes longer than 63 characters. | |
| * | | * | |
| * @param label label to check (UTF-8 string) | | * @param label label to check (UTF-8 string) | |
|
| * @return GNUNET_OK if the label can be converted to IDNA, | | * @return #GNUNET_OK if the label can be converted to IDNA, | |
| * GNUNET_SYSERR if the label is not valid for DNS names | | * #GNUNET_SYSERR if the label is not valid for DNS names | |
| */ | | */ | |
| int | | int | |
| GNUNET_DNSPARSER_check_label (const char *label); | | GNUNET_DNSPARSER_check_label (const char *label); | |
| | | | |
| /** | | /** | |
| * Check if a hostname in UTF-8 format can be coded into valid IDNA. | | * Check if a hostname in UTF-8 format can be coded into valid IDNA. | |
| * This can fail if a label becomes longer than 63 characters or if | | * This can fail if a label becomes longer than 63 characters or if | |
| * the entire name exceeds 253 characters. | | * the entire name exceeds 253 characters. | |
| * | | * | |
| * @param name name to check (UTF-8 string) | | * @param name name to check (UTF-8 string) | |
|
| * @return GNUNET_OK if the label can be converted to IDNA, | | * @return #GNUNET_OK if the label can be converted to IDNA, | |
| * GNUNET_SYSERR if the label is not valid for DNS names | | * #GNUNET_SYSERR if the label is not valid for DNS names | |
| */ | | */ | |
| int | | int | |
| GNUNET_DNSPARSER_check_name (const char *name); | | GNUNET_DNSPARSER_check_name (const char *name); | |
| | | | |
| /** | | /** | |
| * Parse a UDP payload of a DNS packet in to a nice struct for further | | * Parse a UDP payload of a DNS packet in to a nice struct for further | |
| * processing and manipulation. | | * processing and manipulation. | |
| * | | * | |
| * @param udp_payload wire-format of the DNS packet | | * @param udp_payload wire-format of the DNS packet | |
|
| * @param udp_payload_length number of bytes in udp_payload | | * @param udp_payload_length number of bytes in @a udp_payload | |
| * @return NULL on error, otherwise the parsed packet | | * @return NULL on error, otherwise the parsed packet | |
| */ | | */ | |
| struct GNUNET_DNSPARSER_Packet * | | struct GNUNET_DNSPARSER_Packet * | |
| GNUNET_DNSPARSER_parse (const char *udp_payload, | | GNUNET_DNSPARSER_parse (const char *udp_payload, | |
| size_t udp_payload_length); | | size_t udp_payload_length); | |
| | | | |
| /** | | /** | |
| * Free memory taken by a packet. | | * Free memory taken by a packet. | |
| * | | * | |
| * @param p packet to free | | * @param p packet to free | |
| */ | | */ | |
| void | | void | |
| GNUNET_DNSPARSER_free_packet (struct GNUNET_DNSPARSER_Packet *p); | | GNUNET_DNSPARSER_free_packet (struct GNUNET_DNSPARSER_Packet *p); | |
| | | | |
| /** | | /** | |
|
| * Given a DNS packet, generate the corresponding UDP payload. | | * Given a DNS packet @a p, generate the corresponding UDP payload. | |
| | | * Note that we do not attempt to pack the strings with pointers | |
| | | * as this would complicate the code and this is about being | |
| | | * simple and secure, not fast, fancy and broken like bind. | |
| * | | * | |
| * @param p packet to pack | | * @param p packet to pack | |
| * @param max maximum allowed size for the resulting UDP payload | | * @param max maximum allowed size for the resulting UDP payload | |
| * @param buf set to a buffer with the packed message | | * @param buf set to a buffer with the packed message | |
|
| * @param buf_length set to the length of buf | | * @param buf_length set to the length of @a buf | |
| * @return GNUNET_SYSERR if 'p' is invalid | | * @return #GNUNET_SYSERR if @a p is invalid | |
| * GNUNET_NO if 'p' was truncated (but there is still a result in ' | | * #GNUNET_NO if @a p was truncated (but there is still a result in | |
| buf') | | @a buf) | |
| * GNUNET_OK if 'p' was packed completely into '*buf' | | * #GNUNET_OK if @a p was packed completely into @a buf | |
| */ | | */ | |
| int | | int | |
| GNUNET_DNSPARSER_pack (const struct GNUNET_DNSPARSER_Packet *p, | | GNUNET_DNSPARSER_pack (const struct GNUNET_DNSPARSER_Packet *p, | |
| uint16_t max, | | uint16_t max, | |
| char **buf, | | char **buf, | |
| size_t *buf_length); | | size_t *buf_length); | |
| | | | |
|
| | | /* ***************** low-level packing API ******************** */ | |
| | | | |
| | | /** | |
| | | * Add a DNS name to the UDP packet at the given location, converting | |
| | | * the name to IDNA notation as necessary. | |
| | | * | |
| | | * @param dst where to write the name (UDP packet) | |
| | | * @param dst_len number of bytes in @a dst | |
| | | * @param off pointer to offset where to write the name (increment by bytes | |
| | | used) | |
| | | * must not be changed if there is an error | |
| | | * @param name name to write | |
| | | * @return #GNUNET_SYSERR if @a name is invalid | |
| | | * #GNUNET_NO if @a name did not fit | |
| | | * #GNUNET_OK if @a name was added to @a dst | |
| | | */ | |
| | | int | |
| | | GNUNET_DNSPARSER_builder_add_name (char *dst, | |
| | | size_t dst_len, | |
| | | size_t *off, | |
| | | const char *name); | |
| | | | |
| | | /** | |
| | | * Add a DNS query to the UDP packet at the given location. | |
| | | * | |
| | | * @param dst where to write the query | |
| | | * @param dst_len number of bytes in @a dst | |
| | | * @param off pointer to offset where to write the query (increment by byte | |
| | | s used) | |
| | | * must not be changed if there is an error | |
| | | * @param query query to write | |
| | | * @return #GNUNET_SYSERR if @a query is invalid | |
| | | * #GNUNET_NO if @a query did not fit | |
| | | * #GNUNET_OK if @a query was added to @a dst | |
| | | */ | |
| | | int | |
| | | GNUNET_DNSPARSER_builder_add_query (char *dst, | |
| | | size_t dst_len, | |
| | | size_t *off, | |
| | | const struct GNUNET_DNSPARSER_Query *que | |
| | | ry); | |
| | | | |
| | | /** | |
| | | * Add an MX record to the UDP packet at the given location. | |
| | | * | |
| | | * @param dst where to write the mx record | |
| | | * @param dst_len number of bytes in @a dst | |
| | | * @param off pointer to offset where to write the mx information (incremen | |
| | | t by bytes used); | |
| | | * can also change if there was an error | |
| | | * @param mx mx information to write | |
| | | * @return #GNUNET_SYSERR if @a mx is invalid | |
| | | * #GNUNET_NO if @a mx did not fit | |
| | | * #GNUNET_OK if @a mx was added to @a dst | |
| | | */ | |
| | | int | |
| | | GNUNET_DNSPARSER_builder_add_mx (char *dst, | |
| | | size_t dst_len, | |
| | | size_t *off, | |
| | | const struct GNUNET_DNSPARSER_MxRecord *mx) | |
| | | ; | |
| | | | |
| | | /** | |
| | | * Add an SOA record to the UDP packet at the given location. | |
| | | * | |
| | | * @param dst where to write the SOA record | |
| | | * @param dst_len number of bytes in @a dst | |
| | | * @param off pointer to offset where to write the SOA information (increme | |
| | | nt by bytes used) | |
| | | * can also change if there was an error | |
| | | * @param soa SOA information to write | |
| | | * @return #GNUNET_SYSERR if @a soa is invalid | |
| | | * #GNUNET_NO if @a soa did not fit | |
| | | * #GNUNET_OK if @a soa was added to @a dst | |
| | | */ | |
| | | int | |
| | | GNUNET_DNSPARSER_builder_add_soa (char *dst, | |
| | | size_t dst_len, | |
| | | size_t *off, | |
| | | const struct GNUNET_DNSPARSER_SoaRecord *s | |
| | | oa); | |
| | | | |
| | | /** | |
| | | * Add CERT record to the UDP packet at the given location. | |
| | | * | |
| | | * @param dst where to write the CERT record | |
| | | * @param dst_len number of bytes in @a dst | |
| | | * @param off pointer to offset where to write the CERT information (increm | |
| | | ent by bytes used) | |
| | | * can also change if there was an error | |
| | | * @param cert CERT information to write | |
| | | * @return #GNUNET_SYSERR if @a soa is invalid | |
| | | * #GNUNET_NO if @a soa did not fit | |
| | | * #GNUNET_OK if @a soa was added to @a dst | |
| | | */ | |
| | | int | |
| | | GNUNET_DNSPARSER_builder_add_cert (char *dst, | |
| | | size_t dst_len, | |
| | | size_t *off, | |
| | | const struct GNUNET_DNSPARSER_CertRecord | |
| | | *cert); | |
| | | | |
| | | /** | |
| | | * Add an SRV record to the UDP packet at the given location. | |
| | | * | |
| | | * @param dst where to write the SRV record | |
| | | * @param dst_len number of bytes in @a dst | |
| | | * @param off pointer to offset where to write the SRV information (increme | |
| | | nt by bytes used) | |
| | | * can also change if there was an error | |
| | | * @param srv SRV information to write | |
| | | * @return #GNUNET_SYSERR if @a srv is invalid | |
| | | * #GNUNET_NO if @a srv did not fit | |
| | | * #GNUNET_OK if @a srv was added to @a dst | |
| | | */ | |
| | | int | |
| | | GNUNET_DNSPARSER_builder_add_srv (char *dst, | |
| | | size_t dst_len, | |
| | | size_t *off, | |
| | | const struct GNUNET_DNSPARSER_SrvRecord *s | |
| | | rv); | |
| | | | |
| | | /* ***************** low-level parsing API ******************** */ | |
| | | | |
| | | /** | |
| | | * Parse a DNS record entry. | |
| | | * | |
| | | * @param udp_payload entire UDP payload | |
| | | * @param udp_payload_length length of @a udp_payload | |
| | | * @param off pointer to the offset of the record to parse in the udp_paylo | |
| | | ad (to be | |
| | | * incremented by the size of the record) | |
| | | * @param r where to write the record information | |
| | | * @return #GNUNET_OK on success, #GNUNET_SYSERR if the record is malformed | |
| | | */ | |
| | | int | |
| | | GNUNET_DNSPARSER_parse_record (const char *udp_payload, | |
| | | size_t udp_payload_length, | |
| | | size_t *off, | |
| | | struct GNUNET_DNSPARSER_Record *r); | |
| | | | |
| | | /** | |
| | | * Parse name inside of a DNS query or record. | |
| | | * | |
| | | * @param udp_payload entire UDP payload | |
| | | * @param udp_payload_length length of @a udp_payload | |
| | | * @param off pointer to the offset of the name to parse in the udp_payload | |
| | | (to be | |
| | | * incremented by the size of the name) | |
| | | * @return name as 0-terminated C string on success, NULL if the payload is | |
| | | malformed | |
| | | */ | |
| | | char * | |
| | | GNUNET_DNSPARSER_parse_name (const char *udp_payload, | |
| | | size_t udp_payload_length, | |
| | | size_t *off); | |
| | | | |
| | | /** | |
| | | * Parse a DNS query entry. | |
| | | * | |
| | | * @param udp_payload entire UDP payload | |
| | | * @param udp_payload_length length of @a udp_payload | |
| | | * @param off pointer to the offset of the query to parse in the udp_payloa | |
| | | d (to be | |
| | | * incremented by the size of the query) | |
| | | * @param q where to write the query information | |
| | | * @return #GNUNET_OK on success, #GNUNET_SYSERR if the query is malformed | |
| | | */ | |
| | | int | |
| | | GNUNET_DNSPARSER_parse_query (const char *udp_payload, | |
| | | size_t udp_payload_length, | |
| | | size_t *off, | |
| | | struct GNUNET_DNSPARSER_Query *q); | |
| | | | |
| | | /** | |
| | | * Parse a DNS SOA record. | |
| | | * | |
| | | * @param udp_payload reference to UDP packet | |
| | | * @param udp_payload_length length of @a udp_payload | |
| | | * @param off pointer to the offset of the query to parse in the SOA record | |
| | | (to be | |
| | | * incremented by the size of the record), unchanged on | |
| | | error | |
| | | * @return the parsed SOA record, NULL on error | |
| | | */ | |
| | | struct GNUNET_DNSPARSER_SoaRecord * | |
| | | GNUNET_DNSPARSER_parse_soa (const char *udp_payload, | |
| | | size_t udp_payload_length, | |
| | | size_t *off); | |
| | | | |
| | | /** | |
| | | * Parse a DNS CERT record. | |
| | | * | |
| | | * @param udp_payload reference to UDP packet | |
| | | * @param udp_payload_length length of @a udp_payload | |
| | | * @param off pointer to the offset of the query to parse in the CERT recor | |
| | | d (to be | |
| | | * incremented by the size of the record), unchanged on | |
| | | error | |
| | | * @return the parsed CERT record, NULL on error | |
| | | */ | |
| | | struct GNUNET_DNSPARSER_CertRecord * | |
| | | GNUNET_DNSPARSER_parse_cert (const char *udp_payload, | |
| | | size_t udp_payload_length, | |
| | | size_t *off); | |
| | | | |
| | | /** | |
| | | * Parse a DNS MX record. | |
| | | * | |
| | | * @param udp_payload reference to UDP packet | |
| | | * @param udp_payload_length length of @a udp_payload | |
| | | * @param off pointer to the offset of the query to parse in the MX record | |
| | | (to be | |
| | | * incremented by the size of the record), unchanged on | |
| | | error | |
| | | * @return the parsed MX record, NULL on error | |
| | | */ | |
| | | struct GNUNET_DNSPARSER_MxRecord * | |
| | | GNUNET_DNSPARSER_parse_mx (const char *udp_payload, | |
| | | size_t udp_payload_length, | |
| | | size_t *off); | |
| | | | |
| | | /** | |
| | | * Parse a DNS SRV record. | |
| | | * | |
| | | * @param r_name name of the SRV record | |
| | | * @param udp_payload reference to UDP packet | |
| | | * @param udp_payload_length length of @a udp_payload | |
| | | * @param off pointer to the offset of the query to parse in the SRV record | |
| | | (to be | |
| | | * incremented by the size of the record), unchanged on | |
| | | error | |
| | | * @return the parsed SRV record, NULL on error | |
| | | */ | |
| | | struct GNUNET_DNSPARSER_SrvRecord * | |
| | | GNUNET_DNSPARSER_parse_srv (const char *r_name, | |
| | | const char *udp_payload, | |
| | | size_t udp_payload_length, | |
| | | size_t *off); | |
| | | | |
| | | /* ***************** low-level deallocation API ******************** */ | |
| | | | |
| | | /** | |
| | | * Free the given DNS record. | |
| | | * | |
| | | * @param r record to free | |
| | | */ | |
| | | void | |
| | | GNUNET_DNSPARSER_free_record (struct GNUNET_DNSPARSER_Record *r); | |
| | | | |
| | | /** | |
| | | * Free MX information record. | |
| | | * | |
| | | * @param mx record to free | |
| | | */ | |
| | | void | |
| | | GNUNET_DNSPARSER_free_mx (struct GNUNET_DNSPARSER_MxRecord *mx); | |
| | | | |
| | | /** | |
| | | * Free SRV information record. | |
| | | * | |
| | | * @param srv record to free | |
| | | */ | |
| | | void | |
| | | GNUNET_DNSPARSER_free_srv (struct GNUNET_DNSPARSER_SrvRecord *srv); | |
| | | | |
| | | /** | |
| | | * Free SOA information record. | |
| | | * | |
| | | * @param soa record to free | |
| | | */ | |
| | | void | |
| | | GNUNET_DNSPARSER_free_soa (struct GNUNET_DNSPARSER_SoaRecord *soa); | |
| | | | |
| | | /** | |
| | | * Free CERT information record. | |
| | | * | |
| | | * @param cert record to free | |
| | | */ | |
| | | void | |
| | | GNUNET_DNSPARSER_free_cert (struct GNUNET_DNSPARSER_CertRecord *cert); | |
| | | | |
| #endif | | #endif | |
| | | | |
End of changes. 22 change blocks. |
| 167 lines changed or deleted | | 478 lines changed or added | |
|
| gnunet_fs_service.h | | gnunet_fs_service.h | |
| /* | | /* | |
| This file is part of GNUnet | | This file is part of GNUnet | |
|
| (C) 2004, 2005, 2006, 2007, 2008, 2009 Christian Grothoff (and other c
ontributing authors) | | (C) 2004--2013 Christian Grothoff (and other contributing authors) | |
| | | | |
| GNUnet is free software; you can redistribute it and/or modify | | GNUnet is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published | | it under the terms of the GNU General Public License as published | |
| by the Free Software Foundation; either version 3, or (at your | | by the Free Software Foundation; either version 3, or (at your | |
| option) any later version. | | option) any later version. | |
| | | | |
| GNUnet is distributed in the hope that it will be useful, but | | GNUnet is distributed in the hope that it will be useful, but | |
| WITHOUT ANY WARRANTY; without even the implied warranty of | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| General Public License for more details. | | General Public License for more details. | |
| | | | |
| skipping to change at line 29 | | skipping to change at line 29 | |
| */ | | */ | |
| /** | | /** | |
| * @file include/gnunet_fs_service.h | | * @file include/gnunet_fs_service.h | |
| * @brief API for file-sharing via GNUnet | | * @brief API for file-sharing via GNUnet | |
| * @author Christian Grothoff | | * @author Christian Grothoff | |
| */ | | */ | |
| #ifndef GNUNET_FS_LIB_H | | #ifndef GNUNET_FS_LIB_H | |
| #define GNUNET_FS_LIB_H | | #define GNUNET_FS_LIB_H | |
| | | | |
| #include "gnunet_util_lib.h" | | #include "gnunet_util_lib.h" | |
|
| #include "gnunet_scheduler_lib.h" | | | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| extern "C" | | extern "C" | |
| { | | { | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| } | | } | |
| #endif | | #endif | |
| #endif | | #endif | |
| | | | |
| /** | | /** | |
| | | | |
| skipping to change at line 57 | | skipping to change at line 56 | |
| * 3.0.x: with namespaces | | * 3.0.x: with namespaces | |
| * 3.1.x: with namespace meta-data | | * 3.1.x: with namespace meta-data | |
| * 3.2.x: with collections | | * 3.2.x: with collections | |
| * 4.0.x: with expiration, variable meta-data, kblocks | | * 4.0.x: with expiration, variable meta-data, kblocks | |
| * 4.1.x: with new error and configuration handling | | * 4.1.x: with new error and configuration handling | |
| * 5.0.x: with location URIs | | * 5.0.x: with location URIs | |
| * 6.0.0: with support for OR in KSKs | | * 6.0.0: with support for OR in KSKs | |
| * 6.1.x: with simplified namespace support | | * 6.1.x: with simplified namespace support | |
| * 9.0.0: CPS-style integrated API | | * 9.0.0: CPS-style integrated API | |
| * 9.1.1: asynchronous directory scanning | | * 9.1.1: asynchronous directory scanning | |
|
| | | * 9.2.0: unified K-Block and S-block format (#2564) | |
| */ | | */ | |
|
| #define GNUNET_FS_VERSION 0x00090103 | | #define GNUNET_FS_VERSION 0x00090200 | |
| | | | |
| /* ******************** URI API *********************** */ | | /* ******************** URI API *********************** */ | |
| | | | |
| #define GNUNET_FS_URI_PREFIX "gnunet://fs/" | | #define GNUNET_FS_URI_PREFIX "gnunet://fs/" | |
| #define GNUNET_FS_URI_KSK_INFIX "ksk/" | | #define GNUNET_FS_URI_KSK_INFIX "ksk/" | |
| #define GNUNET_FS_URI_SKS_INFIX "sks/" | | #define GNUNET_FS_URI_SKS_INFIX "sks/" | |
| #define GNUNET_FS_URI_CHK_INFIX "chk/" | | #define GNUNET_FS_URI_CHK_INFIX "chk/" | |
| #define GNUNET_FS_URI_LOC_INFIX "loc/" | | #define GNUNET_FS_URI_LOC_INFIX "loc/" | |
| | | | |
| /** | | /** | |
| | | | |
| skipping to change at line 85 | | skipping to change at line 85 | |
| * A Universal Resource Identifier (URI), opaque. | | * A Universal Resource Identifier (URI), opaque. | |
| */ | | */ | |
| struct GNUNET_FS_Uri; | | struct GNUNET_FS_Uri; | |
| | | | |
| /** | | /** | |
| * Iterator over keywords | | * Iterator over keywords | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param keyword the keyword | | * @param keyword the keyword | |
| * @param is_mandatory is the keyword mandatory (in a search) | | * @param is_mandatory is the keyword mandatory (in a search) | |
|
| * @return GNUNET_OK to continue to iterate, GNUNET_SYSERR to abort | | * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to abort | |
| */ | | */ | |
| typedef int (*GNUNET_FS_KeywordIterator) (void *cls, const char *keyword, | | typedef int (*GNUNET_FS_KeywordIterator) (void *cls, const char *keyword, | |
| int is_mandatory); | | int is_mandatory); | |
| | | | |
| /** | | /** | |
| * Get a unique key from a URI. This is for putting URIs | | * Get a unique key from a URI. This is for putting URIs | |
| * into HashMaps. The key may change between FS implementations. | | * into HashMaps. The key may change between FS implementations. | |
| * | | * | |
| * @param uri uri to convert to a unique key | | * @param uri uri to convert to a unique key | |
| * @param key wherer to store the unique key | | * @param key wherer to store the unique key | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_FS_uri_to_key (const struct GNUNET_FS_Uri *uri, struct GNUNET_HashCo | | GNUNET_FS_uri_to_key (const struct GNUNET_FS_Uri *uri, | |
| de * key); | | struct GNUNET_HashCode *key); | |
| | | | |
| /** | | /** | |
| * Convert a URI to a UTF-8 String. | | * Convert a URI to a UTF-8 String. | |
| * | | * | |
| * @param uri uri to convert to a string | | * @param uri uri to convert to a string | |
| * @return the UTF-8 string | | * @return the UTF-8 string | |
| */ | | */ | |
| char * | | char * | |
| GNUNET_FS_uri_to_string (const struct GNUNET_FS_Uri *uri); | | GNUNET_FS_uri_to_string (const struct GNUNET_FS_Uri *uri); | |
| | | | |
| | | | |
| skipping to change at line 128 | | skipping to change at line 129 | |
| | | | |
| /** | | /** | |
| * Add the given keyword to the set of keywords represented by the URI. | | * Add the given keyword to the set of keywords represented by the URI. | |
| * Does nothing if the keyword is already present. | | * Does nothing if the keyword is already present. | |
| * | | * | |
| * @param uri ksk uri to modify | | * @param uri ksk uri to modify | |
| * @param keyword keyword to add | | * @param keyword keyword to add | |
| * @param is_mandatory is this keyword mandatory? | | * @param is_mandatory is this keyword mandatory? | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_FS_uri_ksk_add_keyword (struct GNUNET_FS_Uri *uri, const char *keywo | | GNUNET_FS_uri_ksk_add_keyword (struct GNUNET_FS_Uri *uri, | |
| rd, | | const char *keyword, | |
| int is_mandatory); | | int is_mandatory); | |
| | | | |
| /** | | /** | |
| * Remove the given keyword from the set of keywords represented by the URI
. | | * Remove the given keyword from the set of keywords represented by the URI
. | |
| * Does nothing if the keyword is not present. | | * Does nothing if the keyword is not present. | |
| * | | * | |
| * @param uri ksk uri to modify | | * @param uri ksk uri to modify | |
| * @param keyword keyword to add | | * @param keyword keyword to add | |
| */ | | */ | |
| void | | void | |
| | | | |
| skipping to change at line 174 | | skipping to change at line 176 | |
| * @return 0 if this is not a keyword URI | | * @return 0 if this is not a keyword URI | |
| */ | | */ | |
| unsigned int | | unsigned int | |
| GNUNET_FS_uri_ksk_get_keyword_count (const struct GNUNET_FS_Uri *uri); | | GNUNET_FS_uri_ksk_get_keyword_count (const struct GNUNET_FS_Uri *uri); | |
| | | | |
| /** | | /** | |
| * Iterate over all keywords in this keyword URI. | | * Iterate over all keywords in this keyword URI. | |
| * | | * | |
| * @param uri ksk uri to get the keywords from | | * @param uri ksk uri to get the keywords from | |
| * @param iterator function to call on each keyword | | * @param iterator function to call on each keyword | |
|
| * @param iterator_cls closure for iterator | | * @param iterator_cls closure for @a iterator | |
| * @return -1 if this is not a keyword URI, otherwise number of | | * @return -1 if this is not a keyword URI, otherwise number of | |
| * keywords iterated over until iterator aborted | | * keywords iterated over until iterator aborted | |
| */ | | */ | |
| int | | int | |
| GNUNET_FS_uri_ksk_get_keywords (const struct GNUNET_FS_Uri *uri, | | GNUNET_FS_uri_ksk_get_keywords (const struct GNUNET_FS_Uri *uri, | |
| GNUNET_FS_KeywordIterator iterator, | | GNUNET_FS_KeywordIterator iterator, | |
| void *iterator_cls); | | void *iterator_cls); | |
| | | | |
| /** | | /** | |
| * Obtain the identity of the peer offering the data | | * Obtain the identity of the peer offering the data | |
| * | | * | |
| * @param uri the location URI to inspect | | * @param uri the location URI to inspect | |
| * @param peer where to store the identify of the peer (presumably) offerin
g the content | | * @param peer where to store the identify of the peer (presumably) offerin
g the content | |
|
| * @return GNUNET_SYSERR if this is not a location URI, otherwise GNUNET_OK | | * @return #GNUNET_SYSERR if this is not a location URI, otherwise #GNUNET_
OK | |
| */ | | */ | |
| int | | int | |
| GNUNET_FS_uri_loc_get_peer_identity (const struct GNUNET_FS_Uri *uri, | | GNUNET_FS_uri_loc_get_peer_identity (const struct GNUNET_FS_Uri *uri, | |
| struct GNUNET_PeerIdentity *peer); | | struct GNUNET_PeerIdentity *peer); | |
| | | | |
| /** | | /** | |
| * Obtain the URI of the content itself. | | * Obtain the URI of the content itself. | |
| * | | * | |
| * @param uri location URI to get the content URI from | | * @param uri location URI to get the content URI from | |
| * @return NULL if argument is not a location URI | | * @return NULL if argument is not a location URI | |
| | | | |
| skipping to change at line 283 | | skipping to change at line 285 | |
| * quotes are required for keywords starting with | | * quotes are required for keywords starting with | |
| * "+"); there is no mechanism for having double | | * "+"); there is no mechanism for having double | |
| * quotes in the actual keywords (if the user | | * quotes in the actual keywords (if the user | |
| * did specifically specify double quotes, the | | * did specifically specify double quotes, the | |
| * caller should convert each double quote | | * caller should convert each double quote | |
| * into two single quotes). | | * into two single quotes). | |
| * @return an FS URI for the given keywords, NULL | | * @return an FS URI for the given keywords, NULL | |
| * if keywords is not legal (i.e. empty). | | * if keywords is not legal (i.e. empty). | |
| */ | | */ | |
| struct GNUNET_FS_Uri * | | struct GNUNET_FS_Uri * | |
|
| GNUNET_FS_uri_ksk_create_from_args (unsigned int argc, const char **argv); | | GNUNET_FS_uri_ksk_create_from_args (unsigned int argc, | |
| | | const char **argv); | |
| | | | |
| /** | | /** | |
| * Test if two URIs are equal. | | * Test if two URIs are equal. | |
| * | | * | |
| * @param u1 one of the URIs | | * @param u1 one of the URIs | |
| * @param u2 the other URI | | * @param u2 the other URI | |
|
| * @return GNUNET_YES if the URIs are equal | | * @return #GNUNET_YES if the URIs are equal | |
| */ | | */ | |
| int | | int | |
| GNUNET_FS_uri_test_equal (const struct GNUNET_FS_Uri *u1, | | GNUNET_FS_uri_test_equal (const struct GNUNET_FS_Uri *u1, | |
| const struct GNUNET_FS_Uri *u2); | | const struct GNUNET_FS_Uri *u2); | |
| | | | |
| /** | | /** | |
| * Is this a namespace URI? | | * Is this a namespace URI? | |
| * | | * | |
| * @param uri the uri to check | | * @param uri the uri to check | |
|
| * @return GNUNET_YES if this is an SKS uri | | * @return #GNUNET_YES if this is an SKS uri | |
| */ | | */ | |
| int | | int | |
| GNUNET_FS_uri_test_sks (const struct GNUNET_FS_Uri *uri); | | GNUNET_FS_uri_test_sks (const struct GNUNET_FS_Uri *uri); | |
| | | | |
| /** | | /** | |
|
| * Handle to one of our namespaces. | | | |
| */ | | | |
| struct GNUNET_FS_Namespace; | | | |
| | | | |
| /** | | | |
| * Create an SKS URI from a namespace and an identifier. | | | |
| * | | | |
| * @param ns namespace | | | |
| * @param id identifier | | | |
| * @param emsg where to store an error message | | | |
| * @return an FS URI for the given namespace and identifier | | | |
| */ | | | |
| struct GNUNET_FS_Uri * | | | |
| GNUNET_FS_uri_sks_create (struct GNUNET_FS_Namespace *ns, const char *id, | | | |
| char **emsg); | | | |
| | | | |
| /** | | | |
| * Create an SKS URI from a namespace ID and an identifier. | | * Create an SKS URI from a namespace ID and an identifier. | |
| * | | * | |
|
| * @param nsid namespace ID | | * @param ns pseudonym to use | |
| * @param id identifier | | * @param id identifier | |
| * @return an FS URI for the given namespace and identifier | | * @return an FS URI for the given namespace and identifier | |
| */ | | */ | |
| struct GNUNET_FS_Uri * | | struct GNUNET_FS_Uri * | |
|
| GNUNET_FS_uri_sks_create_from_nsid (struct GNUNET_HashCode * nsid, const ch | | GNUNET_FS_uri_sks_create (const struct GNUNET_CRYPTO_EcdsaPublicKey *ns, | |
| ar *id); | | const char *id); | |
| | | | |
| /** | | /** | |
|
| * Get the ID of a namespace from the given | | * Get the public key of a namespace from the given | |
| * namespace URI. | | * namespace URI. | |
| * | | * | |
| * @param uri the uri to get the namespace ID from | | * @param uri the uri to get the namespace ID from | |
|
| * @param nsid where to store the ID of the namespace | | * @param pseudonym where to store the public key of the namespace | |
| * @return GNUNET_OK on success | | * @return #GNUNET_OK on success | |
| */ | | */ | |
| int | | int | |
| GNUNET_FS_uri_sks_get_namespace (const struct GNUNET_FS_Uri *uri, | | GNUNET_FS_uri_sks_get_namespace (const struct GNUNET_FS_Uri *uri, | |
|
| struct GNUNET_HashCode * nsid); | | struct GNUNET_CRYPTO_EcdsaPublicKey *pseud
onym); | |
| | | | |
| /** | | /** | |
| * Get the content identifier of an SKS URI. | | * Get the content identifier of an SKS URI. | |
| * | | * | |
| * @param uri the sks uri | | * @param uri the sks uri | |
| * @return NULL on error (not a valid SKS URI) | | * @return NULL on error (not a valid SKS URI) | |
| */ | | */ | |
| char * | | char * | |
| GNUNET_FS_uri_sks_get_content_id (const struct GNUNET_FS_Uri *uri); | | GNUNET_FS_uri_sks_get_content_id (const struct GNUNET_FS_Uri *uri); | |
| | | | |
| /** | | /** | |
|
| * Convert namespace URI to a human readable format | | | |
| * (using the namespace description, if available). | | | |
| * | | | |
| * @param cfg configuration to use | | | |
| * @param uri SKS uri to convert | | | |
| * @return NULL on error (not an SKS URI) | | | |
| */ | | | |
| char * | | | |
| GNUNET_FS_uri_sks_to_string_fancy (struct GNUNET_CONFIGURATION_Handle *cfg, | | | |
| const struct GNUNET_FS_Uri *uri); | | | |
| | | | |
| /** | | | |
| * Is this a keyword URI? | | * Is this a keyword URI? | |
| * | | * | |
| * @param uri the uri | | * @param uri the uri | |
|
| * @return GNUNET_YES if this is a KSK uri | | * @return #GNUNET_YES if this is a KSK uri | |
| */ | | */ | |
| int | | int | |
| GNUNET_FS_uri_test_ksk (const struct GNUNET_FS_Uri *uri); | | GNUNET_FS_uri_test_ksk (const struct GNUNET_FS_Uri *uri); | |
| | | | |
| /** | | /** | |
| * Is this a file (or directory) URI? | | * Is this a file (or directory) URI? | |
| * | | * | |
| * @param uri the uri to check | | * @param uri the uri to check | |
|
| * @return GNUNET_YES if this is a CHK uri | | * @return #GNUNET_YES if this is a CHK uri | |
| */ | | */ | |
| int | | int | |
| GNUNET_FS_uri_test_chk (const struct GNUNET_FS_Uri *uri); | | GNUNET_FS_uri_test_chk (const struct GNUNET_FS_Uri *uri); | |
| | | | |
| /** | | /** | |
| * What is the size of the file that this URI | | * What is the size of the file that this URI | |
| * refers to? | | * refers to? | |
| * | | * | |
| * @param uri the CHK (or LOC) URI to inspect | | * @param uri the CHK (or LOC) URI to inspect | |
| * @return size of the file as specified in the CHK URI | | * @return size of the file as specified in the CHK URI | |
| */ | | */ | |
| uint64_t | | uint64_t | |
| GNUNET_FS_uri_chk_get_file_size (const struct GNUNET_FS_Uri *uri); | | GNUNET_FS_uri_chk_get_file_size (const struct GNUNET_FS_Uri *uri); | |
| | | | |
| /** | | /** | |
| * Is this a location URI? | | * Is this a location URI? | |
| * | | * | |
| * @param uri the uri to check | | * @param uri the uri to check | |
|
| * @return GNUNET_YES if this is a LOC uri | | * @return #GNUNET_YES if this is a LOC uri | |
| */ | | */ | |
| int | | int | |
| GNUNET_FS_uri_test_loc (const struct GNUNET_FS_Uri *uri); | | GNUNET_FS_uri_test_loc (const struct GNUNET_FS_Uri *uri); | |
| | | | |
| /** | | /** | |
| * Construct a keyword-URI from meta-data (take all entries | | * Construct a keyword-URI from meta-data (take all entries | |
| * in the meta-data and construct one large keyword URI | | * in the meta-data and construct one large keyword URI | |
| * that lists all keywords that can be found in the meta-data). | | * that lists all keywords that can be found in the meta-data). | |
| * | | * | |
| * @param md metadata to use | | * @param md metadata to use | |
| | | | |
| skipping to change at line 426 | | skipping to change at line 401 | |
| /** | | /** | |
| * Command-line option parser function that allows the user | | * Command-line option parser function that allows the user | |
| * to specify one or more '-k' options with keywords. Each | | * to specify one or more '-k' options with keywords. Each | |
| * specified keyword will be added to the URI. A pointer to | | * specified keyword will be added to the URI. A pointer to | |
| * the URI must be passed as the "scls" argument. | | * the URI must be passed as the "scls" argument. | |
| * | | * | |
| * @param ctx command line processor context | | * @param ctx command line processor context | |
| * @param scls must be of type "struct GNUNET_FS_Uri **" | | * @param scls must be of type "struct GNUNET_FS_Uri **" | |
| * @param option name of the option (typically 'k') | | * @param option name of the option (typically 'k') | |
| * @param value command line argument given | | * @param value command line argument given | |
|
| * @return GNUNET_OK on success | | * @return #GNUNET_OK on success | |
| */ | | */ | |
| int | | int | |
| GNUNET_FS_getopt_set_keywords (struct GNUNET_GETOPT_CommandLineProcessorCon
text | | GNUNET_FS_getopt_set_keywords (struct GNUNET_GETOPT_CommandLineProcessorCon
text | |
| *ctx, void *scls, const char *option, | | *ctx, void *scls, const char *option, | |
| const char *value); | | const char *value); | |
| | | | |
| /** | | /** | |
| * Command-line option parser function that allows the user to specify | | * Command-line option parser function that allows the user to specify | |
| * one or more '-m' options with metadata. Each specified entry of | | * one or more '-m' options with metadata. Each specified entry of | |
| * the form "type=value" will be added to the metadata. A pointer to | | * the form "type=value" will be added to the metadata. A pointer to | |
| * the metadata must be passed as the "scls" argument. | | * the metadata must be passed as the "scls" argument. | |
| * | | * | |
| * @param ctx command line processor context | | * @param ctx command line processor context | |
|
| * @param scls must be of type "struct GNUNET_CONTAINER_MetaData **" | | * @param scls must be of type `struct GNUNET_CONTAINER_MetaData **` | |
| * @param option name of the option (typically 'k') | | * @param option name of the option (typically 'k') | |
| * @param value command line argument given | | * @param value command line argument given | |
|
| * @return GNUNET_OK on success | | * @return #GNUNET_OK on success | |
| */ | | */ | |
| int | | int | |
| GNUNET_FS_getopt_set_metadata (struct GNUNET_GETOPT_CommandLineProcessorCon
text | | GNUNET_FS_getopt_set_metadata (struct GNUNET_GETOPT_CommandLineProcessorCon
text | |
| *ctx, void *scls, const char *option, | | *ctx, void *scls, const char *option, | |
| const char *value); | | const char *value); | |
| | | | |
| /* ************************* sharing API ***************** */ | | /* ************************* sharing API ***************** */ | |
| | | | |
| /** | | /** | |
| * Possible status codes used in the callback for the | | * Possible status codes used in the callback for the | |
| | | | |
| skipping to change at line 677 | | skipping to change at line 652 | |
| /** | | /** | |
| * Notification that the unindexing of this file | | * Notification that the unindexing of this file | |
| * was completed. | | * was completed. | |
| */ | | */ | |
| GNUNET_FS_STATUS_UNINDEX_COMPLETED = 35, | | GNUNET_FS_STATUS_UNINDEX_COMPLETED = 35, | |
| | | | |
| /** | | /** | |
| * Notification that the unindexing of this file | | * Notification that the unindexing of this file | |
| * was stopped (final event for this action). | | * was stopped (final event for this action). | |
| */ | | */ | |
|
| GNUNET_FS_STATUS_UNINDEX_STOPPED = 36 | | GNUNET_FS_STATUS_UNINDEX_STOPPED = 36, | |
| | | | |
| | | /** | |
| | | * Notification that we are making progress sharing a directory. | |
| | | */ | |
| | | GNUNET_FS_STATUS_PUBLISH_PROGRESS_DIRECTORY = 37 | |
| | | | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Handle for controlling an upload. | | * Handle for controlling an upload. | |
| */ | | */ | |
| struct GNUNET_FS_PublishContext; | | struct GNUNET_FS_PublishContext; | |
| | | | |
| /** | | /** | |
| * Handle for controlling an unindexing operation. | | * Handle for controlling an unindexing operation. | |
| */ | | */ | |
| | | | |
| skipping to change at line 799 | | skipping to change at line 780 | |
| uint32_t anonymity; | | uint32_t anonymity; | |
| | | | |
| /** | | /** | |
| * Additional values for specific events. | | * Additional values for specific events. | |
| */ | | */ | |
| union | | union | |
| { | | { | |
| | | | |
| /** | | /** | |
| * These values are only valid for | | * These values are only valid for | |
|
| * GNUNET_FS_STATUS_PUBLISH_PROGRESS events. | | * #GNUNET_FS_STATUS_PUBLISH_PROGRESS events. | |
| */ | | */ | |
| struct | | struct | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Data block we just published. | | * Data block we just published. | |
| */ | | */ | |
| const void *data; | | const void *data; | |
| | | | |
| /** | | /** | |
| | | | |
| skipping to change at line 829 | | skipping to change at line 810 | |
| /** | | /** | |
| * Depth of the given block in the tree; | | * Depth of the given block in the tree; | |
| * 0 would be the lowest level (DBLOCKs). | | * 0 would be the lowest level (DBLOCKs). | |
| */ | | */ | |
| unsigned int depth; | | unsigned int depth; | |
| | | | |
| } progress; | | } progress; | |
| | | | |
| /** | | /** | |
| * These values are only valid for | | * These values are only valid for | |
|
| * GNUNET_FS_STATUS_PUBLISH_RESUME events. | | * #GNUNET_FS_STATUS_PUBLISH_PROGRESS_DIRECTORY events. | |
| | | */ | |
| | | struct | |
| | | { | |
| | | | |
| | | /** | |
| | | * How far are we along in the overall directory? | |
| | | */ | |
| | | uint64_t completed; | |
| | | | |
| | | /** | |
| | | * How big do we estimate the entire directory to be? | |
| | | */ | |
| | | uint64_t total; | |
| | | | |
| | | /** | |
| | | * At what time do we expect to finish the upload of the | |
| | | * CONTENTS of the directory. (The direcory itself will take | |
| | | * extra time, indicated with the "eta" member at the | |
| | | * "publish"-level of this struct.) | |
| | | */ | |
| | | struct GNUNET_TIME_Relative eta; | |
| | | | |
| | | } progress_directory; | |
| | | | |
| | | /** | |
| | | * These values are only valid for | |
| | | * #GNUNET_FS_STATUS_PUBLISH_RESUME events. | |
| */ | | */ | |
| struct | | struct | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Error message, NULL if no error was encountered so far. | | * Error message, NULL if no error was encountered so far. | |
| */ | | */ | |
| const char *message; | | const char *message; | |
| | | | |
| /** | | /** | |
| * URI of the file (if the download had been completed) | | * URI of the file (if the download had been completed) | |
| */ | | */ | |
| const struct GNUNET_FS_Uri *chk_uri; | | const struct GNUNET_FS_Uri *chk_uri; | |
| | | | |
| } resume; | | } resume; | |
| | | | |
| /** | | /** | |
| * These values are only valid for | | * These values are only valid for | |
|
| * GNUNET_FS_STATUS_PUBLISH_COMPLETED events. | | * #GNUNET_FS_STATUS_PUBLISH_COMPLETED events. | |
| */ | | */ | |
| struct | | struct | |
| { | | { | |
| | | | |
| /** | | /** | |
| * URI of the file. | | * URI of the file. | |
| */ | | */ | |
| const struct GNUNET_FS_Uri *chk_uri; | | const struct GNUNET_FS_Uri *chk_uri; | |
| | | | |
| } completed; | | } completed; | |
| | | | |
| /** | | /** | |
| * These values are only valid for | | * These values are only valid for | |
|
| * GNUNET_FS_STATUS_PUBLISH_ERROR events. | | * #GNUNET_FS_STATUS_PUBLISH_ERROR events. | |
| */ | | */ | |
| struct | | struct | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Error message, never NULL. | | * Error message, never NULL. | |
| */ | | */ | |
| const char *message; | | const char *message; | |
| | | | |
| } error; | | } error; | |
| | | | |
| skipping to change at line 962 | | skipping to change at line 970 | |
| int is_active; | | int is_active; | |
| | | | |
| /** | | /** | |
| * Additional values for specific events. | | * Additional values for specific events. | |
| */ | | */ | |
| union | | union | |
| { | | { | |
| | | | |
| /** | | /** | |
| * These values are only valid for | | * These values are only valid for | |
|
| * GNUNET_FS_STATUS_DOWNLOAD_PROGRESS events. | | * #GNUNET_FS_STATUS_DOWNLOAD_PROGRESS events. | |
| */ | | */ | |
| struct | | struct | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Data block we just obtained, can be NULL (even if | | * Data block we just obtained, can be NULL (even if | |
| * data_len > 0) if we found the entire block 'intact' on | | * data_len > 0) if we found the entire block 'intact' on | |
| * disk. In this case, it is also possible for 'data_len' | | * disk. In this case, it is also possible for 'data_len' | |
| * to be larger than an individual (32k) block. | | * to be larger than an individual (32k) block. | |
| */ | | */ | |
| | | | |
| skipping to change at line 987 | | skipping to change at line 995 | |
| */ | | */ | |
| uint64_t offset; | | uint64_t offset; | |
| | | | |
| /** | | /** | |
| * Length of the data block. | | * Length of the data block. | |
| */ | | */ | |
| uint64_t data_len; | | uint64_t data_len; | |
| | | | |
| /** | | /** | |
| * How much time passed between us asking for this block and | | * How much time passed between us asking for this block and | |
|
| * actually getting it? GNUNET_TIME_UNIT_FOREVER_REL if unknown. | | * actually getting it? #GNUNET_TIME_UNIT_FOREVER_REL if unknown. | |
| */ | | */ | |
| struct GNUNET_TIME_Relative block_download_duration; | | struct GNUNET_TIME_Relative block_download_duration; | |
| | | | |
| /** | | /** | |
| * Depth of the given block in the tree; | | * Depth of the given block in the tree; | |
| * 0 would be the lowest level (DBLOCKS). | | * 0 would be the lowest level (DBLOCKS). | |
| */ | | */ | |
| unsigned int depth; | | unsigned int depth; | |
| | | | |
| /** | | /** | |
| | | | |
| skipping to change at line 1017 | | skipping to change at line 1025 | |
| * because we might have the same request pending for multiple cli
ents, | | * because we might have the same request pending for multiple cli
ents, | |
| * and of course because a transmission may have failed at a lower | | * and of course because a transmission may have failed at a lower | |
| * layer). | | * layer). | |
| */ | | */ | |
| uint32_t num_transmissions; | | uint32_t num_transmissions; | |
| | | | |
| } progress; | | } progress; | |
| | | | |
| /** | | /** | |
| * These values are only valid for | | * These values are only valid for | |
|
| * GNUNET_FS_STATUS_DOWNLOAD_START events. | | * #GNUNET_FS_STATUS_DOWNLOAD_START events. | |
| */ | | */ | |
| struct | | struct | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Known metadata for the download. | | * Known metadata for the download. | |
| */ | | */ | |
| const struct GNUNET_CONTAINER_MetaData *meta; | | const struct GNUNET_CONTAINER_MetaData *meta; | |
| | | | |
| } start; | | } start; | |
| | | | |
| /** | | /** | |
| * These values are only valid for | | * These values are only valid for | |
|
| * GNUNET_FS_STATUS_DOWNLOAD_RESUME events. | | * #GNUNET_FS_STATUS_DOWNLOAD_RESUME events. | |
| */ | | */ | |
| struct | | struct | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Known metadata for the download. | | * Known metadata for the download. | |
| */ | | */ | |
| const struct GNUNET_CONTAINER_MetaData *meta; | | const struct GNUNET_CONTAINER_MetaData *meta; | |
| | | | |
| /** | | /** | |
| * Error message, NULL if we have not encountered any error yet. | | * Error message, NULL if we have not encountered any error yet. | |
| */ | | */ | |
| const char *message; | | const char *message; | |
| | | | |
| } resume; | | } resume; | |
| | | | |
| /** | | /** | |
| * These values are only valid for | | * These values are only valid for | |
|
| * GNUNET_FS_STATUS_DOWNLOAD_ERROR events. | | * #GNUNET_FS_STATUS_DOWNLOAD_ERROR events. | |
| */ | | */ | |
| struct | | struct | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Error message. | | * Error message. | |
| */ | | */ | |
| const char *message; | | const char *message; | |
| | | | |
| } error; | | } error; | |
| | | | |
| skipping to change at line 1124 | | skipping to change at line 1132 | |
| uint32_t anonymity; | | uint32_t anonymity; | |
| | | | |
| /** | | /** | |
| * Additional values for specific events. | | * Additional values for specific events. | |
| */ | | */ | |
| union | | union | |
| { | | { | |
| | | | |
| /** | | /** | |
| * These values are only valid for | | * These values are only valid for | |
|
| * GNUNET_FS_STATUS_SEARCH_RESULT events. | | * #GNUNET_FS_STATUS_SEARCH_RESULT events. | |
| */ | | */ | |
| struct | | struct | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Metadata for the search result. | | * Metadata for the search result. | |
| */ | | */ | |
| const struct GNUNET_CONTAINER_MetaData *meta; | | const struct GNUNET_CONTAINER_MetaData *meta; | |
| | | | |
| /** | | /** | |
| | | | |
| skipping to change at line 1154 | | skipping to change at line 1162 | |
| /** | | /** | |
| * Applicability rank (the larger, the better the result | | * Applicability rank (the larger, the better the result | |
| * fits the search criteria). | | * fits the search criteria). | |
| */ | | */ | |
| uint32_t applicability_rank; | | uint32_t applicability_rank; | |
| | | | |
| } result; | | } result; | |
| | | | |
| /** | | /** | |
| * These values are only valid for | | * These values are only valid for | |
|
| * GNUNET_FS_STATUS_SEARCH_RESUME_RESULT events. | | * #GNUNET_FS_STATUS_SEARCH_RESUME_RESULT events. | |
| */ | | */ | |
| struct | | struct | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Metadata for the search result. | | * Metadata for the search result. | |
| */ | | */ | |
| const struct GNUNET_CONTAINER_MetaData *meta; | | const struct GNUNET_CONTAINER_MetaData *meta; | |
| | | | |
| /** | | /** | |
| | | | |
| skipping to change at line 1197 | | skipping to change at line 1205 | |
| * Updated applicability rank (the larger, | | * Updated applicability rank (the larger, | |
| * the better the result fits the search | | * the better the result fits the search | |
| * criteria). | | * criteria). | |
| */ | | */ | |
| uint32_t applicability_rank; | | uint32_t applicability_rank; | |
| | | | |
| } resume_result; | | } resume_result; | |
| | | | |
| /** | | /** | |
| * These values are only valid for | | * These values are only valid for | |
|
| * GNUNET_FS_STATUS_SEARCH_UPDATE events. | | * #GNUNET_FS_STATUS_SEARCH_UPDATE events. | |
| */ | | */ | |
| struct | | struct | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Private context set for for this result | | * Private context set for for this result | |
| * during the "RESULT" event. | | * during the "RESULT" event. | |
| */ | | */ | |
| void *cctx; | | void *cctx; | |
| | | | |
| | | | |
| skipping to change at line 1246 | | skipping to change at line 1254 | |
| | | | |
| /** | | /** | |
| * How long has the current probe been active? | | * How long has the current probe been active? | |
| */ | | */ | |
| struct GNUNET_TIME_Relative current_probe_time; | | struct GNUNET_TIME_Relative current_probe_time; | |
| | | | |
| } update; | | } update; | |
| | | | |
| /** | | /** | |
| * These values are only valid for | | * These values are only valid for | |
|
| * GNUNET_FS_STATUS_SEARCH_RESULT_SUSPEND events. | | * #GNUNET_FS_STATUS_SEARCH_RESULT_SUSPEND events. | |
| * These events are automatically triggered for | | * These events are automatically triggered for | |
| * each search result before the | | * each search result before the | |
|
| * GNUNET_FS_STATUS_SEARCH_SUSPEND event. This | | * #GNUNET_FS_STATUS_SEARCH_SUSPEND event. This | |
| * happens primarily to give the client a chance | | * happens primarily to give the client a chance | |
| * to clean up the "cctx" (if needed). | | * to clean up the "cctx" (if needed). | |
| */ | | */ | |
| struct | | struct | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Private context set for for this result | | * Private context set for for this result | |
| * during the "RESULT" event. | | * during the "RESULT" event. | |
| */ | | */ | |
| | | | |
| skipping to change at line 1276 | | skipping to change at line 1284 | |
| | | | |
| /** | | /** | |
| * URI for the search result. | | * URI for the search result. | |
| */ | | */ | |
| const struct GNUNET_FS_Uri *uri; | | const struct GNUNET_FS_Uri *uri; | |
| | | | |
| } result_suspend; | | } result_suspend; | |
| | | | |
| /** | | /** | |
| * These values are only valid for | | * These values are only valid for | |
|
| * GNUNET_FS_STATUS_SEARCH_RESULT_STOPPED events. | | * #GNUNET_FS_STATUS_SEARCH_RESULT_STOPPED events. | |
| * These events are automatically triggered for | | * These events are automatically triggered for | |
| * each search result before the | | * each search result before the | |
|
| * GNUNET_FS_STATUS_SEARCH_STOPPED event. This | | * #GNUNET_FS_STATUS_SEARCH_STOPPED event. This | |
| * happens primarily to give the client a chance | | * happens primarily to give the client a chance | |
| * to clean up the "cctx" (if needed). | | * to clean up the "cctx" (if needed). | |
| */ | | */ | |
| struct | | struct | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Private context set for for this result | | * Private context set for for this result | |
| * during the "RESULT" event. | | * during the "RESULT" event. | |
| */ | | */ | |
| | | | |
| skipping to change at line 1306 | | skipping to change at line 1314 | |
| | | | |
| /** | | /** | |
| * URI for the search result. | | * URI for the search result. | |
| */ | | */ | |
| const struct GNUNET_FS_Uri *uri; | | const struct GNUNET_FS_Uri *uri; | |
| | | | |
| } result_stopped; | | } result_stopped; | |
| | | | |
| /** | | /** | |
| * These values are only valid for | | * These values are only valid for | |
|
| * GNUNET_FS_STATUS_SEARCH_RESUME events. | | * #GNUNET_FS_STATUS_SEARCH_RESUME events. | |
| */ | | */ | |
| struct | | struct | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Error message, NULL if we have not encountered any error yet. | | * Error message, NULL if we have not encountered any error yet. | |
| */ | | */ | |
| const char *message; | | const char *message; | |
| | | | |
| /** | | /** | |
| * Is this search currently paused? | | * Is this search currently paused? | |
| */ | | */ | |
| int is_paused; | | int is_paused; | |
| | | | |
| } resume; | | } resume; | |
| | | | |
| /** | | /** | |
| * These values are only valid for | | * These values are only valid for | |
|
| * GNUNET_FS_STATUS_SEARCH_ERROR events. | | * #GNUNET_FS_STATUS_SEARCH_ERROR events. | |
| */ | | */ | |
| struct | | struct | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Error message. | | * Error message. | |
| */ | | */ | |
| const char *message; | | const char *message; | |
| | | | |
| } error; | | } error; | |
| | | | |
| /** | | /** | |
|
| * Values for all "GNUNET_FS_STATUS_SEARCH_RESULT_NAMESPACE" events. | | * Values for #GNUNET_FS_STATUS_SEARCH_RESULT_NAMESPACE events. | |
| */ | | */ | |
| struct | | struct | |
| { | | { | |
| | | | |
| /** | | /** | |
|
| * Handle to the namespace (NULL if it is not a local | | | |
| * namespace). | | | |
| */ | | | |
| struct GNUNET_FS_Namespace *ns; | | | |
| | | | |
| /** | | | |
| * Short, human-readable name of the namespace. | | * Short, human-readable name of the namespace. | |
| */ | | */ | |
| const char *name; | | const char *name; | |
| | | | |
| /** | | /** | |
| * Root identifier for the namespace, can be NULL. | | * Root identifier for the namespace, can be NULL. | |
| */ | | */ | |
| const char *root; | | const char *root; | |
| | | | |
| /** | | /** | |
| * Metadata for the namespace. | | * Metadata for the namespace. | |
| */ | | */ | |
| const struct GNUNET_CONTAINER_MetaData *meta; | | const struct GNUNET_CONTAINER_MetaData *meta; | |
| | | | |
| /** | | /** | |
|
| * Hash-identifier for the namespace. | | * Public key of the namespace. | |
| */ | | */ | |
|
| struct GNUNET_HashCode id; | | struct GNUNET_CRYPTO_EcdsaPublicKey pseudonym; | |
| | | | |
| } ns; | | } ns; | |
| | | | |
| } specifics; | | } specifics; | |
| | | | |
| } search; | | } search; | |
| | | | |
| /** | | /** | |
| * Values for all "GNUNET_FS_STATUS_UNINDEX_*" events. | | * Values for all "GNUNET_FS_STATUS_UNINDEX_*" events. | |
| */ | | */ | |
| | | | |
| skipping to change at line 1429 | | skipping to change at line 1431 | |
| uint64_t completed; | | uint64_t completed; | |
| | | | |
| /** | | /** | |
| * Additional values for specific events. | | * Additional values for specific events. | |
| */ | | */ | |
| union | | union | |
| { | | { | |
| | | | |
| /** | | /** | |
| * These values are only valid for | | * These values are only valid for | |
|
| * GNUNET_FS_STATUS_UNINDEX_PROGRESS events. | | * #GNUNET_FS_STATUS_UNINDEX_PROGRESS events. | |
| */ | | */ | |
| struct | | struct | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Data block we just unindexed. | | * Data block we just unindexed. | |
| */ | | */ | |
| const void *data; | | const void *data; | |
| | | | |
| /** | | /** | |
| | | | |
| skipping to change at line 1459 | | skipping to change at line 1461 | |
| /** | | /** | |
| * Depth of the given block in the tree; | | * Depth of the given block in the tree; | |
| * 0 would be the lowest level (DBLOCKS). | | * 0 would be the lowest level (DBLOCKS). | |
| */ | | */ | |
| unsigned int depth; | | unsigned int depth; | |
| | | | |
| } progress; | | } progress; | |
| | | | |
| /** | | /** | |
| * These values are only valid for | | * These values are only valid for | |
|
| * GNUNET_FS_STATUS_UNINDEX_RESUME events. | | * #GNUNET_FS_STATUS_UNINDEX_RESUME events. | |
| */ | | */ | |
| struct | | struct | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Error message, NULL if we have not encountered any error yet. | | * Error message, NULL if we have not encountered any error yet. | |
| */ | | */ | |
| const char *message; | | const char *message; | |
| | | | |
| } resume; | | } resume; | |
| | | | |
| /** | | /** | |
| * These values are only valid for | | * These values are only valid for | |
|
| * GNUNET_FS_STATUS_UNINDEX_ERROR events. | | * #GNUNET_FS_STATUS_UNINDEX_ERROR events. | |
| */ | | */ | |
| struct | | struct | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Error message. | | * Error message. | |
| */ | | */ | |
| const char *message; | | const char *message; | |
| | | | |
| } error; | | } error; | |
| | | | |
| skipping to change at line 1496 | | skipping to change at line 1498 | |
| | | | |
| } unindex; | | } unindex; | |
| | | | |
| } value; | | } value; | |
| | | | |
| /** | | /** | |
| * Specific status code (determines the event type). | | * Specific status code (determines the event type). | |
| */ | | */ | |
| enum GNUNET_FS_Status status; | | enum GNUNET_FS_Status status; | |
| | | | |
|
| | | /** | |
| | | * File-sharing handle that generated the event. | |
| | | */ | |
| | | struct GNUNET_FS_Handle *fsh; | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Notification of FS to a client about the progress of an | | * Notification of FS to a client about the progress of an | |
| * operation. Callbacks of this type will be used for uploads, | | * operation. Callbacks of this type will be used for uploads, | |
| * downloads and searches. Some of the arguments depend a bit | | * downloads and searches. Some of the arguments depend a bit | |
| * in their meaning on the context in which the callback is used. | | * in their meaning on the context in which the callback is used. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param info details about the event, specifying the event type | | * @param info details about the event, specifying the event type | |
| * and various bits about the event | | * and various bits about the event | |
| * @return client-context (for the next progress call | | * @return client-context (for the next progress call | |
| * for this operation; should be set to NULL for | | * for this operation; should be set to NULL for | |
| * SUSPEND and STOPPED events). The value returned | | * SUSPEND and STOPPED events). The value returned | |
| * will be passed to future callbacks in the respective | | * will be passed to future callbacks in the respective | |
|
| * field in the GNUNET_FS_ProgressInfo struct. | | * field in the `struct GNUNET_FS_ProgressInfo`. | |
| */ | | */ | |
| typedef void *(*GNUNET_FS_ProgressCallback) (void *cls, | | typedef void *(*GNUNET_FS_ProgressCallback) (void *cls, | |
| const struct GNUNET_FS_Progres
sInfo *info); | | const struct GNUNET_FS_Progres
sInfo *info); | |
| | | | |
| /** | | /** | |
| * General (global) option flags for file-sharing. | | * General (global) option flags for file-sharing. | |
| */ | | */ | |
| enum GNUNET_FS_Flags | | enum GNUNET_FS_Flags | |
| { | | { | |
|
| /** | | /** | |
| * No special flags set. | | * No special flags set. | |
| */ | | */ | |
| GNUNET_FS_FLAGS_NONE = 0, | | GNUNET_FS_FLAGS_NONE = 0, | |
| | | | |
|
| /** | | /** | |
| * Is persistence of operations desired? | | * Is persistence of operations desired? | |
| * (will create SUSPEND/RESUME events). | | * (will create SUSPEND/RESUME events). | |
| */ | | */ | |
| GNUNET_FS_FLAGS_PERSISTENCE = 1, | | GNUNET_FS_FLAGS_PERSISTENCE = 1, | |
| | | | |
|
| /** | | /** | |
| * Should we automatically trigger probes for search results | | * Should we automatically trigger probes for search results | |
| * to determine availability? | | * to determine availability? | |
| * (will create GNUNET_FS_STATUS_SEARCH_UPDATE events). | | * (will create #GNUNET_FS_STATUS_SEARCH_UPDATE events). | |
| */ | | */ | |
| GNUNET_FS_FLAGS_DO_PROBES = 2 | | GNUNET_FS_FLAGS_DO_PROBES = 2 | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Options specified in the VARARGs portion of GNUNET_FS_start. | | * Options specified in the VARARGs portion of GNUNET_FS_start. | |
| */ | | */ | |
| enum GNUNET_FS_OPTIONS | | enum GNUNET_FS_OPTIONS | |
| { | | { | |
| | | | |
| /** | | /** | |
| | | | |
| skipping to change at line 1612 | | skipping to change at line 1618 | |
| * Naturally, there is no guarantee that the other peers will keep | | * Naturally, there is no guarantee that the other peers will keep | |
| * these blocks for any period of time (since they won't have any | | * these blocks for any period of time (since they won't have any | |
| * priority or might be too busy to even store the block in the | | * priority or might be too busy to even store the block in the | |
| * first place). | | * first place). | |
| */ | | */ | |
| uint32_t replication_level; | | uint32_t replication_level; | |
| | | | |
| }; | | }; | |
| | | | |
| /** | | /** | |
|
| * Return the current year (i.e. '2011'). | | | |
| */ | | | |
| unsigned int | | | |
| GNUNET_FS_get_current_year (void); | | | |
| | | | |
| /** | | | |
| * Convert a year to an expiration time of January 1st of that year. | | | |
| * | | | |
| * @param year a year (after 1970, please ;-)). | | | |
| * @return absolute time for January 1st of that year. | | | |
| */ | | | |
| struct GNUNET_TIME_Absolute | | | |
| GNUNET_FS_year_to_time (unsigned int year); | | | |
| | | | |
| /** | | | |
| * Convert an expiration time to the respective year (rounds) | | | |
| * | | | |
| * @param at absolute time | | | |
| * @return year a year (after 1970), 0 on error | | | |
| */ | | | |
| unsigned int | | | |
| GNUNET_FS_time_to_year (struct GNUNET_TIME_Absolute at); | | | |
| | | | |
| /** | | | |
| * Handle to the file-sharing service. | | * Handle to the file-sharing service. | |
| */ | | */ | |
| struct GNUNET_FS_Handle; | | struct GNUNET_FS_Handle; | |
| | | | |
| /** | | /** | |
| * Setup a connection to the file-sharing service. | | * Setup a connection to the file-sharing service. | |
| * | | * | |
| * @param cfg configuration to use | | * @param cfg configuration to use | |
| * @param client_name unique identifier for this client | | * @param client_name unique identifier for this client | |
| * @param upcb function to call to notify about FS actions | | * @param upcb function to call to notify about FS actions | |
|
| * @param upcb_cls closure for upcb | | * @param upcb_cls closure for @a upcb | |
| * @param flags specific attributes for fs-operations | | * @param flags specific attributes for fs-operations | |
|
| * @param ... list of optional options, terminated with GNUNET_FS_OPTIONS_E
ND | | * @param ... list of optional options, terminated with #GNUNET_FS_OPTIONS_
END | |
| * @return NULL on error | | * @return NULL on error | |
| */ | | */ | |
| struct GNUNET_FS_Handle * | | struct GNUNET_FS_Handle * | |
| GNUNET_FS_start (const struct GNUNET_CONFIGURATION_Handle *cfg, | | GNUNET_FS_start (const struct GNUNET_CONFIGURATION_Handle *cfg, | |
| const char *client_name, GNUNET_FS_ProgressCallback upcb, | | const char *client_name, GNUNET_FS_ProgressCallback upcb, | |
| void *upcb_cls, enum GNUNET_FS_Flags flags, ...); | | void *upcb_cls, enum GNUNET_FS_Flags flags, ...); | |
| | | | |
| /** | | /** | |
| * Close our connection with the file-sharing service. | | * Close our connection with the file-sharing service. | |
| * The callback given to GNUNET_FS_start will no longer be | | * The callback given to GNUNET_FS_start will no longer be | |
| * called after this function returns. | | * called after this function returns. | |
| * | | * | |
| * @param h handle that was returned from GNUNET_FS_start | | * @param h handle that was returned from GNUNET_FS_start | |
| */ | | */ | |
| void | | void | |
| GNUNET_FS_stop (struct GNUNET_FS_Handle *h); | | GNUNET_FS_stop (struct GNUNET_FS_Handle *h); | |
| | | | |
| /** | | /** | |
|
| * Function called on entries in a GNUNET_FS_FileInformation publish-struct
ure. | | * Function called on entries in a `struct GNUNET_FS_FileInformation` itera
tion. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param fi the entry in the publish-structure | | * @param fi the entry in the publish-structure | |
| * @param length length of the file or directory | | * @param length length of the file or directory | |
| * @param meta metadata for the file or directory (can be modified) | | * @param meta metadata for the file or directory (can be modified) | |
| * @param uri pointer to the keywords that will be used for this entry (can
be modified) | | * @param uri pointer to the keywords that will be used for this entry (can
be modified) | |
| * @param bo block options (can be modified) | | * @param bo block options (can be modified) | |
| * @param do_index should we index (can be modified) | | * @param do_index should we index (can be modified) | |
| * @param client_info pointer to client context set upon creation (can be m
odified) | | * @param client_info pointer to client context set upon creation (can be m
odified) | |
|
| * @return GNUNET_OK to continue, GNUNET_NO to remove | | * @return #GNUNET_OK to continue, #GNUNET_NO to remove | |
| * this entry from the directory, GNUNET_SYSERR | | * this entry from the directory, #GNUNET_SYSERR | |
| * to abort the iteration | | * to abort the iteration | |
| */ | | */ | |
| typedef int (*GNUNET_FS_FileInformationProcessor) (void *cls, | | typedef int (*GNUNET_FS_FileInformationProcessor) (void *cls, | |
| struct | | struct | |
| GNUNET_FS_FileInformatio
n * | | GNUNET_FS_FileInformatio
n * | |
| fi, uint64_t length, | | fi, uint64_t length, | |
| struct | | struct | |
| GNUNET_CONTAINER_MetaDat
a * | | GNUNET_CONTAINER_MetaDat
a * | |
| meta, | | meta, | |
| struct GNUNET_FS_Uri **
uri, | | struct GNUNET_FS_Uri **
uri, | |
| struct GNUNET_FS_BlockOp
tions | | struct GNUNET_FS_BlockOp
tions | |
| * bo, int *do_index, | | * bo, int *do_index, | |
| void **client_info); | | void **client_info); | |
| | | | |
| /** | | /** | |
| * Obtain the name under which this file information | | * Obtain the name under which this file information | |
| * structure is stored on disk. Only works for top-level | | * structure is stored on disk. Only works for top-level | |
| * file information structures. | | * file information structures. | |
| * | | * | |
| * @param s structure to get the filename for | | * @param s structure to get the filename for | |
|
| * @return NULL on error, otherwise filename that | | * @return NULL on error, otherwise filename that can be used | |
| * can be passed to "GNUNET_FS_file_information_recover" | | | |
| * to read this fi-struct from disk. | | * to read this fi-struct from disk. | |
| */ | | */ | |
| const char * | | const char * | |
| GNUNET_FS_file_information_get_id (struct GNUNET_FS_FileInformation *s); | | GNUNET_FS_file_information_get_id (struct GNUNET_FS_FileInformation *s); | |
| | | | |
| /** | | /** | |
| * Obtain the filename from the file information structure. | | * Obtain the filename from the file information structure. | |
| * | | * | |
| * @param s structure to get the filename for | | * @param s structure to get the filename for | |
| * @return "filename" field of the structure (can be NULL) | | * @return "filename" field of the structure (can be NULL) | |
| | | | |
| skipping to change at line 1736 | | skipping to change at line 1717 | |
| | | | |
| /** | | /** | |
| * Create an entry for a file in a publish-structure. | | * Create an entry for a file in a publish-structure. | |
| * | | * | |
| * @param h handle to the file sharing subsystem | | * @param h handle to the file sharing subsystem | |
| * @param client_info initial client-info value for this entry | | * @param client_info initial client-info value for this entry | |
| * @param filename name of the file or directory to publish | | * @param filename name of the file or directory to publish | |
| * @param keywords under which keywords should this file be available | | * @param keywords under which keywords should this file be available | |
| * directly; can be NULL | | * directly; can be NULL | |
| * @param meta metadata for the file | | * @param meta metadata for the file | |
|
| * @param do_index GNUNET_YES for index, GNUNET_NO for insertion, | | * @param do_index #GNUNET_YES for index, #GNUNET_NO for insertion, | |
| * GNUNET_SYSERR for simulation | | * #GNUNET_SYSERR for simulation | |
| * @param bo block options | | * @param bo block options | |
| * @return publish structure entry for the file | | * @return publish structure entry for the file | |
| */ | | */ | |
| struct GNUNET_FS_FileInformation * | | struct GNUNET_FS_FileInformation * | |
| GNUNET_FS_file_information_create_from_file (struct GNUNET_FS_Handle *h, | | GNUNET_FS_file_information_create_from_file (struct GNUNET_FS_Handle *h, | |
| void *client_info, | | void *client_info, | |
| const char *filename, | | const char *filename, | |
| const struct GNUNET_FS_Uri | | const struct GNUNET_FS_Uri | |
| *keywords, | | *keywords, | |
| const struct | | const struct | |
| | | | |
| skipping to change at line 1764 | | skipping to change at line 1745 | |
| * Create an entry for a file in a publish-structure. | | * Create an entry for a file in a publish-structure. | |
| * | | * | |
| * @param h handle to the file sharing subsystem | | * @param h handle to the file sharing subsystem | |
| * @param client_info initial client-info value for this entry | | * @param client_info initial client-info value for this entry | |
| * @param length length of the file | | * @param length length of the file | |
| * @param data data for the file (should not be used afterwards by | | * @param data data for the file (should not be used afterwards by | |
| * the caller; callee will "free") | | * the caller; callee will "free") | |
| * @param keywords under which keywords should this file be available | | * @param keywords under which keywords should this file be available | |
| * directly; can be NULL | | * directly; can be NULL | |
| * @param meta metadata for the file | | * @param meta metadata for the file | |
|
| * @param do_index GNUNET_YES for index, GNUNET_NO for insertion, | | * @param do_index #GNUNET_YES for index, #GNUNET_NO for insertion, | |
| * GNUNET_SYSERR for simulation | | * #GNUNET_SYSERR for simulation | |
| * @param bo block options | | * @param bo block options | |
| * @return publish structure entry for the file | | * @return publish structure entry for the file | |
| */ | | */ | |
| struct GNUNET_FS_FileInformation * | | struct GNUNET_FS_FileInformation * | |
| GNUNET_FS_file_information_create_from_data (struct GNUNET_FS_Handle *h, | | GNUNET_FS_file_information_create_from_data (struct GNUNET_FS_Handle *h, | |
| void *client_info, uint64_t le
ngth, | | void *client_info, uint64_t le
ngth, | |
| void *data, | | void *data, | |
| const struct GNUNET_FS_Uri | | const struct GNUNET_FS_Uri | |
| *keywords, | | *keywords, | |
| const struct | | const struct | |
| | | | |
| skipping to change at line 1799 | | skipping to change at line 1780 | |
| * (used to close the file descriptor but NOT fully | | * (used to close the file descriptor but NOT fully | |
| * clean up the reader's state); in this case, | | * clean up the reader's state); in this case, | |
| * a value of '0' for max should be ignored | | * a value of '0' for max should be ignored | |
| * @param max maximum number of bytes that should be | | * @param max maximum number of bytes that should be | |
| * copied to buf; readers are not allowed | | * copied to buf; readers are not allowed | |
| * to provide less data unless there is an error; | | * to provide less data unless there is an error; | |
| * a value of "0" will be used at the end to allow | | * a value of "0" will be used at the end to allow | |
| * the reader to clean up its internal state | | * the reader to clean up its internal state | |
| * @param buf where the reader should write the data | | * @param buf where the reader should write the data | |
| * @param emsg location for the reader to store an error message | | * @param emsg location for the reader to store an error message | |
|
| * @return number of bytes written, usually "max", 0 on error | | * @return number of bytes written, usually @a max, 0 on error | |
| */ | | */ | |
| typedef size_t (*GNUNET_FS_DataReader) (void *cls, uint64_t offset, size_t
max, | | typedef size_t (*GNUNET_FS_DataReader) (void *cls, uint64_t offset, size_t
max, | |
| void *buf, char **emsg); | | void *buf, char **emsg); | |
| | | | |
| /** | | /** | |
| * Create an entry for a file in a publish-structure. | | * Create an entry for a file in a publish-structure. | |
| * | | * | |
| * @param h handle to the file sharing subsystem | | * @param h handle to the file sharing subsystem | |
| * @param client_info initial client-info value for this entry | | * @param client_info initial client-info value for this entry | |
| * @param length length of the file | | * @param length length of the file | |
| * @param reader function that can be used to obtain the data for the file | | * @param reader function that can be used to obtain the data for the file | |
|
| * @param reader_cls closure for "reader" | | * @param reader_cls closure for @a reader | |
| * @param keywords under which keywords should this file be available | | * @param keywords under which keywords should this file be available | |
| * directly; can be NULL | | * directly; can be NULL | |
| * @param meta metadata for the file | | * @param meta metadata for the file | |
|
| * @param do_index GNUNET_YES for index, GNUNET_NO for insertion, | | * @param do_index #GNUNET_YES for index, #GNUNET_NO for insertion, | |
| * GNUNET_SYSERR for simulation | | * #GNUNET_SYSERR for simulation | |
| * @param bo block options | | * @param bo block options | |
| * @return publish structure entry for the file | | * @return publish structure entry for the file | |
| */ | | */ | |
| struct GNUNET_FS_FileInformation * | | struct GNUNET_FS_FileInformation * | |
| GNUNET_FS_file_information_create_from_reader (struct GNUNET_FS_Handle *h, | | GNUNET_FS_file_information_create_from_reader (struct GNUNET_FS_Handle *h, | |
| void *client_info, | | void *client_info, | |
| uint64_t length, | | uint64_t length, | |
| GNUNET_FS_DataReader reader, | | GNUNET_FS_DataReader reader, | |
| void *reader_cls, | | void *reader_cls, | |
| const struct GNUNET_FS_Uri | | const struct GNUNET_FS_Uri | |
| *keywords, | | *keywords, | |
| const struct | | const struct | |
| GNUNET_CONTAINER_MetaData *m
eta, | | GNUNET_CONTAINER_MetaData *m
eta, | |
| int do_index, | | int do_index, | |
| const struct | | const struct | |
| GNUNET_FS_BlockOptions *bo); | | GNUNET_FS_BlockOptions *bo); | |
| | | | |
| /** | | /** | |
| * Create an entry for an empty directory in a publish-structure. | | * Create an entry for an empty directory in a publish-structure. | |
|
| * This function should be used by applications for which the | | | |
| * use of "GNUNET_FS_file_information_create_from_directory" | | | |
| * is not appropriate. | | | |
| * | | * | |
| * @param h handle to the file sharing subsystem | | * @param h handle to the file sharing subsystem | |
| * @param client_info initial client-info value for this entry | | * @param client_info initial client-info value for this entry | |
| * @param keywords under which keywords should this directory be available | | * @param keywords under which keywords should this directory be available | |
| * directly; can be NULL | | * directly; can be NULL | |
| * @param meta metadata for the directory | | * @param meta metadata for the directory | |
| * @param bo block options | | * @param bo block options | |
| * @param filename name of the directory; can be NULL | | * @param filename name of the directory; can be NULL | |
| * @return publish structure entry for the directory , NULL on error | | * @return publish structure entry for the directory , NULL on error | |
| */ | | */ | |
| | | | |
| skipping to change at line 1865 | | skipping to change at line 1843 | |
| GNUNET_CONTAINER_MetaDat
a | | GNUNET_CONTAINER_MetaDat
a | |
| *meta, | | *meta, | |
| const struct | | const struct | |
| GNUNET_FS_BlockOptions *
bo, | | GNUNET_FS_BlockOptions *
bo, | |
| const char *filename); | | const char *filename); | |
| | | | |
| /** | | /** | |
| * Test if a given entry represents a directory. | | * Test if a given entry represents a directory. | |
| * | | * | |
| * @param ent check if this FI represents a directory | | * @param ent check if this FI represents a directory | |
|
| * @return GNUNET_YES if so, GNUNET_NO if not | | * @return #GNUNET_YES if so, #GNUNET_NO if not | |
| */ | | */ | |
| int | | int | |
| GNUNET_FS_file_information_is_directory (const struct GNUNET_FS_FileInforma
tion | | GNUNET_FS_file_information_is_directory (const struct GNUNET_FS_FileInforma
tion | |
| *ent); | | *ent); | |
| | | | |
| /** | | /** | |
| * Add an entry to a directory in a publish-structure. Clients | | * Add an entry to a directory in a publish-structure. Clients | |
| * should never modify publish structures that were passed to | | * should never modify publish structures that were passed to | |
|
| * "GNUNET_FS_publish_start" already. | | * #GNUNET_FS_publish_start already. | |
| * | | * | |
| * @param dir the directory | | * @param dir the directory | |
| * @param ent the entry to add; the entry must not have been | | * @param ent the entry to add; the entry must not have been | |
| * added to any other directory at this point and | | * added to any other directory at this point and | |
|
| * must not include "dir" in its structure | | * must not include @a dir in its structure | |
| * @return GNUNET_OK on success, GNUNET_SYSERR on error | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
| GNUNET_FS_file_information_add (struct GNUNET_FS_FileInformation *dir, | | GNUNET_FS_file_information_add (struct GNUNET_FS_FileInformation *dir, | |
| struct GNUNET_FS_FileInformation *ent); | | struct GNUNET_FS_FileInformation *ent); | |
| | | | |
| /** | | /** | |
| * Inspect a file or directory in a publish-structure. Clients | | * Inspect a file or directory in a publish-structure. Clients | |
| * should never modify publish structures that were passed to | | * should never modify publish structures that were passed to | |
|
| * "GNUNET_FS_publish_start" already. When called on a directory, | | * #GNUNET_FS_publish_start already. When called on a directory, | |
| * this function will FIRST call "proc" with information about | | * this function will FIRST call @a proc with information about | |
| * the directory itself and then for each of the files in the | | * the directory itself and then for each of the files in the | |
| * directory (but not for files in subdirectories). When called | | * directory (but not for files in subdirectories). When called | |
|
| * on a file, "proc" will be called exactly once (with information | | * on a file, @a proc will be called exactly once (with information | |
| * about the specific file). | | * about the specific file). | |
| * | | * | |
| * @param dir the directory | | * @param dir the directory | |
| * @param proc function to call on each entry | | * @param proc function to call on each entry | |
|
| * @param proc_cls closure for proc | | * @param proc_cls closure for @a proc | |
| */ | | */ | |
| void | | void | |
| GNUNET_FS_file_information_inspect (struct GNUNET_FS_FileInformation *dir, | | GNUNET_FS_file_information_inspect (struct GNUNET_FS_FileInformation *dir, | |
| GNUNET_FS_FileInformationProcessor proc
, | | GNUNET_FS_FileInformationProcessor proc
, | |
| void *proc_cls); | | void *proc_cls); | |
| | | | |
| /** | | /** | |
| * Destroy publish-structure. Clients should never destroy publish | | * Destroy publish-structure. Clients should never destroy publish | |
|
| * structures that were passed to "GNUNET_FS_publish_start" already. | | * structures that were passed to #GNUNET_FS_publish_start already. | |
| * | | * | |
| * @param fi structure to destroy | | * @param fi structure to destroy | |
| * @param cleaner function to call on each entry in the structure | | * @param cleaner function to call on each entry in the structure | |
| * (useful to clean up client_info); can be NULL; return | | * (useful to clean up client_info); can be NULL; return | |
| * values are ignored | | * values are ignored | |
|
| * @param cleaner_cls closure for cleaner | | * @param cleaner_cls closure for @a cleaner | |
| */ | | */ | |
| void | | void | |
| GNUNET_FS_file_information_destroy (struct GNUNET_FS_FileInformation *fi, | | GNUNET_FS_file_information_destroy (struct GNUNET_FS_FileInformation *fi, | |
| GNUNET_FS_FileInformationProcessor clea
ner, | | GNUNET_FS_FileInformationProcessor clea
ner, | |
| void *cleaner_cls); | | void *cleaner_cls); | |
| | | | |
| /** | | /** | |
| * Options for publishing. Compatible options | | * Options for publishing. Compatible options | |
| * can be OR'ed together. | | * can be OR'ed together. | |
| */ | | */ | |
| enum GNUNET_FS_PublishOptions | | enum GNUNET_FS_PublishOptions | |
| { | | { | |
|
| /** | | /** | |
| * No options (use defaults for everything). | | * No options (use defaults for everything). | |
| */ | | */ | |
| GNUNET_FS_PUBLISH_OPTION_NONE = 0, | | GNUNET_FS_PUBLISH_OPTION_NONE = 0, | |
| | | | |
|
| /** | | /** | |
| * Simulate publishing. With this option, no data will be stored | | * Simulate publishing. With this option, no data will be stored | |
| * in the datastore. Useful for computing URIs from files. | | * in the datastore. Useful for computing URIs from files. | |
| */ | | */ | |
| GNUNET_FS_PUBLISH_OPTION_SIMULATE_ONLY = 1 | | GNUNET_FS_PUBLISH_OPTION_SIMULATE_ONLY = 1 | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Publish a file or directory. | | * Publish a file or directory. | |
| * | | * | |
| * @param h handle to the file sharing subsystem | | * @param h handle to the file sharing subsystem | |
| * @param fi information about the file or directory structure to publish | | * @param fi information about the file or directory structure to publish | |
| * @param ns namespace to publish the file in, NULL for no namespace | | * @param ns namespace to publish the file in, NULL for no namespace | |
| * @param nid identifier to use for the publishd content in the namespace | | * @param nid identifier to use for the publishd content in the namespace | |
| * (can be NULL, must be NULL if namespace is NULL) | | * (can be NULL, must be NULL if namespace is NULL) | |
| * @param nuid update-identifier that will be used for future updates | | * @param nuid update-identifier that will be used for future updates | |
| * (can be NULL, must be NULL if namespace or nid is NULL) | | * (can be NULL, must be NULL if namespace or nid is NULL) | |
| * @param options options for the publication | | * @param options options for the publication | |
| * @return context that can be used to control the publish operation | | * @return context that can be used to control the publish operation | |
| */ | | */ | |
| struct GNUNET_FS_PublishContext * | | struct GNUNET_FS_PublishContext * | |
| GNUNET_FS_publish_start (struct GNUNET_FS_Handle *h, | | GNUNET_FS_publish_start (struct GNUNET_FS_Handle *h, | |
| struct GNUNET_FS_FileInformation *fi, | | struct GNUNET_FS_FileInformation *fi, | |
|
| struct GNUNET_FS_Namespace *ns, const char *nid, | | const struct GNUNET_CRYPTO_EcdsaPrivateKey *ns, | |
| | | const char *nid, | |
| const char *nuid, | | const char *nuid, | |
| enum GNUNET_FS_PublishOptions options); | | enum GNUNET_FS_PublishOptions options); | |
| | | | |
| /** | | /** | |
| * Stop a publication. Will abort incomplete publications (but | | * Stop a publication. Will abort incomplete publications (but | |
| * not remove blocks that have already been published) or | | * not remove blocks that have already been published) or | |
| * simply clean up the state for completed publications. | | * simply clean up the state for completed publications. | |
| * Must NOT be called from within the event callback! | | * Must NOT be called from within the event callback! | |
| * | | * | |
| * @param pc context for the publication to stop | | * @param pc context for the publication to stop | |
| | | | |
| skipping to change at line 1978 | | skipping to change at line 1957 | |
| | | | |
| /** | | /** | |
| * Signature of a function called as the continuation of a KBlock or | | * Signature of a function called as the continuation of a KBlock or | |
| * SBlock publication. | | * SBlock publication. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param uri URI under which the block is now available, NULL on error | | * @param uri URI under which the block is now available, NULL on error | |
| * @param emsg error message, NULL on success | | * @param emsg error message, NULL on success | |
| */ | | */ | |
| typedef void (*GNUNET_FS_PublishContinuation) (void *cls, | | typedef void (*GNUNET_FS_PublishContinuation) (void *cls, | |
|
| const struct GNUNET_FS_Uri *
uri, | | const struct GNUNET_FS_Uri *
uri, | |
| const char *emsg); | | const char *emsg); | |
| | | | |
| /** | | /** | |
| * Handle to cancel publish KSK operation. | | * Handle to cancel publish KSK operation. | |
| */ | | */ | |
| struct GNUNET_FS_PublishKskContext; | | struct GNUNET_FS_PublishKskContext; | |
| | | | |
| /** | | /** | |
| * Publish a KBlock on GNUnet. | | * Publish a KBlock on GNUnet. | |
| * | | * | |
| * @param h handle to the file sharing subsystem | | * @param h handle to the file sharing subsystem | |
| * @param ksk_uri keywords to use | | * @param ksk_uri keywords to use | |
| * @param meta metadata to use | | * @param meta metadata to use | |
| * @param uri URI to refer to in the KBlock | | * @param uri URI to refer to in the KBlock | |
| * @param bo block options | | * @param bo block options | |
| * @param options publication options | | * @param options publication options | |
| * @param cont continuation | | * @param cont continuation | |
|
| * @param cont_cls closure for cont | | * @param cont_cls closure for @a cont | |
| * @return NULL on error ('cont' will still be called) | | * @return NULL on error (@a cont will still be called) | |
| */ | | */ | |
| struct GNUNET_FS_PublishKskContext * | | struct GNUNET_FS_PublishKskContext * | |
| GNUNET_FS_publish_ksk (struct GNUNET_FS_Handle *h, | | GNUNET_FS_publish_ksk (struct GNUNET_FS_Handle *h, | |
| const struct GNUNET_FS_Uri *ksk_uri, | | const struct GNUNET_FS_Uri *ksk_uri, | |
| const struct GNUNET_CONTAINER_MetaData *meta, | | const struct GNUNET_CONTAINER_MetaData *meta, | |
| const struct GNUNET_FS_Uri *uri, | | const struct GNUNET_FS_Uri *uri, | |
| const struct GNUNET_FS_BlockOptions *bo, | | const struct GNUNET_FS_BlockOptions *bo, | |
| enum GNUNET_FS_PublishOptions options, | | enum GNUNET_FS_PublishOptions options, | |
| GNUNET_FS_PublishContinuation cont, void *cont_cls); | | GNUNET_FS_PublishContinuation cont, void *cont_cls); | |
| | | | |
| | | | |
| skipping to change at line 2033 | | skipping to change at line 2012 | |
| * | | * | |
| * @param h handle to the file sharing subsystem | | * @param h handle to the file sharing subsystem | |
| * @param ns namespace to publish in | | * @param ns namespace to publish in | |
| * @param identifier identifier to use | | * @param identifier identifier to use | |
| * @param update update identifier to use | | * @param update update identifier to use | |
| * @param meta metadata to use | | * @param meta metadata to use | |
| * @param uri URI to refer to in the SBlock | | * @param uri URI to refer to in the SBlock | |
| * @param bo block options | | * @param bo block options | |
| * @param options publication options | | * @param options publication options | |
| * @param cont continuation | | * @param cont continuation | |
|
| * @param cont_cls closure for cont | | * @param cont_cls closure for @a cont | |
| * @return NULL on error ('cont' will still be called) | | * @return NULL on error (@a cont will still be called) | |
| */ | | */ | |
| struct GNUNET_FS_PublishSksContext * | | struct GNUNET_FS_PublishSksContext * | |
| GNUNET_FS_publish_sks (struct GNUNET_FS_Handle *h, | | GNUNET_FS_publish_sks (struct GNUNET_FS_Handle *h, | |
|
| struct GNUNET_FS_Namespace *ns, | | const struct GNUNET_CRYPTO_EcdsaPrivateKey *ns, | |
| const char *identifier, const char *update, | | const char *identifier, | |
| | | const char *update, | |
| const struct GNUNET_CONTAINER_MetaData *meta, | | const struct GNUNET_CONTAINER_MetaData *meta, | |
| const struct GNUNET_FS_Uri *uri, | | const struct GNUNET_FS_Uri *uri, | |
| const struct GNUNET_FS_BlockOptions *bo, | | const struct GNUNET_FS_BlockOptions *bo, | |
| enum GNUNET_FS_PublishOptions options, | | enum GNUNET_FS_PublishOptions options, | |
| GNUNET_FS_PublishContinuation cont, void *cont_cls); | | GNUNET_FS_PublishContinuation cont, void *cont_cls); | |
| | | | |
| /** | | /** | |
| * Abort the SKS publishing operation. | | * Abort the SKS publishing operation. | |
| * | | * | |
| * @param psc context of the operation to abort. | | * @param psc context of the operation to abort. | |
| */ | | */ | |
| void | | void | |
| GNUNET_FS_publish_sks_cancel (struct GNUNET_FS_PublishSksContext *psc); | | GNUNET_FS_publish_sks_cancel (struct GNUNET_FS_PublishSksContext *psc); | |
| | | | |
| /** | | /** | |
|
| * Type of a function called by "GNUNET_FS_get_indexed_files". | | * Type of a function called by #GNUNET_FS_get_indexed_files. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param filename the name of the file, NULL for end of list | | * @param filename the name of the file, NULL for end of list | |
| * @param file_id hash of the contents of the indexed file | | * @param file_id hash of the contents of the indexed file | |
|
| * @return GNUNET_OK to continue iteration, GNUNET_SYSERR to abort | | * @return #GNUNET_OK to continue iteration, #GNUNET_SYSERR to abort | |
| */ | | */ | |
| typedef int (*GNUNET_FS_IndexedFileProcessor) (void *cls, const char *filen
ame, | | typedef int (*GNUNET_FS_IndexedFileProcessor) (void *cls, const char *filen
ame, | |
| const struct GNUNET_HashCode
* file_id); | | const struct GNUNET_HashCode
* file_id); | |
| | | | |
| /** | | /** | |
| * Handle to cancel 'GNUNET_FS_get_indexed_files'. | | * Handle to cancel 'GNUNET_FS_get_indexed_files'. | |
| */ | | */ | |
| struct GNUNET_FS_GetIndexedContext; | | struct GNUNET_FS_GetIndexedContext; | |
| | | | |
| /** | | /** | |
| * Iterate over all indexed files. | | * Iterate over all indexed files. | |
| * | | * | |
| * @param h handle to the file sharing subsystem | | * @param h handle to the file sharing subsystem | |
| * @param iterator function to call on each indexed file | | * @param iterator function to call on each indexed file | |
|
| * @param iterator_cls closure for iterator | | * @param iterator_cls closure for @a iterator | |
| * @return NULL on error ('iter' is not called) | | * @return NULL on error (@a iterator is not called) | |
| */ | | */ | |
| struct GNUNET_FS_GetIndexedContext * | | struct GNUNET_FS_GetIndexedContext * | |
| GNUNET_FS_get_indexed_files (struct GNUNET_FS_Handle *h, | | GNUNET_FS_get_indexed_files (struct GNUNET_FS_Handle *h, | |
| GNUNET_FS_IndexedFileProcessor iterator, | | GNUNET_FS_IndexedFileProcessor iterator, | |
| void *iterator_cls); | | void *iterator_cls); | |
| | | | |
| /** | | /** | |
| * Cancel iteration over all indexed files. | | * Cancel iteration over all indexed files. | |
| * | | * | |
| * @param gic operation to cancel | | * @param gic operation to cancel | |
| | | | |
| skipping to change at line 2100 | | skipping to change at line 2080 | |
| | | | |
| /** | | /** | |
| * Unindex a file. | | * Unindex a file. | |
| * | | * | |
| * @param h handle to the file sharing subsystem | | * @param h handle to the file sharing subsystem | |
| * @param filename file to unindex | | * @param filename file to unindex | |
| * @param cctx initial value for the client context | | * @param cctx initial value for the client context | |
| * @return NULL on error, otherwise handle | | * @return NULL on error, otherwise handle | |
| */ | | */ | |
| struct GNUNET_FS_UnindexContext * | | struct GNUNET_FS_UnindexContext * | |
|
| GNUNET_FS_unindex_start (struct GNUNET_FS_Handle *h, const char *filename, | | GNUNET_FS_unindex_start (struct GNUNET_FS_Handle *h, | |
| | | const char *filename, | |
| void *cctx); | | void *cctx); | |
| | | | |
| /** | | /** | |
| * Clean up after completion of an unindex operation. | | * Clean up after completion of an unindex operation. | |
| * | | * | |
| * @param uc handle | | * @param uc handle | |
| */ | | */ | |
| void | | void | |
| GNUNET_FS_unindex_stop (struct GNUNET_FS_UnindexContext *uc); | | GNUNET_FS_unindex_stop (struct GNUNET_FS_UnindexContext *uc); | |
| | | | |
| /** | | /** | |
|
| * Context for advertising a namespace. | | | |
| */ | | | |
| struct GNUNET_FS_AdvertisementContext; | | | |
| | | | |
| /** | | | |
| * Publish an advertismement for a namespace. | | | |
| * | | | |
| * @param h handle to the file sharing subsystem | | | |
| * @param ksk_uri keywords to use for advertisment | | | |
| * @param ns handle for the namespace that should be advertised | | | |
| * @param meta meta-data for the namespace advertisement | | | |
| * @param bo block options | | | |
| * @param rootEntry name of the root of the namespace | | | |
| * @param cont continuation | | | |
| * @param cont_cls closure for cont | | | |
| * @return NULL on error ('cont' will still be called) | | | |
| */ | | | |
| struct GNUNET_FS_AdvertisementContext * | | | |
| GNUNET_FS_namespace_advertise (struct GNUNET_FS_Handle *h, | | | |
| struct GNUNET_FS_Uri *ksk_uri, | | | |
| struct GNUNET_FS_Namespace *ns, | | | |
| const struct GNUNET_CONTAINER_MetaData *meta | | | |
| , | | | |
| const struct GNUNET_FS_BlockOptions *bo, | | | |
| const char *rootEntry, | | | |
| GNUNET_FS_PublishContinuation cont, | | | |
| void *cont_cls); | | | |
| | | | |
| /** | | | |
| * Abort the namespace advertisement operation. | | | |
| * | | | |
| * @param ac context of the operation to abort. | | | |
| */ | | | |
| void | | | |
| GNUNET_FS_namespace_advertise_cancel (struct GNUNET_FS_AdvertisementContext | | | |
| *ac); | | | |
| | | | |
| /** | | | |
| * Create a namespace with the given name; if one already | | | |
| * exists, return a handle to the existing namespace. | | | |
| * | | | |
| * @param h handle to the file sharing subsystem | | | |
| * @param name name to use for the namespace | | | |
| * @return handle to the namespace, NULL on error (i.e. invalid filename) | | | |
| */ | | | |
| struct GNUNET_FS_Namespace * | | | |
| GNUNET_FS_namespace_create (struct GNUNET_FS_Handle *h, const char *name); | | | |
| | | | |
| /** | | | |
| * Duplicate a namespace handle. | | | |
| * | | | |
| * @param ns namespace handle | | | |
| * @return duplicated handle to the namespace | | | |
| */ | | | |
| struct GNUNET_FS_Namespace * | | | |
| GNUNET_FS_namespace_dup (struct GNUNET_FS_Namespace *ns); | | | |
| | | | |
| /** | | | |
| * Delete a namespace handle. Can be used for a clean shutdown (free | | | |
| * memory) or also to freeze the namespace to prevent further | | | |
| * insertions by anyone. | | | |
| * | | | |
| * @param ns handle to the namespace that should be deleted / freed | | | |
| * @param freeze prevents future insertions; creating a namespace | | | |
| * with the same name again will create a fresh namespace instead | | | |
| * | | | |
| * @return GNUNET_OK on success, GNUNET_SYSERR on error | | | |
| */ | | | |
| int | | | |
| GNUNET_FS_namespace_delete (struct GNUNET_FS_Namespace *ns, int freeze); | | | |
| | | | |
| /** | | | |
| * Callback with information about local (!) namespaces. | | | |
| * Contains the names of the local namespace and the global | | | |
| * ID. | | | |
| * | | | |
| * @param cls closure | | | |
| * @param name human-readable identifier of the namespace | | | |
| * @param id hash identifier for the namespace | | | |
| */ | | | |
| typedef void (*GNUNET_FS_NamespaceInfoProcessor) (void *cls, const char *na | | | |
| me, | | | |
| const struct GNUNET_HashC | | | |
| ode * id); | | | |
| | | | |
| /** | | | |
| * Build a list of all available local (!) namespaces The returned | | | |
| * names are only the nicknames since we only iterate over the local | | | |
| * namespaces. | | | |
| * | | | |
| * @param h handle to the file sharing subsystem | | | |
| * @param cb function to call on each known namespace | | | |
| * @param cb_cls closure for cb | | | |
| */ | | | |
| void | | | |
| GNUNET_FS_namespace_list (struct GNUNET_FS_Handle *h, | | | |
| GNUNET_FS_NamespaceInfoProcessor cb, void *cb_cls | | | |
| ); | | | |
| | | | |
| /** | | | |
| * Function called on updateable identifiers. | | * Function called on updateable identifiers. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param last_id last identifier | | * @param last_id last identifier | |
|
| * @param last_uri uri used for the content published under the last_id | | * @param last_uri uri used for the content published under the @a last_id | |
| * @param last_meta metadata associated with last_uri | | * @param last_meta metadata associated with @a last_uri | |
| * @param next_id identifier that should be used for updates | | * @param next_id identifier that should be used for updates | |
| */ | | */ | |
|
| typedef void (*GNUNET_FS_IdentifierProcessor) (void *cls, const char *last_ | | typedef void (*GNUNET_FS_IdentifierProcessor) (void *cls, | |
| id, | | const char *last_id, | |
| const struct GNUNET_FS_Uri * | | const struct GNUNET_FS_Uri * | |
| last_uri, | | last_uri, | |
| const struct | | const struct GNUNET_CONTAINE | |
| GNUNET_CONTAINER_MetaData * | | R_MetaData *last_meta, | |
| last_meta, const char *next_ | | const char *next_id); | |
| id); | | | |
| | | | |
| /** | | /** | |
| * List all of the identifiers in the namespace for which we could | | * List all of the identifiers in the namespace for which we could | |
| * produce an update. Namespace updates form a graph where each node | | * produce an update. Namespace updates form a graph where each node | |
| * has a name. Each node can have any number of URI/meta-data entries | | * has a name. Each node can have any number of URI/meta-data entries | |
| * which can each be linked to other nodes. Cycles are possible. | | * which can each be linked to other nodes. Cycles are possible. | |
| * | | * | |
|
| * Calling this function with "next_id" NULL will cause the library to | | * Calling this function with @a next_id NULL will cause the library to | |
| * call "ip" with a root for each strongly connected component of the | | * call @a ip with a root for each strongly connected component of the | |
| * graph (a root being a node from which all other nodes in the Scc | | * graph (a root being a node from which all other nodes in the Scc | |
| * are reachable). | | * are reachable). | |
| * | | * | |
|
| * Calling this function with "next_id" being the name of a node will | | * Calling this function with @a next_id being the name of a node will | |
| * cause the library to call "ip" with all children of the node. Note | | * cause the library to call @a ip with all children of the node. Note | |
| * that cycles within an SCC are possible (including self-loops). | | * that cycles within an SCC are possible (including self-loops). | |
| * | | * | |
|
| | | * @param h fs handle to use | |
| * @param ns namespace to inspect for updateable content | | * @param ns namespace to inspect for updateable content | |
| * @param next_id ID to look for; use NULL to look for SCC roots | | * @param next_id ID to look for; use NULL to look for SCC roots | |
| * @param ip function to call on each updateable identifier | | * @param ip function to call on each updateable identifier | |
|
| * @param ip_cls closure for ip | | * @param ip_cls closure for @a ip | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_FS_namespace_list_updateable (struct GNUNET_FS_Namespace *ns, | | GNUNET_FS_namespace_list_updateable (struct GNUNET_FS_Handle *h, | |
| | | const struct GNUNET_CRYPTO_EcdsaPrivate | |
| | | Key *ns, | |
| const char *next_id, | | const char *next_id, | |
| GNUNET_FS_IdentifierProcessor ip, | | GNUNET_FS_IdentifierProcessor ip, | |
| void *ip_cls); | | void *ip_cls); | |
| | | | |
| /** | | /** | |
| * Options for searching. Compatible options | | * Options for searching. Compatible options | |
| * can be OR'ed together. | | * can be OR'ed together. | |
| */ | | */ | |
| enum GNUNET_FS_SearchOptions | | enum GNUNET_FS_SearchOptions | |
| { | | { | |
| | | | |
| skipping to change at line 2306 | | skipping to change at line 2193 | |
| | | | |
| /** | | /** | |
| * Stop search for content. | | * Stop search for content. | |
| * | | * | |
| * @param sc context for the search that should be stopped | | * @param sc context for the search that should be stopped | |
| */ | | */ | |
| void | | void | |
| GNUNET_FS_search_stop (struct GNUNET_FS_SearchContext *sc); | | GNUNET_FS_search_stop (struct GNUNET_FS_SearchContext *sc); | |
| | | | |
| /** | | /** | |
|
| | | * Start download probes for the given search result. | |
| | | * | |
| | | * @param h file-sharing handle to use for the operation | |
| | | * @param uri URI to probe | |
| | | * @param meta meta data associated with the URI | |
| | | * @param client_info client info pointer to use for associated events | |
| | | * @param anonymity anonymity level to use for the probes | |
| | | * @return the search result handle to access the probe activity | |
| | | */ | |
| | | struct GNUNET_FS_SearchResult * | |
| | | GNUNET_FS_probe (struct GNUNET_FS_Handle *h, | |
| | | const struct GNUNET_FS_Uri *uri, | |
| | | const struct GNUNET_CONTAINER_MetaData *meta, | |
| | | void *client_info, | |
| | | uint32_t anonymity); | |
| | | | |
| | | /** | |
| | | * Stop probe activity. Must ONLY be used on values | |
| | | * returned from #GNUNET_FS_probe. | |
| | | * | |
| | | * @param sr search result to stop probing for (freed) | |
| | | * @return the value of the 'client_info' pointer | |
| | | */ | |
| | | void * | |
| | | GNUNET_FS_probe_stop (struct GNUNET_FS_SearchResult *sr); | |
| | | | |
| | | /** | |
| * Options for downloading. Compatible options | | * Options for downloading. Compatible options | |
| * can be OR'ed together. | | * can be OR'ed together. | |
| */ | | */ | |
| enum GNUNET_FS_DownloadOptions | | enum GNUNET_FS_DownloadOptions | |
| { | | { | |
|
| /** | | /** | |
| * No options (use defaults for everything). | | * No options (use defaults for everything). | |
| */ | | */ | |
| GNUNET_FS_DOWNLOAD_OPTION_NONE = 0, | | GNUNET_FS_DOWNLOAD_OPTION_NONE = 0, | |
| | | | |
|
| /** | | /** | |
| * Only download from the local host, do not access remote systems (no | | * Only download from the local host, do not access remote systems (no P2 | |
| P2P) | | P) | |
| */ | | */ | |
| GNUNET_FS_DOWNLOAD_OPTION_LOOPBACK_ONLY = 1, | | GNUNET_FS_DOWNLOAD_OPTION_LOOPBACK_ONLY = 1, | |
| | | | |
|
| /** | | /** | |
| * Do a recursive download (that is, automatically trigger the | | * Do a recursive download (that is, automatically trigger the | |
| * download of files in directories). | | * download of files in directories). | |
| */ | | */ | |
| GNUNET_FS_DOWNLOAD_OPTION_RECURSIVE = 2, | | GNUNET_FS_DOWNLOAD_OPTION_RECURSIVE = 2, | |
| | | | |
|
| /** | | /** | |
| * Do not append temporary data to | | * Do not append temporary data to | |
| * the target file (for the IBlocks). | | * the target file (for the IBlocks). | |
| */ | | */ | |
| GNUNET_FS_DOWNLOAD_NO_TEMPORARIES = 4, | | GNUNET_FS_DOWNLOAD_NO_TEMPORARIES = 4, | |
| | | | |
|
| /** | | /** | |
| * Internal option used to flag this download as a 'probe' for a | | * Internal option used to flag this download as a 'probe' for a | |
| * search result. Impacts the priority with which the download is | | * search result. Impacts the priority with which the download is | |
| * run and causes signalling callbacks to be done differently. | | * run and causes signalling callbacks to be done differently. | |
| * Also, probe downloads are not serialized on suspension. Normal | | * Also, probe downloads are not serialized on suspension. Normal | |
| * clients should not use this! | | * clients should not use this! | |
| */ | | */ | |
| GNUNET_FS_DOWNLOAD_IS_PROBE = (1 << 31) | | GNUNET_FS_DOWNLOAD_IS_PROBE = (1 << 31) | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Download parts of a file. Note that this will store | | * Download parts of a file. Note that this will store | |
| * the blocks at the respective offset in the given file. Also, the | | * the blocks at the respective offset in the given file. Also, the | |
| * download is still using the blocking of the underlying FS | | * download is still using the blocking of the underlying FS | |
| * encoding. As a result, the download may *write* outside of the | | * encoding. As a result, the download may *write* outside of the | |
| * given boundaries (if offset and length do not match the 32k FS | | * given boundaries (if offset and length do not match the 32k FS | |
|
| * block boundaries). <p> | | * block boundaries). | |
| * | | * | |
| * The given range can be used to focus a download towards a | | * The given range can be used to focus a download towards a | |
| * particular portion of the file (optimization), not to strictly | | * particular portion of the file (optimization), not to strictly | |
| * limit the download to exactly those bytes. | | * limit the download to exactly those bytes. | |
| * | | * | |
| * @param h handle to the file sharing subsystem | | * @param h handle to the file sharing subsystem | |
| * @param uri the URI of the file (determines what to download); CHK or LOC
URI | | * @param uri the URI of the file (determines what to download); CHK or LOC
URI | |
| * @param meta known metadata for the file (can be NULL) | | * @param meta known metadata for the file (can be NULL) | |
| * @param filename where to store the file, maybe NULL (then no file is | | * @param filename where to store the file, maybe NULL (then no file is | |
| * created on disk and data must be grabbed from the callbacks) | | * created on disk and data must be grabbed from the callbacks) | |
| | | | |
| skipping to change at line 2394 | | skipping to change at line 2308 | |
| * will be associated with the search result (and the association | | * will be associated with the search result (and the association | |
| * will be preserved when serializing/deserializing the state). | | * will be preserved when serializing/deserializing the state). | |
| * If the search is stopped, the download will not be aborted but | | * If the search is stopped, the download will not be aborted but | |
| * be 'promoted' to a stand-alone download. | | * be 'promoted' to a stand-alone download. | |
| * | | * | |
| * As with the other download function, this will store | | * As with the other download function, this will store | |
| * the blocks at the respective offset in the given file. Also, the | | * the blocks at the respective offset in the given file. Also, the | |
| * download is still using the blocking of the underlying FS | | * download is still using the blocking of the underlying FS | |
| * encoding. As a result, the download may *write* outside of the | | * encoding. As a result, the download may *write* outside of the | |
| * given boundaries (if offset and length do not match the 32k FS | | * given boundaries (if offset and length do not match the 32k FS | |
|
| * block boundaries). <p> | | * block boundaries). | |
| * | | * | |
| * The given range can be used to focus a download towards a | | * The given range can be used to focus a download towards a | |
| * particular portion of the file (optimization), not to strictly | | * particular portion of the file (optimization), not to strictly | |
| * limit the download to exactly those bytes. | | * limit the download to exactly those bytes. | |
| * | | * | |
| * @param h handle to the file sharing subsystem | | * @param h handle to the file sharing subsystem | |
| * @param sr the search result to use for the download (determines uri and | | * @param sr the search result to use for the download (determines uri and | |
| * meta data and associations) | | * meta data and associations) | |
| * @param filename where to store the file, maybe NULL (then no file is | | * @param filename where to store the file, maybe NULL (then no file is | |
| * created on disk and data must be grabbed from the callbacks) | | * created on disk and data must be grabbed from the callbacks) | |
| | | | |
| skipping to change at line 2444 | | skipping to change at line 2358 | |
| /* ******************** Directory API *********************** */ | | /* ******************** Directory API *********************** */ | |
| | | | |
| #define GNUNET_FS_DIRECTORY_MIME "application/gnunet-directory" | | #define GNUNET_FS_DIRECTORY_MIME "application/gnunet-directory" | |
| #define GNUNET_FS_DIRECTORY_MAGIC "\211GND\r\n\032\n" | | #define GNUNET_FS_DIRECTORY_MAGIC "\211GND\r\n\032\n" | |
| #define GNUNET_FS_DIRECTORY_EXT ".gnd" | | #define GNUNET_FS_DIRECTORY_EXT ".gnd" | |
| | | | |
| /** | | /** | |
| * Does the meta-data claim that this is a directory? | | * Does the meta-data claim that this is a directory? | |
| * Checks if the mime-type is that of a GNUnet directory. | | * Checks if the mime-type is that of a GNUnet directory. | |
| * | | * | |
|
| * @return GNUNET_YES if it is, GNUNET_NO if it is not, GNUNET_SYSERR if | | * @return #GNUNET_YES if it is, #GNUNET_NO if it is not, #GNUNET_SYSERR if | |
| * we have no mime-type information (treat as 'GNUNET_NO') | | * we have no mime-type information (treat as #GNUNET_NO) | |
| */ | | */ | |
| int | | int | |
| GNUNET_FS_meta_data_test_for_directory (const struct GNUNET_CONTAINER_MetaD
ata | | GNUNET_FS_meta_data_test_for_directory (const struct GNUNET_CONTAINER_MetaD
ata | |
| *md); | | *md); | |
| | | | |
| /** | | /** | |
| * Set the MIMETYPE information for the given | | * Set the MIMETYPE information for the given | |
| * metadata to "application/gnunet-directory". | | * metadata to "application/gnunet-directory". | |
| * | | * | |
| * @param md metadata to add mimetype to | | * @param md metadata to add mimetype to | |
| | | | |
| skipping to change at line 2467 | | skipping to change at line 2381 | |
| void | | void | |
| GNUNET_FS_meta_data_make_directory (struct GNUNET_CONTAINER_MetaData *md); | | GNUNET_FS_meta_data_make_directory (struct GNUNET_CONTAINER_MetaData *md); | |
| | | | |
| /** | | /** | |
| * Suggest a filename based on given metadata. | | * Suggest a filename based on given metadata. | |
| * | | * | |
| * @param md given meta data | | * @param md given meta data | |
| * @return NULL if meta data is useless for suggesting a filename | | * @return NULL if meta data is useless for suggesting a filename | |
| */ | | */ | |
| char * | | char * | |
|
| GNUNET_FS_meta_data_suggest_filename (const struct GNUNET_CONTAINER_MetaDat | | GNUNET_FS_meta_data_suggest_filename (const struct GNUNET_CONTAINER_MetaDat | |
| a | | a *md); | |
| *md); | | | |
| | | | |
| /** | | /** | |
| * Function used to process entries in a directory. | | * Function used to process entries in a directory. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param filename name of the file in the directory | | * @param filename name of the file in the directory | |
| * @param uri URI of the file | | * @param uri URI of the file | |
| * @param metadata metadata for the file; metadata for | | * @param metadata metadata for the file; metadata for | |
| * the directory if everything else is NULL/zero | | * the directory if everything else is NULL/zero | |
| * @param length length of the available data for the file | | * @param length length of the available data for the file | |
| | | | |
| skipping to change at line 2508 | | skipping to change at line 2421 | |
| * a client can call this function on the buffer in the | | * a client can call this function on the buffer in the | |
| * GNUNET_FS_ProgressCallback. Also, directories can optionally | | * GNUNET_FS_ProgressCallback. Also, directories can optionally | |
| * include the contents of (small) files embedded in the directory | | * include the contents of (small) files embedded in the directory | |
| * itself; for those files, the processor may be given the | | * itself; for those files, the processor may be given the | |
| * contents of the file directly by this function. | | * contents of the file directly by this function. | |
| * | | * | |
| * @param size number of bytes in data | | * @param size number of bytes in data | |
| * @param data pointer to the beginning of the directory | | * @param data pointer to the beginning of the directory | |
| * @param offset offset of data in the directory | | * @param offset offset of data in the directory | |
| * @param dep function to call on each entry | | * @param dep function to call on each entry | |
|
| * @param dep_cls closure for dep | | * @param dep_cls closure for @a dep | |
| * @return GNUNET_OK if this could be a block in a directory, | | * @return #GNUNET_OK if this could be a block in a directory, | |
| * GNUNET_NO if this could be part of a directory (but not 100% OK) | | * #GNUNET_NO if this could be part of a directory (but not 100% OK | |
| * GNUNET_SYSERR if 'data' does not represent a directory | | ) | |
| | | * #GNUNET_SYSERR if 'data' does not represent a directory | |
| */ | | */ | |
| int | | int | |
| GNUNET_FS_directory_list_contents (size_t size, const void *data, | | GNUNET_FS_directory_list_contents (size_t size, const void *data, | |
| uint64_t offset, | | uint64_t offset, | |
| GNUNET_FS_DirectoryEntryProcessor dep, | | GNUNET_FS_DirectoryEntryProcessor dep, | |
| void *dep_cls); | | void *dep_cls); | |
| | | | |
| /** | | /** | |
| * Opaque handle to a directory builder. | | * Opaque handle to a directory builder. | |
| */ | | */ | |
| | | | |
| skipping to change at line 2557 | | skipping to change at line 2470 | |
| const void *data); | | const void *data); | |
| | | | |
| /** | | /** | |
| * Finish building the directory. Frees the | | * Finish building the directory. Frees the | |
| * builder context and returns the directory | | * builder context and returns the directory | |
| * in-memory. | | * in-memory. | |
| * | | * | |
| * @param bld directory to finish | | * @param bld directory to finish | |
| * @param rsize set to the number of bytes needed | | * @param rsize set to the number of bytes needed | |
| * @param rdata set to the encoded directory | | * @param rdata set to the encoded directory | |
|
| * @return GNUNET_OK on success | | * @return #GNUNET_OK on success | |
| */ | | */ | |
| int | | int | |
| GNUNET_FS_directory_builder_finish (struct GNUNET_FS_DirectoryBuilder *bld, | | GNUNET_FS_directory_builder_finish (struct GNUNET_FS_DirectoryBuilder *bld, | |
| size_t * rsize, void **rdata); | | size_t * rsize, void **rdata); | |
| | | | |
| /* ******************** DirScanner API *********************** */ | | /* ******************** DirScanner API *********************** */ | |
| | | | |
| /** | | /** | |
| * Progress reasons of the directory scanner. | | * Progress reasons of the directory scanner. | |
| */ | | */ | |
| | | | |
| skipping to change at line 2611 | | skipping to change at line 2524 | |
| GNUNET_FS_DIRSCANNER_INTERNAL_ERROR | | GNUNET_FS_DIRSCANNER_INTERNAL_ERROR | |
| | | | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Function called over time as the directory scanner makes | | * Function called over time as the directory scanner makes | |
| * progress on the job at hand. | | * progress on the job at hand. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param filename which file we are making progress on | | * @param filename which file we are making progress on | |
|
| * @param is_directory GNUNET_YES if this is a directory, | | * @param is_directory #GNUNET_YES if this is a directory, | |
| * GNUNET_NO if this is a file | | * #GNUNET_NO if this is a file | |
| * GNUNET_SYSERR if it is neither (or unknown) | | * #GNUNET_SYSERR if it is neither (or unknown) | |
| * @param reason kind of progress we are making | | * @param reason kind of progress we are making | |
| */ | | */ | |
| typedef void (*GNUNET_FS_DirScannerProgressCallback) (void *cls, | | typedef void (*GNUNET_FS_DirScannerProgressCallback) (void *cls, | |
| const char *filename, | | const char *filename, | |
| int is_directory, | | int is_directory, | |
| enum GNUNET_FS_DirScan
nerProgressUpdateReason reason); | | enum GNUNET_FS_DirScan
nerProgressUpdateReason reason); | |
| | | | |
| /** | | /** | |
| * A node of a directory tree (produced by dirscanner) | | * A node of a directory tree (produced by dirscanner) | |
| */ | | */ | |
| | | | |
| skipping to change at line 2675 | | skipping to change at line 2588 | |
| * Name of the file/directory | | * Name of the file/directory | |
| */ | | */ | |
| char *filename; | | char *filename; | |
| | | | |
| /** | | /** | |
| * Base name of the file/directory. | | * Base name of the file/directory. | |
| */ | | */ | |
| char *short_filename; | | char *short_filename; | |
| | | | |
| /** | | /** | |
|
| * GNUNET_YES if this is a directory | | * #GNUNET_YES if this is a directory | |
| */ | | */ | |
| int is_directory; | | int is_directory; | |
| | | | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Opaqe handle to an asynchronous directory scanning activity. | | * Opaqe handle to an asynchronous directory scanning activity. | |
| */ | | */ | |
| struct GNUNET_FS_DirScanner; | | struct GNUNET_FS_DirScanner; | |
| | | | |
| /** | | /** | |
| * Start a directory scanner. | | * Start a directory scanner. | |
| * | | * | |
| * @param filename name of the directory to scan | | * @param filename name of the directory to scan | |
|
| * @param disable_extractor GNUNET_YES to not to run libextractor on files
(only build a tree) | | * @param disable_extractor #GNUNET_YES to not to run libextractor on files
(only build a tree) | |
| * @param ex if not NULL, must be a list of extra plugins for extractor | | * @param ex if not NULL, must be a list of extra plugins for extractor | |
| * @param cb the callback to call when there are scanning progress messages | | * @param cb the callback to call when there are scanning progress messages | |
|
| * @param cb_cls closure for 'cb' | | * @param cb_cls closure for @a cb | |
| * @return directory scanner object to be used for controlling the scanner | | * @return directory scanner object to be used for controlling the scanner | |
| */ | | */ | |
| struct GNUNET_FS_DirScanner * | | struct GNUNET_FS_DirScanner * | |
| GNUNET_FS_directory_scan_start (const char *filename, | | GNUNET_FS_directory_scan_start (const char *filename, | |
| int disable_extractor, | | int disable_extractor, | |
| const char *ex, | | const char *ex, | |
| GNUNET_FS_DirScannerProgressCallback cb, | | GNUNET_FS_DirScannerProgressCallback cb, | |
| void *cb_cls); | | void *cb_cls); | |
| | | | |
| /** | | /** | |
|
| * Abort the scan. Must not be called from within the progress_callback | | * Abort the scan. Must not be called from within the progress_callback | |
| * function. | | * function. | |
| * | | * | |
| * @param ds directory scanner structure | | * @param ds directory scanner structure | |
| */ | | */ | |
| void | | void | |
| GNUNET_FS_directory_scan_abort (struct GNUNET_FS_DirScanner *ds); | | GNUNET_FS_directory_scan_abort (struct GNUNET_FS_DirScanner *ds); | |
| | | | |
| /** | | /** | |
| * Obtain the result of the scan after the scan has signalled | | * Obtain the result of the scan after the scan has signalled | |
|
| * completion. Must not be called prior to completion. The 'ds' is | | * completion. Must not be called prior to completion. The @a ds is | |
| * freed as part of this call. | | * freed as part of this call. | |
| * | | * | |
| * @param ds directory scanner structure | | * @param ds directory scanner structure | |
| * @return the results of the scan (a directory tree) | | * @return the results of the scan (a directory tree) | |
| */ | | */ | |
| struct GNUNET_FS_ShareTreeItem * | | struct GNUNET_FS_ShareTreeItem * | |
| GNUNET_FS_directory_scan_get_result (struct GNUNET_FS_DirScanner *ds); | | GNUNET_FS_directory_scan_get_result (struct GNUNET_FS_DirScanner *ds); | |
| | | | |
| /** | | /** | |
| * Process a share item tree, moving frequent keywords up and | | * Process a share item tree, moving frequent keywords up and | |
| | | | |
End of changes. 113 change blocks. |
| 329 lines changed or deleted | | 236 lines changed or added | |
|
| gnunet_getopt_lib.h | | gnunet_getopt_lib.h | |
| /* | | /* | |
| This file is part of GNUnet. | | This file is part of GNUnet. | |
|
| (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2011 Christian Grothoff
(and other contributing authors) | | (C) 2001-2013 Christian Grothoff (and other contributing authors) | |
| | | | |
| GNUnet is free software; you can redistribute it and/or modify | | GNUnet is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published | | 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. | | option) any later version. | |
| | | | |
| GNUnet is distributed in the hope that it will be useful, but | | GNUnet is distributed in the hope that it will be useful, but | |
| WITHOUT ANY WARRANTY; without even the implied warranty of | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| General Public License for more details. | | General Public License for more details. | |
| | | | |
| You should have received a copy of the GNU General Public License | | You should have received a copy of the GNU General Public License | |
| along with GNUnet; see the file COPYING. If not, write to the | | along with GNUnet; see the file COPYING. If not, write to the | |
| Free Software Foundation, Inc., 59 Temple Place - Suite 330, | | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| Boston, MA 02111-1307, USA. | | Boston, MA 02111-1307, USA. | |
| */ | | */ | |
| | | | |
| /** | | /** | |
| * @file include/gnunet_getopt_lib.h | | * @file include/gnunet_getopt_lib.h | |
| * @brief command line parsing and --help formatting | | * @brief command line parsing and --help formatting | |
|
| * | | | |
| * @author Christian Grothoff | | * @author Christian Grothoff | |
|
| | | * @defgroup getopt command-line parsing | |
| | | * @{ | |
| */ | | */ | |
| | | | |
| #ifndef GNUNET_GETOPT_LIB_H | | #ifndef GNUNET_GETOPT_LIB_H | |
| #define GNUNET_GETOPT_LIB_H | | #define GNUNET_GETOPT_LIB_H | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| extern "C" | | extern "C" | |
| { | | { | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| } | | } | |
| | | | |
| skipping to change at line 86 | | skipping to change at line 87 | |
| | | | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * @brief Process a command line option | | * @brief Process a command line option | |
| * | | * | |
| * @param ctx context for all options | | * @param ctx context for all options | |
| * @param scls specific closure (for this processor) | | * @param scls specific closure (for this processor) | |
| * @param option long name of the option (i.e. "config" for --config) | | * @param option long name of the option (i.e. "config" for --config) | |
| * @param value argument, NULL if none was given | | * @param value argument, NULL if none was given | |
|
| * @return GNUNET_OK to continue processing other options, GNUNET_SYSERR to
abort | | * @return #GNUNET_OK to continue processing other options, #GNUNET_SYSERR
to abort | |
| */ | | */ | |
| typedef int (*GNUNET_GETOPT_CommandLineOptionProcessor) (struct | | typedef int (*GNUNET_GETOPT_CommandLineOptionProcessor) (struct | |
|
| GNUNET_GETOPT_Comm | | GNUNET_GETOPT_Comm | |
| andLineProcessorContext | | andLineProcessorContext *ctx, | |
| * ctx, void *scls, | | void *scls, | |
| const char *option
, | | const char *option
, | |
| const char *value)
; | | const char *value)
; | |
| | | | |
| /** | | /** | |
| * @brief Definition of a command line option. | | * @brief Definition of a command line option. | |
| */ | | */ | |
| struct GNUNET_GETOPT_CommandLineOption | | struct GNUNET_GETOPT_CommandLineOption | |
| { | | { | |
| | | | |
| /** | | /** | |
|
| * Short name of the option (use '\\0' for none). | | * Short name of the option. | |
| */ | | */ | |
| const char shortName; | | const char shortName; | |
| | | | |
| /** | | /** | |
| * Long name of the option (may not be NULL) | | * Long name of the option (may not be NULL) | |
| */ | | */ | |
| const char *name; | | const char *name; | |
| | | | |
| /** | | /** | |
| * Name of the argument for the user in help text | | * Name of the argument for the user in help text | |
| */ | | */ | |
| const char *argumentHelp; | | const char *argumentHelp; | |
| | | | |
| /** | | /** | |
| * Help text for the option (description) | | * Help text for the option (description) | |
| */ | | */ | |
| const char *description; | | const char *description; | |
| | | | |
| /** | | /** | |
|
| * Is an argument required? 0: GNUNET_NO (includes optional), 1: GNUNET_
YES. | | * Is an argument required? 0: #GNUNET_NO (includes optional), 1: #GNUNE
T_YES. | |
| */ | | */ | |
| int require_argument; | | int require_argument; | |
| | | | |
| /** | | /** | |
| * Handler for the option. | | * Handler for the option. | |
| */ | | */ | |
| GNUNET_GETOPT_CommandLineOptionProcessor processor; | | GNUNET_GETOPT_CommandLineOptionProcessor processor; | |
| | | | |
| /** | | /** | |
| * Specific closure to pass to the processor. | | * Specific closure to pass to the processor. | |
| | | | |
| skipping to change at line 198 | | skipping to change at line 199 | |
| * Marker for the end of the list of options. | | * Marker for the end of the list of options. | |
| */ | | */ | |
| #define GNUNET_GETOPT_OPTION_END \ | | #define GNUNET_GETOPT_OPTION_END \ | |
| { '\0', NULL, NULL, NULL, 0, NULL, NULL } | | { '\0', NULL, NULL, NULL, 0, NULL, NULL } | |
| | | | |
| /** | | /** | |
| * Parse the command line. | | * Parse the command line. | |
| * | | * | |
| * @param binaryOptions Name of application with option summary | | * @param binaryOptions Name of application with option summary | |
| * @param allOptions defined options and handlers | | * @param allOptions defined options and handlers | |
|
| * @param argc number of arguments | | * @param argc number of arguments in @a argv | |
| * @param argv actual arguments | | * @param argv actual arguments | |
| * @return index into argv with first non-option | | * @return index into argv with first non-option | |
|
| * argument, or GNUNET_SYSERR on error | | * argument, or #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
| GNUNET_GETOPT_run (const char *binaryOptions, | | GNUNET_GETOPT_run (const char *binaryOptions, | |
| const struct GNUNET_GETOPT_CommandLineOption *allOptions
, | | const struct GNUNET_GETOPT_CommandLineOption *allOptions
, | |
| unsigned int argc, char *const *argv); | | unsigned int argc, char *const *argv); | |
| | | | |
| /** | | /** | |
| * Set an option of type 'unsigned long long' from the command line. | | * Set an option of type 'unsigned long long' from the command line. | |
| * A pointer to this function should be passed as part of the | | * A pointer to this function should be passed as part of the | |
|
| * 'struct GNUNET_GETOPT_CommandLineOption' array to initialize options | | * `struct GNUNET_GETOPT_CommandLineOption` array to initialize options | |
| * of this type. It should be followed by a pointer to a value of | | * of this type. It should be followed by a pointer to a value of | |
|
| * type 'unsigned long long'. | | * type `unsigned long long`. | |
| * | | * | |
| * @param ctx command line processing context | | * @param ctx command line processing context | |
| * @param scls additional closure (will point to the 'unsigned long long') | | * @param scls additional closure (will point to the 'unsigned long long') | |
| * @param option name of the option | | * @param option name of the option | |
| * @param value actual value of the option as a string. | | * @param value actual value of the option as a string. | |
|
| * @return GNUNET_OK if parsing the value worked | | * @return #GNUNET_OK if parsing the value worked | |
| */ | | */ | |
| int | | int | |
| GNUNET_GETOPT_set_ulong (struct GNUNET_GETOPT_CommandLineProcessorContext *
ctx, | | GNUNET_GETOPT_set_ulong (struct GNUNET_GETOPT_CommandLineProcessorContext *
ctx, | |
| void *scls, const char *option, const char *value)
; | | void *scls, const char *option, const char *value)
; | |
| | | | |
| /** | | /** | |
| * Set an option of type 'struct GNUNET_TIME_Relative' from the command lin
e. | | * Set an option of type 'struct GNUNET_TIME_Relative' from the command lin
e. | |
| * A pointer to this function should be passed as part of the | | * A pointer to this function should be passed as part of the | |
|
| * 'struct GNUNET_GETOPT_CommandLineOption' array to initialize options | | * `struct GNUNET_GETOPT_CommandLineOption` array to initialize options | |
| * of this type. It should be followed by a pointer to a value of | | * of this type. It should be followed by a pointer to a value of | |
|
| * type 'struct GNUNET_TIME_Relative'. | | * type `struct GNUNET_TIME_Relative`. | |
| * | | * | |
| * @param ctx command line processing context | | * @param ctx command line processing context | |
| * @param scls additional closure (will point to the 'struct GNUNET_TIME_Re
lative') | | * @param scls additional closure (will point to the 'struct GNUNET_TIME_Re
lative') | |
| * @param option name of the option | | * @param option name of the option | |
| * @param value actual value of the option as a string. | | * @param value actual value of the option as a string. | |
|
| * @return GNUNET_OK if parsing the value worked | | * @return #GNUNET_OK if parsing the value worked | |
| */ | | */ | |
| int | | int | |
| GNUNET_GETOPT_set_relative_time (struct GNUNET_GETOPT_CommandLineProcessorC
ontext *ctx, | | GNUNET_GETOPT_set_relative_time (struct GNUNET_GETOPT_CommandLineProcessorC
ontext *ctx, | |
| void *scls, const char *option, const char
*value); | | void *scls, const char *option, const char
*value); | |
| | | | |
| /** | | /** | |
| * Set an option of type 'unsigned int' from the command line. | | * Set an option of type 'unsigned int' from the command line. | |
| * A pointer to this function should be passed as part of the | | * A pointer to this function should be passed as part of the | |
|
| * 'struct GNUNET_GETOPT_CommandLineOption' array to initialize options | | * `struct GNUNET_GETOPT_CommandLineOption` array to initialize options | |
| * of this type. It should be followed by a pointer to a value of | | * of this type. It should be followed by a pointer to a value of | |
|
| * type 'unsigned int'. | | * type `unsigned int`. | |
| * | | * | |
| * @param ctx command line processing context | | * @param ctx command line processing context | |
| * @param scls additional closure (will point to the 'unsigned int') | | * @param scls additional closure (will point to the 'unsigned int') | |
| * @param option name of the option | | * @param option name of the option | |
| * @param value actual value of the option as a string. | | * @param value actual value of the option as a string. | |
|
| * @return GNUNET_OK if parsing the value worked | | * @return #GNUNET_OK if parsing the value worked | |
| */ | | */ | |
| int | | int | |
| GNUNET_GETOPT_set_uint (struct GNUNET_GETOPT_CommandLineProcessorContext *c
tx, | | GNUNET_GETOPT_set_uint (struct GNUNET_GETOPT_CommandLineProcessorContext *c
tx, | |
| void *scls, const char *option, const char *value); | | void *scls, const char *option, const char *value); | |
| | | | |
| /** | | /** | |
| * Set an option of type 'int' from the command line to 1 if the | | * Set an option of type 'int' from the command line to 1 if the | |
| * given option is present. | | * given option is present. | |
| * A pointer to this function should be passed as part of the | | * A pointer to this function should be passed as part of the | |
|
| * 'struct GNUNET_GETOPT_CommandLineOption' array to initialize options | | * `struct GNUNET_GETOPT_CommandLineOption` array to initialize options | |
| * of this type. It should be followed by a pointer to a value of | | * of this type. It should be followed by a pointer to a value of | |
|
| * type 'int'. | | * type `int`. | |
| * | | * | |
| * @param ctx command line processing context | | * @param ctx command line processing context | |
|
| * @param scls additional closure (will point to the 'int') | | * @param scls additional closure (will point to the `int`) | |
| * @param option name of the option | | * @param option name of the option | |
| * @param value not used (NULL) | | * @param value not used (NULL) | |
|
| * @return GNUNET_OK | | * @return #GNUNET_OK (always) | |
| */ | | */ | |
| int | | int | |
| GNUNET_GETOPT_set_one (struct GNUNET_GETOPT_CommandLineProcessorContext *ct
x, | | GNUNET_GETOPT_set_one (struct GNUNET_GETOPT_CommandLineProcessorContext *ct
x, | |
| void *scls, const char *option, const char *value); | | void *scls, const char *option, const char *value); | |
| | | | |
| /** | | /** | |
| * Set an option of type 'char *' from the command line. | | * Set an option of type 'char *' from the command line. | |
| * A pointer to this function should be passed as part of the | | * A pointer to this function should be passed as part of the | |
|
| | | * `struct GNUNET_GETOPT_CommandLineOption` array to initialize options | |
| | | * of this type. It should be followed by a pointer to a value of | |
| | | * type `char *`, which will be allocated with the requested string. | |
| | | * | |
| | | * @param ctx command line processing context | |
| | | * @param scls additional closure (will point to the `char *`, | |
| | | * which will be allocated) | |
| | | * @param option name of the option | |
| | | * @param value actual value of the option (a string) | |
| | | * @return #GNUNET_OK (always) | |
| | | */ | |
| | | int | |
| | | GNUNET_GETOPT_set_string (struct GNUNET_GETOPT_CommandLineProcessorContext | |
| | | *ctx, | |
| | | void *scls, const char *option, const char *value | |
| | | ); | |
| | | | |
| | | /** | |
| | | * Set an option of type 'char *' from the command line doing fs expansion. | |
| | | * A pointer to this function should be passed as part of the | |
| * 'struct GNUNET_GETOPT_CommandLineOption' array to initialize options | | * 'struct GNUNET_GETOPT_CommandLineOption' array to initialize options | |
| * of this type. It should be followed by a pointer to a value of | | * of this type. It should be followed by a pointer to a value of | |
| * type 'char *', which will be allocated with the requested string. | | * type 'char *', which will be allocated with the requested string. | |
| * | | * | |
| * @param ctx command line processing context | | * @param ctx command line processing context | |
| * @param scls additional closure (will point to the 'char *', | | * @param scls additional closure (will point to the 'char *', | |
| * which will be allocated) | | * which will be allocated) | |
| * @param option name of the option | | * @param option name of the option | |
| * @param value actual value of the option (a string) | | * @param value actual value of the option (a string) | |
|
| * @return GNUNET_OK | | * @return #GNUNET_OK (always) | |
| */ | | */ | |
| int | | int | |
|
| GNUNET_GETOPT_set_string (struct GNUNET_GETOPT_CommandLineProcessorContext | | GNUNET_GETOPT_set_filename (struct GNUNET_GETOPT_CommandLineProcessorContex | |
| *ctx, | | t *ctx, | |
| void *scls, const char *option, const char *value | | void *scls, const char *option, const char *val | |
| ); | | ue); | |
| | | | |
| /** | | /** | |
| * Set an option of type 'unsigned int' from the command line. Each | | * Set an option of type 'unsigned int' from the command line. Each | |
| * time the option flag is given, the value is incremented by one. | | * time the option flag is given, the value is incremented by one. | |
| * A pointer to this function should be passed as part of the | | * A pointer to this function should be passed as part of the | |
| * 'struct GNUNET_GETOPT_CommandLineOption' array to initialize options | | * 'struct GNUNET_GETOPT_CommandLineOption' array to initialize options | |
| * of this type. It should be followed by a pointer to a value of | | * of this type. It should be followed by a pointer to a value of | |
| * type 'int'. | | * type 'int'. | |
| * | | * | |
| * @param ctx command line processing context | | * @param ctx command line processing context | |
| * @param scls additional closure (will point to the 'int') | | * @param scls additional closure (will point to the 'int') | |
| * @param option name of the option | | * @param option name of the option | |
| * @param value not used (NULL) | | * @param value not used (NULL) | |
|
| * @return GNUNET_OK | | * @return #GNUNET_OK (always) | |
| */ | | */ | |
| int | | int | |
| GNUNET_GETOPT_increment_value (struct GNUNET_GETOPT_CommandLineProcessorCon
text | | GNUNET_GETOPT_increment_value (struct GNUNET_GETOPT_CommandLineProcessorCon
text | |
| *ctx, void *scls, const char *option, | | *ctx, void *scls, const char *option, | |
| const char *value); | | const char *value); | |
| | | | |
| /* *************** internal prototypes - use macros above! ************* */ | | /* *************** internal prototypes - use macros above! ************* */ | |
| | | | |
| /** | | /** | |
| * Print out details on command line options (implements --help). | | * Print out details on command line options (implements --help). | |
| * | | * | |
| * @param ctx command line processing context | | * @param ctx command line processing context | |
| * @param scls additional closure (points to about text) | | * @param scls additional closure (points to about text) | |
| * @param option name of the option | | * @param option name of the option | |
| * @param value not used (NULL) | | * @param value not used (NULL) | |
|
| * @return GNUNET_NO (do not continue, not an error) | | * @return #GNUNET_NO (do not continue, not an error) | |
| */ | | */ | |
| int | | int | |
| GNUNET_GETOPT_format_help_ (struct GNUNET_GETOPT_CommandLineProcessorContex
t | | GNUNET_GETOPT_format_help_ (struct GNUNET_GETOPT_CommandLineProcessorContex
t | |
| *ctx, void *scls, const char *option, | | *ctx, void *scls, const char *option, | |
| const char *value); | | const char *value); | |
| | | | |
| /** | | /** | |
| * Print out program version (implements --version). | | * Print out program version (implements --version). | |
| * | | * | |
| * @param ctx command line processing context | | * @param ctx command line processing context | |
| * @param scls additional closure (points to version string) | | * @param scls additional closure (points to version string) | |
| * @param option name of the option | | * @param option name of the option | |
| * @param value not used (NULL) | | * @param value not used (NULL) | |
|
| * @return GNUNET_NO (do not continue, not an error) | | * @return #GNUNET_NO (do not continue, not an error) | |
| */ | | */ | |
| int | | int | |
| GNUNET_GETOPT_print_version_ (struct GNUNET_GETOPT_CommandLineProcessorCont
ext | | GNUNET_GETOPT_print_version_ (struct GNUNET_GETOPT_CommandLineProcessorCont
ext | |
| *ctx, void *scls, const char *option, | | *ctx, void *scls, const char *option, | |
| const char *value); | | const char *value); | |
| | | | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| { | | { | |
| #endif | | #endif | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| } | | } | |
| #endif | | #endif | |
| | | | |
|
| | | /** @} */ /* end of group getopt */ | |
| | | | |
| /* ifndef GNUNET_GETOPT_LIB_H */ | | /* ifndef GNUNET_GETOPT_LIB_H */ | |
| #endif | | #endif | |
| /* end of gnunet_getopt_lib.h */ | | /* end of gnunet_getopt_lib.h */ | |
| | | | |
End of changes. 30 change blocks. |
| 32 lines changed or deleted | | 55 lines changed or added | |
|
| gnunet_mesh_service.h | | gnunet_mesh_service.h | |
| /* | | /* | |
| This file is part of GNUnet. | | This file is part of GNUnet. | |
|
| (C) 2009, 2010 Christian Grothoff (and other contributing authors) | | (C) 2009 - 2013 Christian Grothoff (and other contributing authors) | |
| | | | |
| GNUnet is free software; you can redistribute it and/or modify | | GNUnet is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published | | it under the terms of the GNU General Public License as published | |
| by the Free Software Foundation; either version 3, or (at your | | by the Free Software Foundation; either version 3, or (at your | |
| option) any later version. | | option) any later version. | |
| | | | |
| GNUnet is distributed in the hope that it will be useful, but | | GNUnet is distributed in the hope that it will be useful, but | |
| WITHOUT ANY WARRANTY; without even the implied warranty of | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| General Public License for more details. | | General Public License for more details. | |
| | | | |
| You should have received a copy of the GNU General Public License | | You should have received a copy of the GNU General Public License | |
| along with GNUnet; see the file COPYING. If not, write to the | | along with GNUnet; see the file COPYING. If not, write to the | |
| Free Software Foundation, Inc., 59 Temple Place - Suite 330, | | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| Boston, MA 02111-1307, USA. | | Boston, MA 02111-1307, USA. | |
| */ | | */ | |
| | | | |
| /** | | /** | |
| * @file include/gnunet_mesh_service.h | | * @file include/gnunet_mesh_service.h | |
|
| * @brief mesh service; establish tunnels to distant peers | | * @brief mesh service; establish channels to distant peers | |
| * @author Christian Grothoff | | * @author Christian Grothoff | |
| */ | | */ | |
| | | | |
| #ifndef GNUNET_MESH_SERVICE_H | | #ifndef GNUNET_MESH_SERVICE_H | |
| #define GNUNET_MESH_SERVICE_H | | #define GNUNET_MESH_SERVICE_H | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| extern "C" | | extern "C" | |
| { | | { | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| } | | } | |
| #endif | | #endif | |
| #endif | | #endif | |
| | | | |
| #include "gnunet_util_lib.h" | | #include "gnunet_util_lib.h" | |
| #include "gnunet_transport_service.h" | | #include "gnunet_transport_service.h" | |
| | | | |
| /** | | /** | |
| * Version number of GNUnet-mesh API. | | * Version number of GNUnet-mesh API. | |
| */ | | */ | |
|
| #define GNUNET_MESH_VERSION 0x00000000 | | #define GNUNET_MESH_VERSION 0x00000003 | |
| | | | |
| /** | | /** | |
| * Opaque handle to the service. | | * Opaque handle to the service. | |
| */ | | */ | |
| struct GNUNET_MESH_Handle; | | struct GNUNET_MESH_Handle; | |
| | | | |
| /** | | /** | |
|
| * Opaque handle to a tunnel. | | * Opaque handle to a channel. | |
| */ | | */ | |
|
| struct GNUNET_MESH_Tunnel; | | struct GNUNET_MESH_Channel; | |
| | | | |
| | | /** | |
| | | * Channel options. | |
| | | * Second line indicates filed in the MeshChannelInfo union carrying the an | |
| | | swer. | |
| | | */ | |
| | | enum GNUNET_MESH_ChannelOption | |
| | | { | |
| | | /** | |
| | | * Default options: unreliable, default buffering, not out of order. | |
| | | */ | |
| | | GNUNET_MESH_OPTION_DEFAULT = 0x0, | |
| | | | |
| | | /** | |
| | | * Disable buffering on intermediate nodes (for minimum latency). | |
| | | * Yes/No. | |
| | | */ | |
| | | GNUNET_MESH_OPTION_NOBUFFER = 0x1, | |
| | | | |
| | | /** | |
| | | * Enable channel reliability, lost messages will be retransmitted. | |
| | | * Yes/No. | |
| | | */ | |
| | | GNUNET_MESH_OPTION_RELIABLE = 0x2, | |
| | | | |
| | | /** | |
| | | * Enable out of order delivery of messages. | |
| | | * Yes/No. | |
| | | */ | |
| | | GNUNET_MESH_OPTION_OOORDER = 0x4, | |
| | | | |
| | | /** | |
| | | * Who is the peer at the other end of the channel. | |
| | | * Only for use in @c GNUNET_MESH_channel_get_info | |
| | | * struct GNUNET_PeerIdentity *peer | |
| | | */ | |
| | | GNUNET_MESH_OPTION_PEER = 0x8 | |
| | | | |
| | | }; | |
| | | | |
| /** | | /** | |
| * Functions with this signature are called whenever a message is | | * Functions with this signature are called whenever a message is | |
| * received. | | * received. | |
| * | | * | |
|
| * @param cls closure (set from GNUNET_MESH_connect) | | * Each time the function must call #GNUNET_MESH_receive_done on the channe | |
| * @param tunnel connection to the other end | | l | |
| * @param tunnel_ctx place to store local state associated with the tunnel | | * in order to receive the next message. This doesn't need to be immediate: | |
| * @param sender who sent the message | | * can be delayed if some processing is done on the message. | |
| * @param message the actual message | | * | |
| * @param atsi performance data for the connection | | * @param cls Closure (set from #GNUNET_MESH_connect). | |
| * @return GNUNET_OK to keep the connection open, | | * @param channel Connection to the other end. | |
| * GNUNET_SYSERR to close it (signal serious error) | | * @param channel_ctx Place to store local state associated with the channe | |
| | | l. | |
| | | * @param message The actual message. | |
| | | * @return #GNUNET_OK to keep the channel open, | |
| | | * #GNUNET_SYSERR to close it (signal serious error). | |
| */ | | */ | |
| typedef int (*GNUNET_MESH_MessageCallback) (void *cls, | | typedef int (*GNUNET_MESH_MessageCallback) (void *cls, | |
|
| struct GNUNET_MESH_Tunnel * tun | | struct GNUNET_MESH_Channel *cha | |
| nel, | | nnel, | |
| void **tunnel_ctx, | | void **channel_ctx, | |
| const struct GNUNET_PeerIdentit | | const struct GNUNET_MessageHead | |
| y * | | er *message); | |
| sender, | | | |
| const struct GNUNET_MessageHead | | | |
| er * | | | |
| message, | | | |
| const struct GNUNET_ATS_Informa | | | |
| tion | | | |
| * atsi); | | | |
| | | | |
| /** | | /** | |
| * Message handler. Each struct specifies how to handle on particular | | * Message handler. Each struct specifies how to handle on particular | |
| * type of message received. | | * type of message received. | |
| */ | | */ | |
| struct GNUNET_MESH_MessageHandler | | struct GNUNET_MESH_MessageHandler | |
| { | | { | |
| /** | | /** | |
| * Function to call for messages of "type". | | * Function to call for messages of "type". | |
| */ | | */ | |
| | | | |
| skipping to change at line 101 | | skipping to change at line 136 | |
| * Type of the message this handler covers. | | * Type of the message this handler covers. | |
| */ | | */ | |
| uint16_t type; | | uint16_t type; | |
| | | | |
| /** | | /** | |
| * Expected size of messages of this type. Use 0 for variable-size. | | * Expected size of messages of this type. Use 0 for variable-size. | |
| * If non-zero, messages of the given type will be discarded if they | | * If non-zero, messages of the given type will be discarded if they | |
| * do not have the right size. | | * do not have the right size. | |
| */ | | */ | |
| uint16_t expected_size; | | uint16_t expected_size; | |
|
| | | | |
| }; | | }; | |
| | | | |
| /** | | /** | |
|
| * Method called whenever another peer has added us to a tunnel | | * Method called whenever another peer has added us to a channel | |
| * the other peer initiated. | | * the other peer initiated. | |
| * Only called (once) upon reception of data with a message type which was | | * Only called (once) upon reception of data with a message type which was | |
|
| * subscribed to in GNUNET_MESH_connect. A call to GNUNET_MESH_tunnel_destr | | * subscribed to in #GNUNET_MESH_connect. | |
| oy | | * | |
| * causes te tunnel to be ignored and no further notifications are sent abo | | * A call to #GNUNET_MESH_channel_destroy causes te channel to be ignored. | |
| ut | | In | |
| * the same tunnel. | | * this case the handler MUST return NULL. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
|
| * @param tunnel new handle to the tunnel | | * @param channel new handle to the channel | |
| * @param initiator peer that started the tunnel | | * @param initiator peer that started the channel | |
| * @param atsi performance information for the tunnel | | * @param port Port this channel is for. | |
| * @return initial tunnel context for the tunnel | | * @param options MeshOption flag field, with all active option bits set to | |
| | | 1. | |
| | | * | |
| | | * @return initial channel context for the channel | |
| * (can be NULL -- that's not an error) | | * (can be NULL -- that's not an error) | |
| */ | | */ | |
|
| typedef void *(GNUNET_MESH_InboundTunnelNotificationHandler) (void *cls, | | typedef void *(GNUNET_MESH_InboundChannelNotificationHandler) (void *cls, | |
| struct | | struct | |
| GNUNET_MESH_T | | GNUNET_MESH_ | |
| unnel | | Channel | |
| * tunnel, | | * channel, | |
| const struct | | const struct | |
| GNUNET_PeerId | | GNUNET_PeerI | |
| entity | | dentity | |
| * initiator, | | * initiator, | |
| const struct | | uint32_t por | |
| GNUNET_ATS_In | | t, | |
| formation | | enum GNUNET_ | |
| * atsi); | | MESH_ChannelOption | |
| | | options); | |
| /** | | | |
| * Function called whenever an inbound tunnel is destroyed. Should clean u | | /** | |
| p | | * Function called whenever a channel is destroyed. Should clean up | |
| * any associated state. This function is NOT called if the client has | | * any associated state. | |
| * explicitly asked for the tunnel to be destroyed using | | * | |
| * GNUNET_MESH_tunnel_destroy. It must NOT call GNUNET_MESH_tunnel_destroy | | * It must NOT call #GNUNET_MESH_channel_destroy on the channel. | |
| on | | * | |
| * the tunnel. | | * @param cls closure (set from #GNUNET_MESH_connect) | |
| * | | * @param channel connection to the other end (henceforth invalid) | |
| * @param cls closure (set from GNUNET_MESH_connect) | | * @param channel_ctx place where local state associated | |
| * @param tunnel connection to the other end (henceforth invalid) | | * with the channel is stored | |
| * @param tunnel_ctx place where local state associated | | */ | |
| * with the tunnel is stored | | typedef void (GNUNET_MESH_ChannelEndHandler) (void *cls, | |
| */ | | const struct GNUNET_MESH_Chan | |
| typedef void (GNUNET_MESH_TunnelEndHandler) (void *cls, | | nel * | |
| const struct GNUNET_MESH_Tunne | | channel, | |
| l * | | void *channel_ctx); | |
| tunnel, void *tunnel_ctx); | | | |
| | | | |
| /** | | | |
| * Type for an application. Values defined in gnunet_applications.h | | | |
| */ | | | |
| typedef uint32_t GNUNET_MESH_ApplicationType; | | | |
| | | | |
| /** | | /** | |
| * Connect to the mesh service. | | * Connect to the mesh service. | |
| * | | * | |
|
| * @param cfg configuration to use | | * @param cfg Configuration to use. | |
| * @param cls closure for the various callbacks that follow | | * @param cls Closure for the various callbacks that follow (including | |
| * (including handlers in the handlers array) | | * handlers in the handlers array). | |
| * @param new_tunnel function called when an *inbound* tunnel is created | | * @param new_channel Function called when an *incoming* channel is created | |
| * @param cleaner function called when an *inbound* tunnel is destroyed by | | . | |
| the | | * Can be NULL if no inbound channels are desired. | |
| * remote peer, it is *not* called if GNUNET_MESH_tunnel_des | | * See @a ports. | |
| troy | | * @param cleaner Function called when a channel is destroyed by the remote | |
| * is called on the tunnel | | peer. | |
| * @param handlers callbacks for messages we care about, NULL-terminated | | * It is NOT called if #GNUNET_MESH_channel_destroy is calle | |
| * note that the mesh is allowed to drop notifications about | | d on | |
| * inbound messages if the client does not process them fast | | * the channel. | |
| * enough (for this notification type, a bounded queue is us | | * @param handlers Callbacks for messages we care about, NULL-terminated. E | |
| ed) | | ach | |
| * @param stypes list of the applications that this client claims to provid | | * one must call #GNUNET_MESH_receive_done on the channel t | |
| e | | o | |
| | | * receive the next message. Messages of a type that is no | |
| | | t | |
| | | * in the handlers array are ignored if received. | |
| | | * @param ports NULL or 0-terminated array of port numbers for incoming cha | |
| | | nnels. | |
| | | * See @a new_channel. | |
| | | * | |
| * @return handle to the mesh service NULL on error | | * @return handle to the mesh service NULL on error | |
| * (in this case, init is never called) | | * (in this case, init is never called) | |
| */ | | */ | |
| struct GNUNET_MESH_Handle * | | struct GNUNET_MESH_Handle * | |
| GNUNET_MESH_connect (const struct GNUNET_CONFIGURATION_Handle *cfg, void *c
ls, | | GNUNET_MESH_connect (const struct GNUNET_CONFIGURATION_Handle *cfg, void *c
ls, | |
|
| GNUNET_MESH_InboundTunnelNotificationHandler new_tunne | | GNUNET_MESH_InboundChannelNotificationHandler new_chan | |
| l, | | nel, | |
| GNUNET_MESH_TunnelEndHandler cleaner, | | GNUNET_MESH_ChannelEndHandler cleaner, | |
| const struct GNUNET_MESH_MessageHandler *handlers, | | const struct GNUNET_MESH_MessageHandler *handlers, | |
|
| const GNUNET_MESH_ApplicationType *stypes); | | const uint32_t *ports); | |
| | | | |
| /** | | /** | |
|
| * Disconnect from the mesh service. All tunnels will be destroyed. All tun
nel | | * Disconnect from the mesh service. All channels will be destroyed. All ch
annel | |
| * disconnect callbacks will be called on any still connected peers, notify
ing | | * disconnect callbacks will be called on any still connected peers, notify
ing | |
|
| * about their disconnection. The registered inbound tunnel cleaner will be | | * about their disconnection. The registered inbound channel cleaner will b | |
| * called should any inbound tunnels still exist. | | e | |
| | | * called should any inbound channels still exist. | |
| * | | * | |
| * @param handle connection to mesh to disconnect | | * @param handle connection to mesh to disconnect | |
| */ | | */ | |
| void | | void | |
| GNUNET_MESH_disconnect (struct GNUNET_MESH_Handle *handle); | | GNUNET_MESH_disconnect (struct GNUNET_MESH_Handle *handle); | |
| | | | |
| /** | | /** | |
|
| * Method called whenever a peer has disconnected from the tunnel. | | * Create a new channel towards a remote peer. | |
| * Implementations of this callback must NOT call | | | |
| * GNUNET_MESH_tunnel_destroy immediately, but instead schedule those | | | |
| * to run in some other task later. However, calling | | | |
| * "GNUNET_MESH_notify_transmit_ready_cancel" is allowed. | | | |
| * | | | |
| * @param cls closure | | | |
| * @param peer peer identity the tunnel stopped working with | | | |
| */ | | | |
| typedef void (*GNUNET_MESH_PeerDisconnectHandler) (void *cls, | | | |
| const struct | | | |
| GNUNET_PeerIdentity * pe | | | |
| er); | | | |
| | | | |
| /** | | | |
| * Method called whenever a peer has connected to the tunnel. | | | |
| * | | * | |
|
| * @param cls closure | | * If the destination port is not open by any peer or the destination peer | |
| * @param peer peer identity the tunnel was created to, NULL on timeout | | * does not accept the channel, #GNUNET_MESH_ChannelEndHandler will be call | |
| * @param atsi performance data for the connection | | ed | |
| * | | * for this channel. | |
| * TODO: change to return int to let client allow the new peer or not? | | | |
| */ | | | |
| typedef void (*GNUNET_MESH_PeerConnectHandler) (void *cls, | | | |
| const struct GNUNET_PeerIde | | | |
| ntity | | | |
| * peer, | | | |
| const struct | | | |
| GNUNET_ATS_Information * at | | | |
| si); | | | |
| | | | |
| /** | | | |
| * Announce to ther peer the availability of services described by the rege | | | |
| x, | | | |
| * in order to be reachable to other peers via connect_by_string. | | | |
| * | | | |
| * Note that the first GNUNET_REGEX_INITIAL_BYTES characters are considered | | | |
| * to be part of a prefix, (for instance 'gnunet://'). | | | |
| * If you put a variable part in there (*, +. ()), all matching strings | | | |
| * will be stored in the DHT. | | | |
| * | | | |
| * @param h Handle to mesh. | | | |
| * @param regex String with the regular expression describing local service | | | |
| s. | | | |
| * @param compression_characters How many characters can be assigned to one | | | |
| * edge of the graph. The bigger the variabil | | | |
| ity | | | |
| * of the data, the smaller this parameter sh | | | |
| ould | | | |
| * be (down to 1). | | | |
| * For maximum compression, use strlen (regex | | | |
| ) | | | |
| * or 0 (special value). Use with care! | | | |
| */ | | | |
| void | | | |
| GNUNET_MESH_announce_regex (struct GNUNET_MESH_Handle *h, | | | |
| const char *regex, | | | |
| unsigned int compression_characters); | | | |
| | | | |
| /** | | | |
| * Create a new tunnel (we're initiator and will be allowed to add/remove p | | | |
| eers | | | |
| * and to broadcast). | | | |
| * | | * | |
| * @param h mesh handle | | * @param h mesh handle | |
|
| * @param tunnel_ctx client's tunnel context to associate with the tunnel | | * @param channel_ctx client's channel context to associate with the channe | |
| * @param connect_handler function to call when peers are actually connecte | | l | |
| d | | * @param peer peer identity the channel should go to | |
| * @param disconnect_handler function to call when peers are disconnected | | * @param port Port number. | |
| * @param handler_cls closure for connect/disconnect handlers | | * @param options MeshOption flag field, with all desired option bits set t | |
| */ | | o 1. | |
| struct GNUNET_MESH_Tunnel * | | | |
| GNUNET_MESH_tunnel_create (struct GNUNET_MESH_Handle *h, void *tunnel_ctx, | | | |
| GNUNET_MESH_PeerConnectHandler connect_handler, | | | |
| GNUNET_MESH_PeerDisconnectHandler disconnect_han | | | |
| dler, | | | |
| void *handler_cls); | | | |
| | | | |
| /** | | | |
| * Destroy an existing tunnel. The existing callback for the tunnel will NO | | | |
| T | | | |
| * be called. | | | |
| * | | * | |
|
| * @param tunnel tunnel handle | | * @return handle to the channel | |
| */ | | */ | |
|
| void | | struct GNUNET_MESH_Channel * | |
| GNUNET_MESH_tunnel_destroy (struct GNUNET_MESH_Tunnel *tunnel); | | GNUNET_MESH_channel_create (struct GNUNET_MESH_Handle *h, | |
| | | void *channel_ctx, | |
| | | const struct GNUNET_PeerIdentity *peer, | |
| | | uint32_t port, | |
| | | enum GNUNET_MESH_ChannelOption options); | |
| | | | |
| /** | | /** | |
|
| * Request that the tunnel data rate is limited to the speed of the slowest | | * Destroy an existing channel. | |
| * receiver. | | | |
| * | | * | |
|
| * @param tunnel Tunnel affected. | | * The existing end callback for the channel will be called immediately. | |
| */ | | * Any pending outgoing messages will be sent but no incoming messages will | |
| void | | be | |
| GNUNET_MESH_tunnel_speed_min (struct GNUNET_MESH_Tunnel *tunnel); | | * accepted and no data callbacks will be called. | |
| | | | |
| /** | | | |
| * Request that the tunnel data rate is limited to the speed of the fastest | | | |
| * receiver. This is the default behavior. | | | |
| * | | * | |
|
| * @param tunnel Tunnel affected. | | * @param channel Channel handle, becomes invalid after this call. | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_MESH_tunnel_speed_max (struct GNUNET_MESH_Tunnel *tunnel); | | GNUNET_MESH_channel_destroy (struct GNUNET_MESH_Channel *channel); | |
| | | | |
| /** | | /** | |
|
| * Turn on/off the buffering status of the tunnel. | | * Struct to retrieve info about a channel. | |
| * | | | |
| * @param tunnel Tunnel affected. | | | |
| * @param buffer GNUNET_YES to turn buffering on (default), | | | |
| * GNUNET_NO otherwise. | | | |
| */ | | */ | |
|
| void | | union GNUNET_MESH_ChannelInfo | |
| GNUNET_MESH_tunnel_buffer (struct GNUNET_MESH_Tunnel *tunnel, int buffer); | | { | |
| | | | |
| /** | | | |
| * Request that a peer should be added to the tunnel. The connect handler | | | |
| * will be called when the peer connects | | | |
| * | | | |
| * @param tunnel handle to existing tunnel | | | |
| * @param peer peer to add | | | |
| */ | | | |
| void | | | |
| GNUNET_MESH_peer_request_connect_add (struct GNUNET_MESH_Tunnel *tunnel, | | | |
| const struct GNUNET_PeerIdentity *pee | | | |
| r); | | | |
| | | | |
| /** | | | |
| * Request that a peer should be removed from the tunnel. The existing | | | |
| * disconnect handler will be called ONCE if we were connected. | | | |
| * | | | |
| * @param tunnel handle to existing tunnel | | | |
| * @param peer peer to remove | | | |
| */ | | | |
| void | | | |
| GNUNET_MESH_peer_request_connect_del (struct GNUNET_MESH_Tunnel *tunnel, | | | |
| const struct GNUNET_PeerIdentity *pee | | | |
| r); | | | |
| | | | |
| /** | | | |
| * Request that the mesh should try to connect to a peer supporting the giv | | | |
| en | | | |
| * message type. | | | |
| * | | | |
| * @param tunnel handle to existing tunnel | | | |
| * @param app_type application type that must be supported by the peer | | | |
| * (MESH should discover peer in proximity handling this ty | | | |
| pe) | | | |
| */ | | | |
| void | | | |
| GNUNET_MESH_peer_request_connect_by_type (struct GNUNET_MESH_Tunnel *tunnel | | | |
| , | | | |
| GNUNET_MESH_ApplicationType app_t | | | |
| ype); | | | |
| | | | |
|
| /** | | /** | |
| * Request that the mesh should try to connect to a peer matching the | | * #GNUNET_YES / #GNUNET_NO, for binary flags. | |
| * description given in the service string. | | */ | |
| * | | int yes_no; | |
| * @param tunnel handle to existing tunnel | | | |
| * @param description string describing the destination node requirements | | | |
| */ | | | |
| void | | | |
| GNUNET_MESH_peer_request_connect_by_string (struct GNUNET_MESH_Tunnel *tunn | | | |
| el, | | | |
| const char *description); | | | |
| | | | |
|
| /** | | /** | |
| * Request that the given peer isn't added to this tunnel in calls to | | * Peer on the other side of the channel | |
| * connect_by_* calls, (due to misbehaviour, bad performance, ...). | | */ | |
| * | | const struct GNUNET_PeerIdentity peer; | |
| * @param tunnel handle to existing tunnel. | | }; | |
| * @param peer peer identity of the peer which should be blacklisted | | | |
| * for the tunnel. | | | |
| */ | | | |
| void | | | |
| GNUNET_MESH_peer_blacklist (struct GNUNET_MESH_Tunnel *tunnel, | | | |
| const struct GNUNET_PeerIdentity *peer); | | | |
| | | | |
| /** | | /** | |
|
| * Request that the given peer isn't blacklisted anymore from this tunnel, | | * Get information about a channel. | |
| * and therefore can be added in future calls to connect_by_*. | | | |
| * The peer must have been previously blacklisted for this tunnel. | | | |
| * | | * | |
|
| * @param tunnel handle to existing tunnel. | | * @param channel Channel handle. | |
| * @param peer peer identity of the peer which shouldn't be blacklisted | | * @param option Query type GNUNET_MESH_OPTION_* | |
| * for the tunnel anymore. | | * @param ... dependant on option, currently not used | |
| */ | | * @return Union with an answer to the query. | |
| void | | */ | |
| GNUNET_MESH_peer_unblacklist (struct GNUNET_MESH_Tunnel *tunnel, | | const union GNUNET_MESH_ChannelInfo * | |
| const struct GNUNET_PeerIdentity *peer); | | GNUNET_MESH_channel_get_info (struct GNUNET_MESH_Channel *channel, | |
| | | enum GNUNET_MESH_ChannelOption option, ...); | |
| | | | |
| /** | | /** | |
| * Handle for a transmission request. | | * Handle for a transmission request. | |
| */ | | */ | |
| struct GNUNET_MESH_TransmitHandle; | | struct GNUNET_MESH_TransmitHandle; | |
| | | | |
| /** | | /** | |
|
| * Ask the mesh to call "notify" once it is ready to transmit the | | * Ask the mesh to call @a notify once it is ready to transmit the | |
| * given number of bytes to the specified tunnel or target. | | * given number of bytes to the specified channel. | |
| * Only one call can be active at any time, to issue another request, | | * Only one call can be active at any time, to issue another request, | |
| * wait for the callback or cancel the current request. | | * wait for the callback or cancel the current request. | |
| * | | * | |
|
| * @param tunnel tunnel to use for transmission | | * @param channel channel to use for transmission | |
| * @param cork is corking allowed for this transmission? | | * @param cork is corking allowed for this transmission? | |
| * @param maxdelay how long can the message wait? | | * @param maxdelay how long can the message wait? | |
|
| * @param target destination for the message | | | |
| * NULL for multicast to all tunnel targets | | | |
| * @param notify_size how many bytes of buffer space does notify want? | | * @param notify_size how many bytes of buffer space does notify want? | |
| * @param notify function to call when buffer space is available; | | * @param notify function to call when buffer space is available; | |
| * will be called with NULL on timeout or if the overall queue | | * will be called with NULL on timeout or if the overall queue | |
| * for this peer is larger than queue_size and this is currently | | * for this peer is larger than queue_size and this is currently | |
| * the message with the lowest priority | | * the message with the lowest priority | |
|
| * @param notify_cls closure for notify | | * @param notify_cls closure for @a notify | |
| * @return non-NULL if the notify callback was queued, | | * @return non-NULL if the notify callback was queued, | |
| * NULL if we can not even queue the request (insufficient | | * NULL if we can not even queue the request (insufficient | |
|
| * memory); if NULL is returned, "notify" will NOT be called. | | * memory); if NULL is returned, @a notify will NOT be called. | |
| */ | | */ | |
| struct GNUNET_MESH_TransmitHandle * | | struct GNUNET_MESH_TransmitHandle * | |
|
| GNUNET_MESH_notify_transmit_ready (struct GNUNET_MESH_Tunnel *tunnel, int c | | GNUNET_MESH_notify_transmit_ready (struct GNUNET_MESH_Channel *channel, | |
| ork, | | int cork, | |
| struct GNUNET_TIME_Relative maxdelay, | | struct GNUNET_TIME_Relative maxdelay, | |
|
| const struct GNUNET_PeerIdentity *target
, | | | |
| size_t notify_size, | | size_t notify_size, | |
| GNUNET_CONNECTION_TransmitReadyNotify no
tify, | | GNUNET_CONNECTION_TransmitReadyNotify no
tify, | |
| void *notify_cls); | | void *notify_cls); | |
| | | | |
| /** | | /** | |
| * Cancel the specified transmission-ready notification. | | * Cancel the specified transmission-ready notification. | |
| * | | * | |
| * @param th handle that was returned by "notify_transmit_ready". | | * @param th handle that was returned by "notify_transmit_ready". | |
| */ | | */ | |
| void | | void | |
| GNUNET_MESH_notify_transmit_ready_cancel (struct GNUNET_MESH_TransmitHandle | | GNUNET_MESH_notify_transmit_ready_cancel (struct GNUNET_MESH_TransmitHandle | |
| *th); | | *th); | |
| | | | |
| /** | | /** | |
|
| * Method called to retrieve information about each tunnel the mesh peer | | * Indicate readiness to receive the next message on a channel. | |
| | | * | |
| | | * Should only be called once per handler called. | |
| | | * | |
| | | * @param channel Channel that will be allowed to call another handler. | |
| | | */ | |
| | | void | |
| | | GNUNET_MESH_receive_done (struct GNUNET_MESH_Channel *channel); | |
| | | | |
| | | /************************************************************************** | |
| | | ****/ | |
| | | /******************** MONITORING /DEBUG API ********************* | |
| | | ****/ | |
| | | /************************************************************************** | |
| | | ****/ | |
| | | /* The following calls are not useful for normal MESH operation, but for | |
| | | */ | |
| | | /* debug and monitoring of the mesh state. They can be safely ignored. | |
| | | */ | |
| | | /* The API can change at any point without notice. | |
| | | */ | |
| | | /* Please contact the developer if you consider any of this calls useful fo | |
| | | r */ | |
| | | /* normal mesh applications. | |
| | | */ | |
| | | /************************************************************************** | |
| | | ****/ | |
| | | | |
| | | /** | |
| | | * Method called to retrieve information about each channel the mesh peer | |
| * is aware of. | | * is aware of. | |
| * | | * | |
| * @param cls Closure. | | * @param cls Closure. | |
|
| * @param initiator Peer that started the tunnel (owner). | | * @param channel_number Channel number. | |
| * @param tunnel_number Tunnel number. | | * @param origin that started the channel (owner). | |
| * @param peers Array of peer identities that participate in the tunnel. | | * @param target other endpoint of the channel | |
| * @param npeers Number of peers in peers. | | */ | |
| */ | | typedef void (*GNUNET_MESH_ChannelsCB) (void *cls, | |
| typedef void (*GNUNET_MESH_TunnelsCB) (void *cls, | | uint32_t channel_number, | |
| const struct GNUNET_PeerIdentity *ow | | const struct GNUNET_PeerIdentity *o | |
| ner, | | rigin, | |
| unsigned int tunnel_number, | | const struct GNUNET_PeerIdentity *t | |
| const struct GNUNET_PeerIdentity *pe | | arget); | |
| ers, | | | |
| unsigned int npeers); | | | |
| | | | |
| /** | | /** | |
|
| * Method called to retrieve information about a specific tunnel the mesh p
eer | | * Method called to retrieve information about a specific channel the mesh
peer | |
| * is aware of, including all transit nodes. | | * is aware of, including all transit nodes. | |
| * | | * | |
| * @param cls Closure. | | * @param cls Closure. | |
|
| * @param peer Peer in the tunnel's tree. | | * @param peer Peer in the channel's tree. | |
| * @param parent Parent of the current peer. All 0 when peer is root. | | * @param parent Parent of the current peer. All 0 when peer is root. | |
| */ | | */ | |
|
| typedef void (*GNUNET_MESH_TunnelCB) (void *cls, | | typedef void (*GNUNET_MESH_ChannelCB) (void *cls, | |
| const struct GNUNET_PeerIdentity *pee
r, | | const struct GNUNET_PeerIdentity *pee
r, | |
| const struct GNUNET_PeerIdentity *par
ent); | | const struct GNUNET_PeerIdentity *par
ent); | |
| | | | |
| /** | | /** | |
| * Request information about the running mesh peer. | | * Request information about the running mesh peer. | |
|
| * The callback will be called for every tunnel known to the service, | | * The callback will be called for every channel known to the service, | |
| * listing all active peers that blong to the tunnel. | | * listing all active peers that belong to the channel. | |
| * | | * | |
| * If called again on the same handle, it will overwrite the previous | | * If called again on the same handle, it will overwrite the previous | |
| * callback and cls. To retrieve the cls, monitor_cancel must be | | * callback and cls. To retrieve the cls, monitor_cancel must be | |
| * called first. | | * called first. | |
| * | | * | |
| * WARNING: unstable API, likely to change in the future! | | * WARNING: unstable API, likely to change in the future! | |
| * | | * | |
| * @param h Handle to the mesh peer. | | * @param h Handle to the mesh peer. | |
| * @param callback Function to call with the requested data. | | * @param callback Function to call with the requested data. | |
| * @param callback_cls Closure for @c callback. | | * @param callback_cls Closure for @c callback. | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_MESH_get_tunnels (struct GNUNET_MESH_Handle *h, | | GNUNET_MESH_get_channels (struct GNUNET_MESH_Handle *h, | |
| GNUNET_MESH_TunnelsCB callback, | | GNUNET_MESH_ChannelsCB callback, | |
| void *callback_cls); | | void *callback_cls); | |
| | | | |
| /** | | /** | |
|
| * Request information about a specific tunnel of the running mesh peer. | | * Request information about a specific channel of the running mesh peer. | |
| * | | * | |
| * WARNING: unstable API, likely to change in the future! | | * WARNING: unstable API, likely to change in the future! | |
| * | | * | |
| * @param h Handle to the mesh peer. | | * @param h Handle to the mesh peer. | |
|
| * @param initiator ID of the owner of the tunnel. | | * @param initiator ID of the owner of the channel. | |
| * @param tunnel_number Tunnel number. | | * @param channel_number Channel number. | |
| * @param callback Function to call with the requested data. | | * @param callback Function to call with the requested data. | |
| * @param callback_cls Closure for @c callback. | | * @param callback_cls Closure for @c callback. | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_MESH_show_tunnel (struct GNUNET_MESH_Handle *h, | | GNUNET_MESH_show_channel (struct GNUNET_MESH_Handle *h, | |
| struct GNUNET_PeerIdentity *initiator, | | struct GNUNET_PeerIdentity *initiator, | |
|
| unsigned int tunnel_number, | | uint32_t channel_number, | |
| GNUNET_MESH_TunnelCB callback, | | GNUNET_MESH_ChannelCB callback, | |
| void *callback_cls); | | void *callback_cls); | |
| | | | |
| /** | | /** | |
| * Cancel a monitor request. The monitor callback will not be called. | | * Cancel a monitor request. The monitor callback will not be called. | |
| * | | * | |
| * WARNING: unstable API, likely to change in the future! | | * WARNING: unstable API, likely to change in the future! | |
| * | | * | |
| * @param h Mesh handle. | | * @param h Mesh handle. | |
| * | | * | |
| * @return Closure given to GNUNET_MESH_monitor, if any. | | * @return Closure given to GNUNET_MESH_monitor, if any. | |
| */ | | */ | |
| void * | | void * | |
|
| GNUNET_MESH_get_tunnels_cancel (struct GNUNET_MESH_Handle *h); | | GNUNET_MESH_get_channels_cancel (struct GNUNET_MESH_Handle *h); | |
| | | | |
| /** | | /** | |
|
| * Transition API for tunnel ctx management | | * Create a message queue for a mesh channel. | |
| | | * The message queue can only be used to transmit messages, | |
| | | * not to receive them. | |
| * | | * | |
|
| * FIXME deprecated | | * @param channel the channel to create the message qeue for | |
| | | * @return a message queue to messages over the channel | |
| */ | | */ | |
|
| void | | struct GNUNET_MQ_Handle * | |
| GNUNET_MESH_tunnel_set_data (struct GNUNET_MESH_Tunnel *tunnel, void *data) | | GNUNET_MESH_mq_create (struct GNUNET_MESH_Channel *channel); | |
| ; | | | |
| | | | |
| /** | | | |
| * Transition API for tunnel ctx management | | | |
| * | | | |
| * FIXME deprecated | | | |
| */ | | | |
| void * | | | |
| GNUNET_MESH_tunnel_get_data (struct GNUNET_MESH_Tunnel *tunnel); | | | |
| | | | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| { | | { | |
| #endif | | #endif | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| } | | } | |
| #endif | | #endif | |
| | | | |
| /* ifndef GNUNET_MESH_SERVICE_H */ | | /* ifndef GNUNET_MESH_SERVICE_H */ | |
| #endif | | #endif | |
| | | | |
End of changes. 54 change blocks. |
| 319 lines changed or deleted | | 250 lines changed or added | |
|
| gnunet_namestore_service.h | | gnunet_namestore_service.h | |
| /* | | /* | |
| This file is part of GNUnet | | This file is part of GNUnet | |
|
| (C) 2012 Christian Grothoff (and other contributing authors) | | (C) 2012, 2013 Christian Grothoff (and other contributing authors) | |
| | | | |
| GNUnet is free software; you can redistribute it and/or modify | | GNUnet is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published | | 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. | | option) any later version. | |
| | | | |
| GNUnet is distributed in the hope that it will be useful, but | | GNUnet is distributed in the hope that it will be useful, but | |
| WITHOUT ANY WARRANTY; without even the implied warranty of | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| General Public License for more details. | | General Public License for more details. | |
| | | | |
| You should have received a copy of the GNU General Public License | | You should have received a copy of the GNU General Public License | |
| along with GNUnet; see the file COPYING. If not, write to the | | along with GNUnet; see the file COPYING. If not, write to the | |
| Free Software Foundation, Inc., 59 Temple Place - Suite 330, | | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| Boston, MA 02111-1307, USA. | | Boston, MA 02111-1307, USA. | |
| */ | | */ | |
| | | | |
| /** | | /** | |
| * @file include/gnunet_namestore_service.h | | * @file include/gnunet_namestore_service.h | |
| * @brief API that can be used to store naming information on a GNUnet node
; | | * @brief API that can be used to store naming information on a GNUnet node
; | |
|
| | | * Naming information can either be records for which this peer/user | |
| | | * is authoritative, or blocks which are cached, encrypted naming | |
| | | * data from other peers. | |
| * @author Christian Grothoff | | * @author Christian Grothoff | |
|
| * | | | |
| * Other functions we might want: | | | |
| * - enumerate all known zones | | | |
| */ | | */ | |
|
| | | | |
| #ifndef GNUNET_NAMESTORE_SERVICE_H | | #ifndef GNUNET_NAMESTORE_SERVICE_H | |
| #define GNUNET_NAMESTORE_SERVICE_H | | #define GNUNET_NAMESTORE_SERVICE_H | |
| | | | |
| #include "gnunet_util_lib.h" | | #include "gnunet_util_lib.h" | |
| #include "gnunet_block_lib.h" | | #include "gnunet_block_lib.h" | |
|
| | | #include "gnunet_gnsrecord_lib.h" | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| extern "C" | | extern "C" | |
| { | | { | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| } | | } | |
| #endif | | #endif | |
| #endif | | #endif | |
| | | | |
| /** | | /** | |
|
| * Record type indicating any record/'*' | | | |
| */ | | | |
| #define GNUNET_NAMESTORE_TYPE_ANY 0 | | | |
| | | | |
| /** | | | |
| * Record type for GNS zone transfer ("PKEY"). | | | |
| */ | | | |
| #define GNUNET_NAMESTORE_TYPE_PKEY 65536 | | | |
| | | | |
| /** | | | |
| * Record type for GNS zone transfer ("PSEU"). | | | |
| */ | | | |
| #define GNUNET_NAMESTORE_TYPE_PSEU 65537 | | | |
| | | | |
| /** | | | |
| * Record type for GNS legacy hostnames ("LEHO"). | | | |
| */ | | | |
| #define GNUNET_NAMESTORE_TYPE_LEHO 65538 | | | |
| | | | |
| /** | | | |
| * Record type for VPN resolution | | | |
| */ | | | |
| #define GNUNET_NAMESTORE_TYPE_VPN 65539 | | | |
| | | | |
| /** | | | |
| * Record type for zone revocation | | | |
| */ | | | |
| #define GNUNET_NAMESTORE_TYPE_REV 65540 | | | |
| | | | |
| /** | | | |
| * Entry in the queue. | | * Entry in the queue. | |
| */ | | */ | |
| struct GNUNET_NAMESTORE_QueueEntry; | | struct GNUNET_NAMESTORE_QueueEntry; | |
| | | | |
| /** | | /** | |
| * Handle to the namestore service. | | * Handle to the namestore service. | |
| */ | | */ | |
| struct GNUNET_NAMESTORE_Handle; | | struct GNUNET_NAMESTORE_Handle; | |
| | | | |
| /** | | /** | |
| * Handle to the namestore zone iterator. | | * Handle to the namestore zone iterator. | |
| */ | | */ | |
| struct GNUNET_NAMESTORE_ZoneIterator; | | struct GNUNET_NAMESTORE_ZoneIterator; | |
| | | | |
| /** | | /** | |
|
| * Maximum size of a value that can be stored in the namestore. | | | |
| */ | | | |
| #define GNUNET_NAMESTORE_MAX_VALUE_SIZE (63 * 1024) | | | |
| | | | |
| /** | | | |
| * Connect to the namestore service. | | * Connect to the namestore service. | |
| * | | * | |
| * @param cfg configuration to use | | * @param cfg configuration to use | |
| * @return handle to use to access the service | | * @return handle to use to access the service | |
| */ | | */ | |
| struct GNUNET_NAMESTORE_Handle * | | struct GNUNET_NAMESTORE_Handle * | |
| GNUNET_NAMESTORE_connect (const struct GNUNET_CONFIGURATION_Handle *cfg); | | GNUNET_NAMESTORE_connect (const struct GNUNET_CONFIGURATION_Handle *cfg); | |
| | | | |
| /** | | /** | |
| * Disconnect from the namestore service (and free associated | | * Disconnect from the namestore service (and free associated | |
|
| * resources). | | * resources). Must not be called from within operation callbacks of | |
| | | * the API. | |
| * | | * | |
| * @param h handle to the namestore | | * @param h handle to the namestore | |
| */ | | */ | |
| void | | void | |
| GNUNET_NAMESTORE_disconnect (struct GNUNET_NAMESTORE_Handle *h); | | GNUNET_NAMESTORE_disconnect (struct GNUNET_NAMESTORE_Handle *h); | |
| | | | |
| /** | | /** | |
| * Continuation called to notify client about result of the | | * Continuation called to notify client about result of the | |
| * operation. | | * operation. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
|
| * @param success GNUNET_SYSERR on failure (including timeout/queue drop/fa | | * @param success #GNUNET_SYSERR on failure (including timeout/queue drop/f | |
| ilure to validate) | | ailure to validate) | |
| * GNUNET_NO if content was already there or not found | | * #GNUNET_NO if content was already there or not found | |
| * GNUNET_YES (or other positive value) on success | | * #GNUNET_YES (or other positive value) on success | |
| * @param emsg NULL on success, otherwise an error message | | * @param emsg NULL on success, otherwise an error message | |
| */ | | */ | |
| typedef void (*GNUNET_NAMESTORE_ContinuationWithStatus) (void *cls, | | typedef void (*GNUNET_NAMESTORE_ContinuationWithStatus) (void *cls, | |
| int32_t success, | | int32_t success, | |
| const char *emsg); | | const char *emsg); | |
| | | | |
| /** | | /** | |
|
| * Flags that can be set for a record. | | | |
| */ | | | |
| enum GNUNET_NAMESTORE_RecordFlags | | | |
| { | | | |
| | | | |
| /** | | | |
| * No special options. | | | |
| */ | | | |
| GNUNET_NAMESTORE_RF_NONE = 0, | | | |
| | | | |
| /** | | | |
| * This peer is the authority for this record; it must thus | | | |
| * not be deleted (other records can be deleted if we run | | | |
| * out of space). | | | |
| */ | | | |
| GNUNET_NAMESTORE_RF_AUTHORITY = 1, | | | |
| | | | |
| /** | | | |
| * This is a private record of this peer and it should | | | |
| * thus not be handed out to other peers. | | | |
| */ | | | |
| GNUNET_NAMESTORE_RF_PRIVATE = 2, | | | |
| | | | |
| /** | | | |
| * This record was added by the system | | | |
| * and is pending user confimation | | | |
| */ | | | |
| GNUNET_NAMESTORE_RF_PENDING = 4, | | | |
| | | | |
| /** | | | |
| * This expiration time of the record is a relative | | | |
| * time (not an absolute time). | | | |
| */ | | | |
| GNUNET_NAMESTORE_RF_RELATIVE_EXPIRATION = 8, | | | |
| | | | |
| /** | | | |
| * This record should not be used unless all (other) records with an abso | | | |
| lute | | | |
| * expiration time have expired. | | | |
| */ | | | |
| GNUNET_NAMESTORE_RF_SHADOW_RECORD = 16 | | | |
| | | | |
| /** | | | |
| * When comparing flags for record equality for removal, | | | |
| * which flags should must match (in addition to the type, | | | |
| * name, expiration value and data of the record)? All flags | | | |
| * that are not listed here will be ignored for this purpose. | | | |
| * (for example, we don't expect that users will remember to | | | |
| * pass the '--private' option when removing a record from | | | |
| * the namestore, hence we don't require this particular option | | | |
| * to match upon removal). See also | | | |
| * 'GNUNET_NAMESTORE_records_cmp'. | | | |
| */ | | | |
| #define GNUNET_NAMESTORE_RF_RCMP_FLAGS (GNUNET_NAMESTORE_RF_RELATIVE_EXPIRA | | | |
| TION) | | | |
| }; | | | |
| | | | |
| /** | | | |
| * A GNS record. | | | |
| */ | | | |
| struct GNUNET_NAMESTORE_RecordData | | | |
| { | | | |
| | | | |
| /** | | | |
| * Binary value stored in the DNS record. | | | |
| * FIXME: goofy API: sometimes 'data' is individually | | | |
| * 'malloc'ed, sometimes it points into some existing | | | |
| * data area (so sometimes this should be a 'void *', | | | |
| * sometimes a 'const void *'). This is unclean. | | | |
| */ | | | |
| const void *data; | | | |
| | | | |
| /** | | | |
| * Expiration time for the DNS record. Can be relative | | | |
| * or absolute, depending on 'flags'. | | | |
| */ | | | |
| uint64_t expiration_time; | | | |
| | | | |
| /** | | | |
| * Number of bytes in 'data'. | | | |
| */ | | | |
| size_t data_size; | | | |
| | | | |
| /** | | | |
| * Type of the GNS/DNS record. | | | |
| */ | | | |
| uint32_t record_type; | | | |
| | | | |
| /** | | | |
| * Flags for the record. | | | |
| */ | | | |
| enum GNUNET_NAMESTORE_RecordFlags flags; | | | |
| }; | | | |
| | | | |
| /** | | | |
| * Store an item in the namestore. If the item is already present, | | * Store an item in the namestore. If the item is already present, | |
|
| * the expiration time is updated to the max of the existing time and | | * it is replaced with the new record. Use an empty array to | |
| * the new time. This API is used when we cache signatures from other | | * remove all records under the given name. | |
| * authorities. | | | |
| * | | * | |
| * @param h handle to the namestore | | * @param h handle to the namestore | |
|
| * @param zone_key public key of the zone | | * @param pkey private key of the zone | |
| * @param name name that is being mapped (at most 255 characters long) | | * @param label name that is being mapped | |
| * @param freshness when does the corresponding block in the DHT expire (un | | * @param rd_count number of records in the 'rd' array | |
| til | | | |
| * when should we never do a DHT lookup for the same name aga | | | |
| in)? | | | |
| * @param rd_count number of entries in 'rd' array | | | |
| * @param rd array of records with data to store | | * @param rd array of records with data to store | |
|
| * @param signature signature for all the records in the zone under the giv
en name | | | |
| * @param cont continuation to call when done | | * @param cont continuation to call when done | |
|
| * @param cont_cls closure for cont | | * @param cont_cls closure for @a cont | |
| * @return handle to abort the request | | * @return handle to abort the request | |
| */ | | */ | |
| struct GNUNET_NAMESTORE_QueueEntry * | | struct GNUNET_NAMESTORE_QueueEntry * | |
|
| GNUNET_NAMESTORE_record_put (struct GNUNET_NAMESTORE_Handle *h, | | GNUNET_NAMESTORE_records_store (struct GNUNET_NAMESTORE_Handle *h, | |
| const struct GNUNET_CRYPTO_RsaPublicKeyBinaryEn | | const struct GNUNET_CRYPTO_EcdsaPrivateKey * | |
| coded *zone_key, | | pkey, | |
| const char *name, | | const char *label, | |
| struct GNUNET_TIME_Absolute freshness, | | unsigned int rd_count, | |
| unsigned int rd_count, | | const struct GNUNET_GNSRECORD_Data *rd, | |
| const struct GNUNET_NAMESTORE_RecordData *rd, | | GNUNET_NAMESTORE_ContinuationWithStatus cont | |
| const struct GNUNET_CRYPTO_RsaSignature *signat | | , | |
| ure, | | void *cont_cls); | |
| GNUNET_NAMESTORE_ContinuationWithStatus cont, | | | |
| void *cont_cls); | | /** | |
| | | * Process a record that was stored in the namestore. | |
| /** | | * | |
| * Check if a signature is valid. This API is used by the GNS Block | | * @param cls closure | |
| * to validate signatures received from the network. | | * @param zone private key of the zone; NULL on disconnect | |
| * | | * @param label label of the records; NULL on disconnect | |
| * @param public_key public key of the zone | | * @param rd_count number of entries in @a rd array, 0 if label was deleted | |
| * @param freshness time set for block expiration | | | |
| * @param name name that is being mapped (at most 255 characters long) | | | |
| * @param rd_count number of entries in 'rd' array | | | |
| * @param rd array of records with data to store | | * @param rd array of records with data to store | |
|
| * @param signature signature for all the records in the zone under the giv | | | |
| en name | | | |
| * @return GNUNET_OK if the signature is valid | | | |
| */ | | */ | |
|
| int | | typedef void (*GNUNET_NAMESTORE_RecordMonitor) (void *cls, | |
| GNUNET_NAMESTORE_verify_signature (const struct GNUNET_CRYPTO_RsaPublicKeyB | | const struct GNUNET_CRYPTO_E | |
| inaryEncoded *public_key, | | cdsaPrivateKey *zone, | |
| const struct GNUNET_TIME_Absolute freshn | | const char *label, | |
| ess, | | unsigned int rd_count, | |
| const char *name, | | const struct GNUNET_GNSRECOR | |
| unsigned int rd_count, | | D_Data *rd); | |
| const struct GNUNET_NAMESTORE_RecordData | | | |
| *rd, | | | |
| const struct GNUNET_CRYPTO_RsaSignature | | | |
| *signature); | | | |
| | | | |
| /** | | /** | |
|
| * Store an item in the namestore. If the item is already present, | | * Set the desired nick name for a zone | |
| * the expiration time is updated to the max of the existing time and | | | |
| * the new time. This API is used by the authority of a zone. | | | |
| * FIXME: consider allowing to pass multiple records in one call! | | | |
| * | | * | |
| * @param h handle to the namestore | | * @param h handle to the namestore | |
| * @param pkey private key of the zone | | * @param pkey private key of the zone | |
|
| * @param name name that is being mapped (at most 255 characters long) | | * @param nick the nick name to set | |
| * @param rd record data to store | | | |
| * @param cont continuation to call when done | | * @param cont continuation to call when done | |
|
| * @param cont_cls closure for cont | | * @param cont_cls closure for 'cont' | |
| * @return handle to abort the request | | * @return handle to abort the request | |
| */ | | */ | |
| struct GNUNET_NAMESTORE_QueueEntry * | | struct GNUNET_NAMESTORE_QueueEntry * | |
|
| GNUNET_NAMESTORE_record_create (struct GNUNET_NAMESTORE_Handle *h, | | GNUNET_NAMESTORE_set_nick (struct GNUNET_NAMESTORE_Handle *h, | |
| const struct GNUNET_CRYPTO_RsaPrivateKey *p | | const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey | |
| key, | | , | |
| const char *name, | | const char *nick, | |
| const struct GNUNET_NAMESTORE_RecordData *r | | GNUNET_NAMESTORE_ContinuationWithStatus cont, | |
| d, | | void *cont_cls); | |
| GNUNET_NAMESTORE_ContinuationWithStatus con | | | |
| t, | | | |
| void *cont_cls); | | | |
| | | | |
| /** | | /** | |
|
| * Explicitly remove some content from the database. The | | * Lookup an item in the namestore. | |
| * "cont"inuation will be called with status "GNUNET_OK" if content | | | |
| * was removed, "GNUNET_NO" if no matching entry was found and | | | |
| * "GNUNET_SYSERR" on all other types of errors. | | | |
| * This API is used by the authority of a zone. | | | |
| * | | * | |
| * @param h handle to the namestore | | * @param h handle to the namestore | |
| * @param pkey private key of the zone | | * @param pkey private key of the zone | |
|
| * @param name name that is being mapped (at most 255 characters long) | | * @param label name that is being mapped | |
| * @param rd record data, remove specific record, NULL to remove the name | | * @param rm function to call with the result (with 0 records if we don't h | |
| and all records | | ave that label) | |
| * @param cont continuation to call when done | | * @param rm_cls closure for @a rm | |
| * @param cont_cls closure for cont | | | |
| * @return handle to abort the request | | * @return handle to abort the request | |
| */ | | */ | |
| struct GNUNET_NAMESTORE_QueueEntry * | | struct GNUNET_NAMESTORE_QueueEntry * | |
|
| GNUNET_NAMESTORE_record_remove (struct GNUNET_NAMESTORE_Handle *h, | | GNUNET_NAMESTORE_records_lookup (struct GNUNET_NAMESTORE_Handle *h, | |
| const struct GNUNET_CRYPTO_RsaPrivateKey *pk | | const struct GNUNET_CRYPTO_EcdsaPrivateKey | |
| ey, | | *pkey, | |
| const char *name, | | const char *label, | |
| const struct GNUNET_NAMESTORE_RecordData *rd | | GNUNET_NAMESTORE_RecordMonitor rm, | |
| , | | void *rm_cls); | |
| GNUNET_NAMESTORE_ContinuationWithStatus cont | | | |
| , | | | |
| void *cont_cls); | | | |
| | | | |
| /** | | /** | |
|
| * Process a record that was stored in the namestore. | | * Look for an existing PKEY delegation record for a given public key. | |
| * | | * Returns at most one result to the processor. | |
| * @param cls closure | | | |
| * @param zone_key public key of the zone | | | |
| * @param freshness when does the corresponding block in the DHT expire (un | | | |
| til | | | |
| * when should we never do a DHT lookup for the same name aga | | | |
| in)?; | | | |
| * GNUNET_TIME_UNIT_ZERO_ABS if there are no records of any t | | | |
| ype in the namestore, | | | |
| * or the expiration time of the block in the namestore (even | | | |
| if there are zero | | | |
| * records matching the desired record type) | | | |
| * @param name name that is being mapped (at most 255 characters long) | | | |
| * @param rd_count number of entries in 'rd' array | | | |
| * @param rd array of records with data to store | | | |
| * @param signature signature of the record block, NULL if signature is una | | | |
| vailable (i.e. | | | |
| * because the user queried for a particular record type only) | | | |
| */ | | | |
| typedef void (*GNUNET_NAMESTORE_RecordProcessor) (void *cls, | | | |
| const struct GNUNET_CRYPTO | | | |
| _RsaPublicKeyBinaryEncoded *zone_key, | | | |
| struct GNUNET_TIME_Absolut | | | |
| e freshness, | | | |
| const char *name, | | | |
| unsigned int rd_len, | | | |
| const struct GNUNET_NAMEST | | | |
| ORE_RecordData *rd, | | | |
| const struct GNUNET_CRYPTO | | | |
| _RsaSignature *signature); | | | |
| | | | |
| /** | | | |
| * Get a result for a particular key from the namestore. The processor | | | |
| * will only be called once. When using this functions, relative expiratio | | | |
| n | | | |
| * times will be converted to absolute expiration times and a signature | | | |
| * will be created if we are the authority. The record data and signature | | | |
| * passed to 'proc' is thus always suitable for passing on to other peers | | | |
| * (if we are the authority). If the record type is NOT set to 'ANY' and | | | |
| * if we are NOT the authority, then non-matching records may be omitted | | | |
| * from the result and no valid signature can be created; in this case, | | | |
| * 'signature' will be NULL and the result cannot be given to other peers. | | | |
| * | | * | |
| * @param h handle to the namestore | | * @param h handle to the namestore | |
|
| * @param zone zone to look up a record from | | * @param zone public key of the zone to look up in, never NULL | |
| * @param name name to look up | | * @param value_zone public key of the target zone (value), never NULL | |
| * @param record_type desired record type, 0 for all | | | |
| * @param proc function to call on the matching records, or with | | * @param proc function to call on the matching records, or with | |
| * NULL (rd_count == 0) if there are no matching records | | * NULL (rd_count == 0) if there are no matching records | |
|
| * @param proc_cls closure for proc | | * @param proc_cls closure for @a proc | |
| * @return a handle that can be used to | | * @return a handle that can be used to | |
| * cancel | | * cancel | |
| */ | | */ | |
| struct GNUNET_NAMESTORE_QueueEntry * | | struct GNUNET_NAMESTORE_QueueEntry * | |
|
| GNUNET_NAMESTORE_lookup_record (struct GNUNET_NAMESTORE_Handle *h, | | GNUNET_NAMESTORE_zone_to_name (struct GNUNET_NAMESTORE_Handle *h, | |
| const struct GNUNET_CRYPTO_ShortHashCode *zo | | const struct GNUNET_CRYPTO_EcdsaPrivateKey *z | |
| ne, | | one, | |
| const char *name, | | const struct GNUNET_CRYPTO_EcdsaPublicKey *va | |
| uint32_t record_type, | | lue_zone, | |
| GNUNET_NAMESTORE_RecordProcessor proc, void | | GNUNET_NAMESTORE_RecordMonitor proc, void *pr | |
| *proc_cls); | | oc_cls); | |
| | | | |
| /** | | /** | |
|
| * Look for an existing PKEY delegation record for a given public key. | | * Cancel a namestore operation. The final callback from the | |
| * Returns at most one result to the processor. | | * operation must not have been done yet. Must be called on any | |
| | | * namestore operation that has not yet completed prior to calling | |
| | | * #GNUNET_NAMESTORE_disconnect. | |
| * | | * | |
|
| * @param h handle to the namestore | | * @param qe operation to cancel | |
| * @param zone hash of public key of the zone to look up in, never NULL | | | |
| * @param value_zone hash of the public key of the target zone (value), nev | | | |
| er NULL | | | |
| * @param proc function to call on the matching records, or with | | | |
| * NULL (rd_count == 0) if there are no matching records | | | |
| * @param proc_cls closure for proc | | | |
| * @return a handle that can be used to | | | |
| * cancel | | | |
| */ | | */ | |
|
| struct GNUNET_NAMESTORE_QueueEntry * | | void | |
| GNUNET_NAMESTORE_zone_to_name (struct GNUNET_NAMESTORE_Handle *h, | | GNUNET_NAMESTORE_cancel (struct GNUNET_NAMESTORE_QueueEntry *qe); | |
| const struct GNUNET_CRYPTO_ShortHashCode *zon | | | |
| e, | | | |
| const struct GNUNET_CRYPTO_ShortHashCode *val | | | |
| ue_zone, | | | |
| GNUNET_NAMESTORE_RecordProcessor proc, void * | | | |
| proc_cls); | | | |
| | | | |
| /** | | /** | |
| * Starts a new zone iteration (used to periodically PUT all of our | | * Starts a new zone iteration (used to periodically PUT all of our | |
|
| * records into our DHT). "proc" will be called once immediately, and | | * records into our DHT). This MUST lock the struct GNUNET_NAMESTORE_Handle | |
| * then again after "GNUNET_NAMESTORE_zone_iterator_next" is invoked. | | * for any other calls than #GNUNET_NAMESTORE_zone_iterator_next and | |
| * | | * #GNUNET_NAMESTORE_zone_iteration_stop. @a proc will be called once | |
| * By specifying a 'zone' of NULL and setting 'GNUNET_NAMESTORE_RF_AUTHORIT | | * immediately, and then again after | |
| Y' | | * #GNUNET_NAMESTORE_zone_iterator_next is invoked. | |
| * in 'must_have_flags', we can iterate over all records for which we are | | | |
| * the authority (the 'authority' flag will NOT be set in the returned | | | |
| * records anyway). | | | |
| * | | | |
| * The 'GNUNET_NAMESTORE_RF_RELATIVE_EXPIRATION' | | | |
| * bit in 'must_have_flags' has a special meaning: | | | |
| * | | | |
| * 0) If the bit is clear, all relative expriation times are converted to | | | |
| * absolute expiration times. This is useful for performing DHT PUT | | | |
| * operations (and zone transfers) of our zone. The generated signature | | | |
| s | | | |
| * will be valid for other peers. | | | |
| * 1) if it is set, it means that relative expiration times should be | | | |
| * preserved when returned (this is useful for the zone editor user | | | |
| * interface). No signatures will be created in this case, as | | | |
| * signatures must not cover records with relative expiration times. | | | |
| * | | | |
| * Note that not all queries against this interface are equally performant | | | |
| * as for some combinations no efficient index may exist. | | | |
| * | | * | |
| * @param h handle to the namestore | | * @param h handle to the namestore | |
| * @param zone zone to access, NULL for all zones | | * @param zone zone to access, NULL for all zones | |
|
| * @param must_have_flags flags that must be set for the record to be retur | | | |
| ned | | | |
| * @param must_not_have_flags flags that must NOT be set for the record to | | | |
| be returned | | | |
| * @param proc function to call on each name from the zone; it | | * @param proc function to call on each name from the zone; it | |
| * will be called repeatedly with a value (if available) | | * will be called repeatedly with a value (if available) | |
|
| * and always once at the end with a name of NULL. | | * and always once at the end with a label of NULL. | |
| * @param proc_cls closure for proc | | * @param proc_cls closure for @a proc | |
| * @return an iterator handle to use for iteration | | * @return an iterator handle to use for iteration | |
| */ | | */ | |
| struct GNUNET_NAMESTORE_ZoneIterator * | | struct GNUNET_NAMESTORE_ZoneIterator * | |
| GNUNET_NAMESTORE_zone_iteration_start (struct GNUNET_NAMESTORE_Handle *h, | | GNUNET_NAMESTORE_zone_iteration_start (struct GNUNET_NAMESTORE_Handle *h, | |
|
| const struct GNUNET_CRYPTO_ShortHashC | | const struct GNUNET_CRYPTO_EcdsaPriva | |
| ode *zone, | | teKey *zone, | |
| enum GNUNET_NAMESTORE_RecordFlags mus | | GNUNET_NAMESTORE_RecordMonitor proc, | |
| t_have_flags, | | | |
| enum GNUNET_NAMESTORE_RecordFlags mus | | | |
| t_not_have_flags, | | | |
| GNUNET_NAMESTORE_RecordProcessor proc | | | |
| , | | | |
| void *proc_cls); | | void *proc_cls); | |
| | | | |
| /** | | /** | |
|
| * Calls the record processor specified in GNUNET_NAMESTORE_zone_iteration_
start | | * Calls the record processor specified in #GNUNET_NAMESTORE_zone_iteration
_start | |
| * for the next record. | | * for the next record. | |
| * | | * | |
| * @param it the iterator | | * @param it the iterator | |
| */ | | */ | |
| void | | void | |
| GNUNET_NAMESTORE_zone_iterator_next (struct GNUNET_NAMESTORE_ZoneIterator *
it); | | GNUNET_NAMESTORE_zone_iterator_next (struct GNUNET_NAMESTORE_ZoneIterator *
it); | |
| | | | |
| /** | | /** | |
| * Stops iteration and releases the namestore handle for further calls. Mu
st | | * Stops iteration and releases the namestore handle for further calls. Mu
st | |
| * be called on any iteration that has not yet completed prior to calling | | * be called on any iteration that has not yet completed prior to calling | |
|
| * 'GNUNET_NAMESTORE_disconnect'. | | * #GNUNET_NAMESTORE_disconnect. | |
| * | | * | |
| * @param it the iterator | | * @param it the iterator | |
| */ | | */ | |
| void | | void | |
| GNUNET_NAMESTORE_zone_iteration_stop (struct GNUNET_NAMESTORE_ZoneIterator
*it); | | GNUNET_NAMESTORE_zone_iteration_stop (struct GNUNET_NAMESTORE_ZoneIterator
*it); | |
| | | | |
| /** | | /** | |
|
| * Cancel a namestore operation. The final callback from the | | * Handle for a monitoring activity. | |
| * operation must not have been done yet. Must be called on any | | | |
| * namestore operation that has not yet completed prior to calling | | | |
| * 'GNUNET_NAMESTORE_disconnect'. | | | |
| * | | | |
| * @param qe operation to cancel | | | |
| */ | | */ | |
|
| void | | struct GNUNET_NAMESTORE_ZoneMonitor; | |
| GNUNET_NAMESTORE_cancel (struct GNUNET_NAMESTORE_QueueEntry *qe); | | | |
| | | | |
| /* convenience APIs for serializing / deserializing GNS records */ | | | |
| | | | |
| /** | | /** | |
|
| * Calculate how many bytes we will need to serialize the given | | * Function called once the monitor has caught up with the current | |
| * records. | | * state of the database. Will be called AGAIN after each disconnect | |
| * | | * (record monitor called with 'NULL' for zone_key) once we're again | |
| * @param rd_count number of records in the rd array | | * in sync. | |
| * @param rd array of GNUNET_NAMESTORE_RecordData with rd_count elements | | | |
| * | | | |
| * @return the required size to serialize | | | |
| * | | * | |
|
| | | * @param cls closure | |
| */ | | */ | |
|
| size_t | | typedef void (*GNUNET_NAMESTORE_RecordsSynchronizedCallback)(void *cls); | |
| GNUNET_NAMESTORE_records_get_size (unsigned int rd_count, | | | |
| const struct GNUNET_NAMESTORE_RecordData | | | |
| *rd); | | | |
| | | | |
| /** | | | |
| * Serialize the given records to the given destination buffer. | | | |
| * | | | |
| * @param rd_count number of records in the rd array | | | |
| * @param rd array of GNUNET_NAMESTORE_RecordData with rd_count elements | | | |
| * @param dest_size size of the destination array | | | |
| * @param dest where to write the result | | | |
| * | | | |
| * @return the size of serialized records, -1 if records do not fit | | | |
| */ | | | |
| ssize_t | | | |
| GNUNET_NAMESTORE_records_serialize (unsigned int rd_count, | | | |
| const struct GNUNET_NAMESTORE_RecordData | | | |
| *rd, | | | |
| size_t dest_size, | | | |
| char *dest); | | | |
| | | | |
| /** | | | |
| * Deserialize the given records to the given destination. | | | |
| * | | | |
| * @param len size of the serialized record data | | | |
| * @param src the serialized record data | | | |
| * @param rd_count number of records in the rd array | | | |
| * @param dest where to put the data | | | |
| * | | | |
| * @return GNUNET_OK on success, GNUNET_SYSERR on error | | | |
| */ | | | |
| int | | | |
| GNUNET_NAMESTORE_records_deserialize (size_t len, | | | |
| const char *src, | | | |
| unsigned int rd_count, | | | |
| struct GNUNET_NAMESTORE_RecordData *de | | | |
| st); | | | |
| | | | |
| /** | | | |
| * Convert the 'value' of a record to a string. | | | |
| * | | | |
| * @param type type of the record | | | |
| * @param data value in binary encoding | | | |
| * @param data_size number of bytes in data | | | |
| * @return NULL on error, otherwise human-readable representation of the va | | | |
| lue | | | |
| */ | | | |
| char * | | | |
| GNUNET_NAMESTORE_value_to_string (uint32_t type, | | | |
| const void *data, | | | |
| size_t data_size); | | | |
| | | | |
| /** | | | |
| * Convert human-readable version of a 'value' of a record to the binary | | | |
| * representation. | | | |
| * | | | |
| * @param type type of the record | | | |
| * @param s human-readable string | | | |
| * @param data set to value in binary encoding (will be allocated) | | | |
| * @param data_size set to number of bytes in data | | | |
| * @return GNUNET_OK on success | | | |
| */ | | | |
| int | | | |
| GNUNET_NAMESTORE_string_to_value (uint32_t type, | | | |
| const char *s, | | | |
| void **data, | | | |
| size_t *data_size); | | | |
| | | | |
| /** | | | |
| * Convert a type name (i.e. "AAAA") to the corresponding number. | | | |
| * | | | |
| * @param typename name to convert | | | |
| * @return corresponding number, UINT32_MAX on error | | | |
| */ | | | |
| uint32_t | | | |
| GNUNET_NAMESTORE_typename_to_number (const char *typename); | | | |
| | | | |
| /** | | /** | |
|
| * Convert a type number (i.e. 1) to the corresponding type string (i.e. "A | | * Begin monitoring a zone for changes. Will first call the @a | |
| ") | | * monitor function on all existing records in the selected zone(s) if | |
| * | | * @a iterate_first is #GNUNET_YES. In any case, we will then call @a | |
| * @param type number of a type to convert | | * sync_cb, and then afterwards call the @a monitor whenever a record | |
| * @return corresponding typestring, NULL on error | | * changes. If the namestore disconnects, the @a monitor function is | |
| */ | | * called with a disconnect event; if the connection is | |
| const char * | | * re-established, the process begins from the start (depending on @a | |
| GNUNET_NAMESTORE_number_to_typename (uint32_t type); | | * iterate_first, we first do all existing records, then @a sync, then | |
| | | * updates). | |
| | | * | |
| | | * @param cfg configuration to use to connect to namestore | |
| | | * @param zone zone to monitor, NULL for all zones | |
| | | * @param iterate_first #GNUNET_YES to first iterate over all existing reco | |
| | | rds, | |
| | | * #GNUNET_NO to only return changes that happen from | |
| | | now on | |
| | | * @param monitor function to call on zone changes | |
| | | * @param sync_cb function called when we're in sync with the namestore | |
| | | * @param cls closure for @a monitor and @a sync_cb | |
| | | * @return handle to stop monitoring | |
| | | */ | |
| | | struct GNUNET_NAMESTORE_ZoneMonitor * | |
| | | GNUNET_NAMESTORE_zone_monitor_start (const struct GNUNET_CONFIGURATION_Hand | |
| | | le *cfg, | |
| | | const struct GNUNET_CRYPTO_EcdsaPrivate | |
| | | Key *zone, | |
| | | int iterate_first, | |
| | | GNUNET_NAMESTORE_RecordMonitor monitor, | |
| | | GNUNET_NAMESTORE_RecordsSynchronizedCal | |
| | | lback sync_cb, | |
| | | void *cls); | |
| | | | |
| /** | | /** | |
|
| * Test if a given record is expired. | | * Stop monitoring a zone for changes. | |
| * | | * | |
|
| * @return GNUNET_YES if the record is expired, | | * @param zm handle to the monitor activity to stop | |
| * GNUNET_NO if not | | | |
| */ | | */ | |
|
| int | | void | |
| GNUNET_NAMESTORE_is_expired (const struct GNUNET_NAMESTORE_RecordData *rd); | | GNUNET_NAMESTORE_zone_monitor_stop (struct GNUNET_NAMESTORE_ZoneMonitor *zm | |
| | | ); | |
| | | | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| { | | { | |
| #endif | | #endif | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| } | | } | |
| #endif | | #endif | |
| | | | |
| /* end of gnunet_namestore_service.h */ | | /* end of gnunet_namestore_service.h */ | |
| #endif | | #endif | |
| | | | |
End of changes. 47 change blocks. |
| 442 lines changed or deleted | | 137 lines changed or added | |
|
| gnunet_network_lib.h | | gnunet_network_lib.h | |
| /* | | /* | |
| This file is part of GNUnet. | | This file is part of GNUnet. | |
|
| (C) 2009 Christian Grothoff (and other contributing authors) | | (C) 2009-2013 Christian Grothoff (and other contributing authors) | |
| | | | |
| GNUnet is free software; you can redistribute it and/or modify | | GNUnet is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published | | 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. | | option) any later version. | |
| | | | |
| GNUnet is distributed in the hope that it will be useful, but | | GNUnet is distributed in the hope that it will be useful, but | |
| WITHOUT ANY WARRANTY; without even the implied warranty of | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| General Public License for more details. | | General Public License for more details. | |
| | | | |
| You should have received a copy of the GNU General Public License | | You should have received a copy of the GNU General Public License | |
| along with GNUnet; see the file COPYING. If not, write to the | | along with GNUnet; see the file COPYING. If not, write to the | |
| Free Software Foundation, Inc., 59 Temple Place - Suite 330, | | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| Boston, MA 02111-1307, USA. | | Boston, MA 02111-1307, USA. | |
| */ | | */ | |
| | | | |
| /** | | /** | |
| * @file include/gnunet_network_lib.h | | * @file include/gnunet_network_lib.h | |
| * @brief basic low-level networking interface | | * @brief basic low-level networking interface | |
| * @author Nils Durner | | * @author Nils Durner | |
| */ | | */ | |
|
| | | | |
| #ifndef GNUNET_NETWORK_LIB_H | | #ifndef GNUNET_NETWORK_LIB_H | |
| #define GNUNET_NETWORK_LIB_H | | #define GNUNET_NETWORK_LIB_H | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| extern "C" | | extern "C" | |
| { | | { | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| } | | } | |
| #endif | | #endif | |
| #endif | | #endif | |
| | | | |
| skipping to change at line 75 | | skipping to change at line 74 | |
| | | | |
| }; | | }; | |
| | | | |
| #include "gnunet_disk_lib.h" | | #include "gnunet_disk_lib.h" | |
| #include "gnunet_time_lib.h" | | #include "gnunet_time_lib.h" | |
| | | | |
| /** | | /** | |
| * Test if the given protocol family is supported by this system. | | * Test if the given protocol family is supported by this system. | |
| * | | * | |
| * @param pf protocol family to test (PF_INET, PF_INET6, PF_UNIX) | | * @param pf protocol family to test (PF_INET, PF_INET6, PF_UNIX) | |
|
| * @return GNUNET_OK if the PF is supported | | * @return #GNUNET_OK if the PF is supported | |
| */ | | */ | |
| int | | int | |
| GNUNET_NETWORK_test_pf (int pf); | | GNUNET_NETWORK_test_pf (int pf); | |
| | | | |
| /** | | /** | |
| * Given a unixpath that is too long (larger than UNIX_PATH_MAX), | | * Given a unixpath that is too long (larger than UNIX_PATH_MAX), | |
| * shorten it to an acceptable length while keeping it unique | | * shorten it to an acceptable length while keeping it unique | |
| * and making sure it remains a valid filename (if possible). | | * and making sure it remains a valid filename (if possible). | |
| * | | * | |
| * @param unixpath long path, will be freed (or same pointer returned | | * @param unixpath long path, will be freed (or same pointer returned | |
| | | | |
| skipping to change at line 105 | | skipping to change at line 104 | |
| * close-on-exec flag). | | * close-on-exec flag). | |
| * | | * | |
| * @param desc bound socket | | * @param desc bound socket | |
| * @param address address of the connecting peer, may be NULL | | * @param address address of the connecting peer, may be NULL | |
| * @param address_len length of address | | * @param address_len length of address | |
| * @return client socket | | * @return client socket | |
| */ | | */ | |
| struct GNUNET_NETWORK_Handle * | | struct GNUNET_NETWORK_Handle * | |
| GNUNET_NETWORK_socket_accept (const struct GNUNET_NETWORK_Handle *desc, | | GNUNET_NETWORK_socket_accept (const struct GNUNET_NETWORK_Handle *desc, | |
| struct sockaddr *address, | | struct sockaddr *address, | |
|
| socklen_t * address_len); | | socklen_t *address_len); | |
| | | | |
| /** | | /** | |
| * Box a native socket (and check that it is a socket). | | * Box a native socket (and check that it is a socket). | |
| * | | * | |
| * @param fd socket to box | | * @param fd socket to box | |
| * @return NULL on error (including not supported on target platform) | | * @return NULL on error (including not supported on target platform) | |
| */ | | */ | |
| struct GNUNET_NETWORK_Handle * | | struct GNUNET_NETWORK_Handle * | |
| GNUNET_NETWORK_socket_box_native (SOCKTYPE fd); | | GNUNET_NETWORK_socket_box_native (SOCKTYPE fd); | |
| | | | |
| /** | | /** | |
|
| * Bind to a connected socket | | * Set if a socket should use blocking or non-blocking IO. | |
| | | * | |
| | | * @param fd socket | |
| | | * @param doBlock blocking mode | |
| | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | |
| | | */ | |
| | | int | |
| | | GNUNET_NETWORK_socket_set_blocking (struct GNUNET_NETWORK_Handle *fd, | |
| | | int doBlock); | |
| | | | |
| | | /** | |
| | | * Bind a socket to a particular address. | |
| * | | * | |
| * @param desc socket to bind | | * @param desc socket to bind | |
| * @param address address to be bound | | * @param address address to be bound | |
| * @param address_len length of address | | * @param address_len length of address | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR otherwise | | * @return #GNUNET_OK on success, #GNUNET_SYSERR otherwise | |
| */ | | */ | |
| int | | int | |
| GNUNET_NETWORK_socket_bind (struct GNUNET_NETWORK_Handle *desc, | | GNUNET_NETWORK_socket_bind (struct GNUNET_NETWORK_Handle *desc, | |
| const struct sockaddr *address, | | const struct sockaddr *address, | |
| socklen_t address_len); | | socklen_t address_len); | |
| | | | |
| /** | | /** | |
| * Close a socket. | | * Close a socket. | |
| * | | * | |
| * @param desc socket to close | | * @param desc socket to close | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR otherwise | | * @return #GNUNET_OK on success, #GNUNET_SYSERR otherwise | |
| */ | | */ | |
| int | | int | |
| GNUNET_NETWORK_socket_close (struct GNUNET_NETWORK_Handle *desc); | | GNUNET_NETWORK_socket_close (struct GNUNET_NETWORK_Handle *desc); | |
| | | | |
| /** | | /** | |
|
| * Connect a socket | | * Only free memory of a socket, keep the file descriptor untouched. | |
| | | * | |
| | | * @param desc socket | |
| | | */ | |
| | | void | |
| | | GNUNET_NETWORK_socket_free_memory_only_ (struct GNUNET_NETWORK_Handle *desc | |
| | | ); | |
| | | | |
| | | /** | |
| | | * Connect a socket to some remote address. | |
| * | | * | |
| * @param desc socket to connect | | * @param desc socket to connect | |
| * @param address peer address | | * @param address peer address | |
| * @param address_len of address | | * @param address_len of address | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR otherwise | | * @return #GNUNET_OK on success, #GNUNET_SYSERR otherwise | |
| */ | | */ | |
| int | | int | |
| GNUNET_NETWORK_socket_connect (const struct GNUNET_NETWORK_Handle *desc, | | GNUNET_NETWORK_socket_connect (const struct GNUNET_NETWORK_Handle *desc, | |
| const struct sockaddr *address, | | const struct sockaddr *address, | |
| socklen_t address_len); | | socklen_t address_len); | |
| | | | |
| /** | | /** | |
| * Get socket options | | * Get socket options | |
| * | | * | |
| * @param desc socket to inspect | | * @param desc socket to inspect | |
| * @param level protocol level of the option | | * @param level protocol level of the option | |
| * @param optname identifier of the option | | * @param optname identifier of the option | |
| * @param optval options | | * @param optval options | |
| * @param optlen length of optval | | * @param optlen length of optval | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR otherwise | | * @return #GNUNET_OK on success, #GNUNET_SYSERR otherwise | |
| */ | | */ | |
| int | | int | |
| GNUNET_NETWORK_socket_getsockopt (const struct GNUNET_NETWORK_Handle *desc, | | GNUNET_NETWORK_socket_getsockopt (const struct GNUNET_NETWORK_Handle *desc, | |
| int level, int optname, void *optval, | | int level, int optname, void *optval, | |
| socklen_t * optlen); | | socklen_t * optlen); | |
| | | | |
| /** | | /** | |
| * Listen on a socket | | * Listen on a socket | |
| * | | * | |
| * @param desc socket to start listening on | | * @param desc socket to start listening on | |
| * @param backlog length of the listen queue | | * @param backlog length of the listen queue | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR otherwise | | * @return #GNUNET_OK on success, #GNUNET_SYSERR otherwise | |
| */ | | */ | |
| int | | int | |
| GNUNET_NETWORK_socket_listen (const struct GNUNET_NETWORK_Handle *desc, | | GNUNET_NETWORK_socket_listen (const struct GNUNET_NETWORK_Handle *desc, | |
| int backlog); | | int backlog); | |
| | | | |
| /** | | /** | |
| * How much data is available to be read on this descriptor? | | * How much data is available to be read on this descriptor? | |
|
| | | * | |
| * @param desc socket | | * @param desc socket | |
|
| | | * @returns #GNUNET_NO if no data is available, or on error! | |
| */ | | */ | |
| ssize_t | | ssize_t | |
| GNUNET_NETWORK_socket_recvfrom_amount (const struct GNUNET_NETWORK_Handle | | GNUNET_NETWORK_socket_recvfrom_amount (const struct GNUNET_NETWORK_Handle | |
| *desc); | | *desc); | |
| | | | |
| /** | | /** | |
|
| * Read data from a connected socket (always non-blocking). | | * Read data from a socket (always non-blocking). | |
| | | * | |
| * @param desc socket | | * @param desc socket | |
| * @param buffer buffer | | * @param buffer buffer | |
| * @param length length of buffer | | * @param length length of buffer | |
| * @param src_addr either the source to recv from, or all zeroes | | * @param src_addr either the source to recv from, or all zeroes | |
| * to be filled in by recvfrom | | * to be filled in by recvfrom | |
| * @param addrlen length of the addr | | * @param addrlen length of the addr | |
| */ | | */ | |
| ssize_t | | ssize_t | |
| GNUNET_NETWORK_socket_recvfrom (const struct GNUNET_NETWORK_Handle *desc, | | GNUNET_NETWORK_socket_recvfrom (const struct GNUNET_NETWORK_Handle *desc, | |
| void *buffer, size_t length, | | void *buffer, size_t length, | |
| | | | |
| skipping to change at line 217 | | skipping to change at line 238 | |
| ssize_t | | ssize_t | |
| GNUNET_NETWORK_socket_recv (const struct GNUNET_NETWORK_Handle *desc, | | GNUNET_NETWORK_socket_recv (const struct GNUNET_NETWORK_Handle *desc, | |
| void *buffer, size_t length); | | void *buffer, size_t length); | |
| | | | |
| /** | | /** | |
| * Check if sockets meet certain conditions | | * Check if sockets meet certain conditions | |
| * @param rfds set of sockets to be checked for readability | | * @param rfds set of sockets to be checked for readability | |
| * @param wfds set of sockets to be checked for writability | | * @param wfds set of sockets to be checked for writability | |
| * @param efds set of sockets to be checked for exceptions | | * @param efds set of sockets to be checked for exceptions | |
| * @param timeout relative value when to return | | * @param timeout relative value when to return | |
|
| * @return number of selected sockets, GNUNET_SYSERR on error | | * @return number of selected sockets, #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
| GNUNET_NETWORK_socket_select (struct GNUNET_NETWORK_FDSet *rfds, | | GNUNET_NETWORK_socket_select (struct GNUNET_NETWORK_FDSet *rfds, | |
| struct GNUNET_NETWORK_FDSet *wfds, | | struct GNUNET_NETWORK_FDSet *wfds, | |
| struct GNUNET_NETWORK_FDSet *efds, | | struct GNUNET_NETWORK_FDSet *efds, | |
| struct GNUNET_TIME_Relative timeout); | | struct GNUNET_TIME_Relative timeout); | |
| | | | |
| /** | | /** | |
| * Send data (always non-blocking). | | * Send data (always non-blocking). | |
| * | | * | |
| * @param desc socket | | * @param desc socket | |
| * @param buffer data to send | | * @param buffer data to send | |
| * @param length size of the buffer | | * @param length size of the buffer | |
|
| * @return number of bytes sent, GNUNET_SYSERR on error | | * @return number of bytes sent, #GNUNET_SYSERR on error | |
| */ | | */ | |
| ssize_t | | ssize_t | |
| GNUNET_NETWORK_socket_send (const struct GNUNET_NETWORK_Handle *desc, | | GNUNET_NETWORK_socket_send (const struct GNUNET_NETWORK_Handle *desc, | |
| const void *buffer, size_t length); | | const void *buffer, size_t length); | |
| | | | |
| /** | | /** | |
| * Send data to a particular destination (always non-blocking). | | * Send data to a particular destination (always non-blocking). | |
| * This function only works for UDP sockets. | | * This function only works for UDP sockets. | |
| * | | * | |
| * @param desc socket | | * @param desc socket | |
| * @param message data to send | | * @param message data to send | |
| * @param length size of the data | | * @param length size of the data | |
| * @param dest_addr destination address | | * @param dest_addr destination address | |
| * @param dest_len length of address | | * @param dest_len length of address | |
|
| * @return number of bytes sent, GNUNET_SYSERR on error | | * @return number of bytes sent, #GNUNET_SYSERR on error | |
| */ | | */ | |
| ssize_t | | ssize_t | |
| GNUNET_NETWORK_socket_sendto (const struct GNUNET_NETWORK_Handle *desc, | | GNUNET_NETWORK_socket_sendto (const struct GNUNET_NETWORK_Handle *desc, | |
| const void *message, size_t length, | | const void *message, size_t length, | |
| const struct sockaddr *dest_addr, | | const struct sockaddr *dest_addr, | |
| socklen_t dest_len); | | socklen_t dest_len); | |
| | | | |
| /** | | /** | |
| * Set socket option | | * Set socket option | |
| * | | * | |
| * @param fd socket | | * @param fd socket | |
| * @param level protocol level of the option | | * @param level protocol level of the option | |
| * @param option_name option identifier | | * @param option_name option identifier | |
| * @param option_value value to set | | * @param option_value value to set | |
| * @param option_len size of option_value | | * @param option_len size of option_value | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR otherwise | | * @return #GNUNET_OK on success, #GNUNET_SYSERR otherwise | |
| */ | | */ | |
| int | | int | |
| GNUNET_NETWORK_socket_setsockopt (struct GNUNET_NETWORK_Handle *fd, int lev
el, | | GNUNET_NETWORK_socket_setsockopt (struct GNUNET_NETWORK_Handle *fd, int lev
el, | |
| int option_name, const void *option_value
, | | int option_name, const void *option_value
, | |
| socklen_t option_len); | | socklen_t option_len); | |
| | | | |
| /** | | /** | |
| * Shut down socket operations | | * Shut down socket operations | |
| * | | * | |
| * @param desc socket | | * @param desc socket | |
| * @param how type of shutdown | | * @param how type of shutdown | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR otherwise | | * @return #GNUNET_OK on success, #GNUNET_SYSERR otherwise | |
| */ | | */ | |
| int | | int | |
| GNUNET_NETWORK_socket_shutdown (struct GNUNET_NETWORK_Handle *desc, int how
); | | GNUNET_NETWORK_socket_shutdown (struct GNUNET_NETWORK_Handle *desc, int how
); | |
| | | | |
| /** | | /** | |
| * Disable the "CORK" feature for communication with the given socket, | | * Disable the "CORK" feature for communication with the given socket, | |
| * forcing the OS to immediately flush the buffer on transmission | | * forcing the OS to immediately flush the buffer on transmission | |
| * instead of potentially buffering multiple messages. Essentially | | * instead of potentially buffering multiple messages. Essentially | |
| * reduces the OS send buffers to zero. | | * reduces the OS send buffers to zero. | |
| * | | * | |
| * @param desc socket | | * @param desc socket | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR otherwise | | * @return #GNUNET_OK on success, #GNUNET_SYSERR otherwise | |
| */ | | */ | |
| int | | int | |
| GNUNET_NETWORK_socket_disable_corking (struct GNUNET_NETWORK_Handle *desc); | | GNUNET_NETWORK_socket_disable_corking (struct GNUNET_NETWORK_Handle *desc); | |
| | | | |
| /** | | /** | |
| * Create a new socket. Configure it for non-blocking IO and | | * Create a new socket. Configure it for non-blocking IO and | |
| * mark it as non-inheritable to child processes (set the | | * mark it as non-inheritable to child processes (set the | |
| * close-on-exec flag). | | * close-on-exec flag). | |
| * | | * | |
| * @param domain domain of the socket | | * @param domain domain of the socket | |
| | | | |
| skipping to change at line 314 | | skipping to change at line 335 | |
| /** | | /** | |
| * Reset FD set (clears all file descriptors). | | * Reset FD set (clears all file descriptors). | |
| * | | * | |
| * @param fds fd set to clear | | * @param fds fd set to clear | |
| */ | | */ | |
| void | | void | |
| GNUNET_NETWORK_fdset_zero (struct GNUNET_NETWORK_FDSet *fds); | | GNUNET_NETWORK_fdset_zero (struct GNUNET_NETWORK_FDSet *fds); | |
| | | | |
| /** | | /** | |
| * Add a socket to the FD set | | * Add a socket to the FD set | |
|
| | | * | |
| * @param fds fd set | | * @param fds fd set | |
| * @param desc socket to add | | * @param desc socket to add | |
| */ | | */ | |
| void | | void | |
| GNUNET_NETWORK_fdset_set (struct GNUNET_NETWORK_FDSet *fds, | | GNUNET_NETWORK_fdset_set (struct GNUNET_NETWORK_FDSet *fds, | |
| const struct GNUNET_NETWORK_Handle *desc); | | const struct GNUNET_NETWORK_Handle *desc); | |
| | | | |
| #if WINDOWS | | #if WINDOWS | |
| /** | | /** | |
| * Add a W32 file handle to the fd set | | * Add a W32 file handle to the fd set | |
|
| | | * | |
| * @param fds fd set | | * @param fds fd set | |
| * @param h the file handle to add | | * @param h the file handle to add | |
| */ | | */ | |
| void | | void | |
| GNUNET_NETWORK_fdset_handle_set_native_w32_handle (struct GNUNET_NETWORK_FD
Set | | GNUNET_NETWORK_fdset_handle_set_native_w32_handle (struct GNUNET_NETWORK_FD
Set | |
| *fds, HANDLE h); | | *fds, HANDLE h); | |
| #endif | | #endif | |
| | | | |
| /** | | /** | |
| * Check whether a socket is part of the fd set | | * Check whether a socket is part of the fd set | |
|
| | | * | |
| * @param fds fd set | | * @param fds fd set | |
| * @param desc socket | | * @param desc socket | |
|
| * @return GNUNET_YES if the socket is in the set | | * @return #GNUNET_YES if the socket is in the set | |
| */ | | */ | |
| int | | int | |
| GNUNET_NETWORK_fdset_isset (const struct GNUNET_NETWORK_FDSet *fds, | | GNUNET_NETWORK_fdset_isset (const struct GNUNET_NETWORK_FDSet *fds, | |
| const struct GNUNET_NETWORK_Handle *desc); | | const struct GNUNET_NETWORK_Handle *desc); | |
| | | | |
| /** | | /** | |
|
| * Add one fd set to another | | * Add one fd set to another (computes the union). | |
| | | * | |
| * @param dst the fd set to add to | | * @param dst the fd set to add to | |
| * @param src the fd set to add from | | * @param src the fd set to add from | |
| */ | | */ | |
| void | | void | |
| GNUNET_NETWORK_fdset_add (struct GNUNET_NETWORK_FDSet *dst, | | GNUNET_NETWORK_fdset_add (struct GNUNET_NETWORK_FDSet *dst, | |
| const struct GNUNET_NETWORK_FDSet *src); | | const struct GNUNET_NETWORK_FDSet *src); | |
| | | | |
| /** | | /** | |
| * Copy one fd set to another | | * Copy one fd set to another | |
|
| | | * | |
| * @param to destination | | * @param to destination | |
| * @param from source | | * @param from source | |
| */ | | */ | |
| void | | void | |
| GNUNET_NETWORK_fdset_copy (struct GNUNET_NETWORK_FDSet *to, | | GNUNET_NETWORK_fdset_copy (struct GNUNET_NETWORK_FDSet *to, | |
| const struct GNUNET_NETWORK_FDSet *from); | | const struct GNUNET_NETWORK_FDSet *from); | |
| | | | |
| /** | | /** | |
| * Return file descriptor for this network handle | | * Return file descriptor for this network handle | |
| * | | * | |
| | | | |
| skipping to change at line 388 | | skipping to change at line 414 | |
| /** | | /** | |
| * Return sockaddr length for this network handle | | * Return sockaddr length for this network handle | |
| * | | * | |
| * @param desc wrapper to process | | * @param desc wrapper to process | |
| * @return socklen_t for sockaddr | | * @return socklen_t for sockaddr | |
| */ | | */ | |
| socklen_t | | socklen_t | |
| GNUNET_NETWORK_get_addrlen (struct GNUNET_NETWORK_Handle *desc); | | GNUNET_NETWORK_get_addrlen (struct GNUNET_NETWORK_Handle *desc); | |
| | | | |
| /** | | /** | |
|
| * Copy a native fd set | | * Copy a native fd set into the GNUnet representation. | |
| | | * | |
| * @param to destination | | * @param to destination | |
| * @param from native source set | | * @param from native source set | |
| * @param nfds the biggest socket number in from + 1 | | * @param nfds the biggest socket number in from + 1 | |
| */ | | */ | |
| void | | void | |
| GNUNET_NETWORK_fdset_copy_native (struct GNUNET_NETWORK_FDSet *to, | | GNUNET_NETWORK_fdset_copy_native (struct GNUNET_NETWORK_FDSet *to, | |
|
| const fd_set * from, int nfds); | | const fd_set *from, int nfds); | |
| | | | |
| /** | | /** | |
| * Set a native fd in a set | | * Set a native fd in a set | |
| * | | * | |
| * @param to destination | | * @param to destination | |
| * @param nfd native FD to set | | * @param nfd native FD to set | |
| */ | | */ | |
| void | | void | |
| GNUNET_NETWORK_fdset_set_native (struct GNUNET_NETWORK_FDSet *to, int nfd); | | GNUNET_NETWORK_fdset_set_native (struct GNUNET_NETWORK_FDSet *to, int nfd); | |
| | | | |
| | | | |
| skipping to change at line 419 | | skipping to change at line 446 | |
| * @param to set to test, NULL for empty set | | * @param to set to test, NULL for empty set | |
| * @param nfd native FD to test, -1 for none | | * @param nfd native FD to test, -1 for none | |
| * @return GNUNET_YES if to contains nfd | | * @return GNUNET_YES if to contains nfd | |
| */ | | */ | |
| int | | int | |
| GNUNET_NETWORK_fdset_test_native (const struct GNUNET_NETWORK_FDSet *to, | | GNUNET_NETWORK_fdset_test_native (const struct GNUNET_NETWORK_FDSet *to, | |
| int nfd); | | int nfd); | |
| | | | |
| /** | | /** | |
| * Add a file handle to the fd set | | * Add a file handle to the fd set | |
|
| | | * | |
| * @param fds fd set | | * @param fds fd set | |
| * @param h the file handle to add | | * @param h the file handle to add | |
| */ | | */ | |
| void | | void | |
| GNUNET_NETWORK_fdset_handle_set (struct GNUNET_NETWORK_FDSet *fds, | | GNUNET_NETWORK_fdset_handle_set (struct GNUNET_NETWORK_FDSet *fds, | |
| const struct GNUNET_DISK_FileHandle *h); | | const struct GNUNET_DISK_FileHandle *h); | |
| | | | |
| /** | | /** | |
| * Check if a file handle is part of an fd set | | * Check if a file handle is part of an fd set | |
| * @param fds fd set | | * @param fds fd set | |
| * @param h file handle | | * @param h file handle | |
|
| * @return GNUNET_YES if the file handle is part of the set | | * @return #GNUNET_YES if the file handle is part of the set | |
| */ | | */ | |
| int | | int | |
| GNUNET_NETWORK_fdset_handle_isset (const struct GNUNET_NETWORK_FDSet *fds, | | GNUNET_NETWORK_fdset_handle_isset (const struct GNUNET_NETWORK_FDSet *fds, | |
| const struct GNUNET_DISK_FileHandle *h); | | const struct GNUNET_DISK_FileHandle *h); | |
| | | | |
| /** | | /** | |
| * Checks if two fd sets overlap | | * Checks if two fd sets overlap | |
|
| | | * | |
| * @param fds1 first fd set | | * @param fds1 first fd set | |
| * @param fds2 second fd set | | * @param fds2 second fd set | |
|
| * @return GNUNET_YES if they do overlap, GNUNET_NO otherwise | | * @return #GNUNET_YES if they do overlap, #GNUNET_NO otherwise | |
| */ | | */ | |
| int | | int | |
| GNUNET_NETWORK_fdset_overlap (const struct GNUNET_NETWORK_FDSet *fds1, | | GNUNET_NETWORK_fdset_overlap (const struct GNUNET_NETWORK_FDSet *fds1, | |
| const struct GNUNET_NETWORK_FDSet *fds2); | | const struct GNUNET_NETWORK_FDSet *fds2); | |
| | | | |
| /** | | /** | |
| * Creates an fd set | | * Creates an fd set | |
|
| | | * | |
| * @return a new fd set | | * @return a new fd set | |
| */ | | */ | |
| struct GNUNET_NETWORK_FDSet * | | struct GNUNET_NETWORK_FDSet * | |
| GNUNET_NETWORK_fdset_create (void); | | GNUNET_NETWORK_fdset_create (void); | |
| | | | |
| /** | | /** | |
| * Releases the associated memory of an fd set | | * Releases the associated memory of an fd set | |
|
| | | * | |
| * @param fds fd set | | * @param fds fd set | |
| */ | | */ | |
| void | | void | |
| GNUNET_NETWORK_fdset_destroy (struct GNUNET_NETWORK_FDSet *fds); | | GNUNET_NETWORK_fdset_destroy (struct GNUNET_NETWORK_FDSet *fds); | |
| | | | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| { | | { | |
| #endif | | #endif | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| } | | } | |
| | | | |
End of changes. 35 change blocks. |
| 25 lines changed or deleted | | 57 lines changed or added | |
|
| gnunet_protocols.h | | gnunet_protocols.h | |
| /* | | /* | |
| This file is part of GNUnet. | | This file is part of GNUnet. | |
|
| (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010 Christian Gro
thoff (and other contributing authors) | | (C) 2001-2013 Christian Grothoff (and other contributing authors) | |
| | | | |
| GNUnet is free software; you can redistribute it and/or modify | | GNUnet is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published | | 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. | | option) any later version. | |
| | | | |
| GNUnet is distributed in the hope that it will be useful, but | | GNUnet is distributed in the hope that it will be useful, but | |
| WITHOUT ANY WARRANTY; without even the implied warranty of | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| General Public License for more details. | | General Public License for more details. | |
| | | | |
| You should have received a copy of the GNU General Public License | | You should have received a copy of the GNU General Public License | |
| along with GNUnet; see the file COPYING. If not, write to the | | along with GNUnet; see the file COPYING. If not, write to the | |
| Free Software Foundation, Inc., 59 Temple Place - Suite 330, | | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| Boston, MA 02111-1307, USA. | | Boston, MA 02111-1307, USA. | |
| */ | | */ | |
| | | | |
| /** | | /** | |
| * @file include/gnunet_protocols.h | | * @file include/gnunet_protocols.h | |
| * @brief constants for network protocols | | * @brief constants for network protocols | |
| * @author Christian Grothoff | | * @author Christian Grothoff | |
|
| | | * @defgroup protocols Types of messages used in GNUnet | |
| | | * @{ | |
| */ | | */ | |
| | | | |
|
| | | /************************************************************************** | |
| | | ***** | |
| | | * TODO: we need a way to register message types centrally (via some webpag | |
| | | e). | |
| | | * For now: unofficial extensions should start at 48k, internal extensions | |
| | | * defined here should leave some room (4-10 additional messages to the pre | |
| | | vious | |
| | | * extension). | |
| | | ************************************************************************** | |
| | | ****/ | |
| | | | |
| #ifndef GNUNET_PROTOCOLS_H | | #ifndef GNUNET_PROTOCOLS_H | |
| #define GNUNET_PROTOCOLS_H | | #define GNUNET_PROTOCOLS_H | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| extern "C" | | extern "C" | |
| { | | { | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| } | | } | |
| #endif | | #endif | |
| #endif | | #endif | |
| | | | |
| skipping to change at line 81 | | skipping to change at line 90 | |
| * Request to ARM to start a service. | | * Request to ARM to start a service. | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_ARM_START 8 | | #define GNUNET_MESSAGE_TYPE_ARM_START 8 | |
| | | | |
| /** | | /** | |
| * Request to ARM to stop a service. | | * Request to ARM to stop a service. | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_ARM_STOP 9 | | #define GNUNET_MESSAGE_TYPE_ARM_STOP 9 | |
| | | | |
| /** | | /** | |
|
| * Request ARM service itself to shutdown. | | * Response from ARM. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_ARM_SHUTDOWN 10 | | #define GNUNET_MESSAGE_TYPE_ARM_RESULT 10 | |
| | | | |
| /** | | /** | |
|
| * Response from ARM. | | * Status update from ARM. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_ARM_RESULT 11 | | #define GNUNET_MESSAGE_TYPE_ARM_STATUS 11 | |
| | | | |
| /** | | /** | |
| * Request to ARM to list all currently running services | | * Request to ARM to list all currently running services | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_ARM_LIST 12 | | #define GNUNET_MESSAGE_TYPE_ARM_LIST 12 | |
| | | | |
| /** | | /** | |
| * Response from ARM for listing currently running services | | * Response from ARM for listing currently running services | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_ARM_LIST_RESULT 13 | | #define GNUNET_MESSAGE_TYPE_ARM_LIST_RESULT 13 | |
| | | | |
|
| | | /** | |
| | | * Request to ARM to notify client of service status changes | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_ARM_MONITOR 14 | |
| | | | |
| /**************************************************************************
***** | | /**************************************************************************
***** | |
| * HELLO message types | | * HELLO message types | |
| **************************************************************************
****/ | | **************************************************************************
****/ | |
| | | | |
| /** | | /** | |
|
| * HELLO message used for communicating peer addresses. | | * Previously used for HELLO messages used for communicating peer addresses | |
| | | . | |
| | | * Managed by libgnunethello. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_HELLO_LEGACY 16 | |
| | | | |
| | | /** | |
| | | * HELLO message with friend only flag used for communicating peer addresse | |
| | | s. | |
| * Managed by libgnunethello. | | * Managed by libgnunethello. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_HELLO 16 | | | |
| | | #define GNUNET_MESSAGE_TYPE_HELLO 17 | |
| | | | |
| /**************************************************************************
***** | | /**************************************************************************
***** | |
| * FRAGMENTATION message types | | * FRAGMENTATION message types | |
| **************************************************************************
****/ | | **************************************************************************
****/ | |
| | | | |
| /** | | /** | |
| * FRAGMENT of a larger message. | | * FRAGMENT of a larger message. | |
| * Managed by libgnunetfragment. | | * Managed by libgnunetfragment. | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_FRAGMENT 18 | | #define GNUNET_MESSAGE_TYPE_FRAGMENT 18 | |
| | | | |
| skipping to change at line 164 | | skipping to change at line 185 | |
| | | | |
| /**************************************************************************
***** | | /**************************************************************************
***** | |
| * Transport-DV message types | | * Transport-DV message types | |
| **************************************************************************
****/ | | **************************************************************************
****/ | |
| | | | |
| /** | | /** | |
| * DV service to DV Plugin message, when a message is | | * DV service to DV Plugin message, when a message is | |
| * unwrapped by the DV service and handed to the plugin | | * unwrapped by the DV service and handed to the plugin | |
| * for processing | | * for processing | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TRANSPORT_DV_RECEIVE 44 | | #define GNUNET_MESSAGE_TYPE_DV_RECV 44 | |
| | | | |
| /** | | /** | |
| * DV Plugin to DV service message, indicating a message | | * DV Plugin to DV service message, indicating a message | |
| * should be sent out. | | * should be sent out. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TRANSPORT_DV_SEND 45 | | #define GNUNET_MESSAGE_TYPE_DV_SEND 45 | |
| | | | |
| /** | | /** | |
| * DV service to DV api message, containing a confirmation | | * DV service to DV api message, containing a confirmation | |
| * or failure of a DV_SEND message. | | * or failure of a DV_SEND message. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TRANSPORT_DV_SEND_RESULT 46 | | #define GNUNET_MESSAGE_TYPE_DV_SEND_ACK 46 | |
| | | | |
| /** | | /** | |
| * P2P DV message encapsulating some real message | | * P2P DV message encapsulating some real message | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_DV_DATA 47 | | #define GNUNET_MESSAGE_TYPE_DV_ROUTE 47 | |
| | | | |
| /** | | /** | |
|
| * P2P DV message gossipping peer information | | * DV Plugin to DV service message, indicating | |
| | | * startup. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_DV_GOSSIP 48 | | #define GNUNET_MESSAGE_TYPE_DV_START 48 | |
| | | | |
| /** | | /** | |
|
| * DV Plugin to DV service message, indicating | | * P2P DV message telling plugin that a peer connected | |
| * startup. | | | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_DV_START 49 | | #define GNUNET_MESSAGE_TYPE_DV_CONNECT 49 | |
| | | | |
| /** | | /** | |
|
| * P2P DV message notifying connected peers of a disconnect | | * P2P DV message telling plugin that a peer disconnected | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_DV_DISCONNECT 50 | | #define GNUNET_MESSAGE_TYPE_DV_DISCONNECT 50 | |
| | | | |
|
| | | /** | |
| | | * P2P DV message telling plugin that a message transmission failed (negati | |
| | | ve ACK) | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_DV_SEND_NACK 51 | |
| | | | |
| | | /** | |
| | | * P2P DV message telling plugin that our distance to a peer changed | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_DV_DISTANCE_CHANGED 52 | |
| | | | |
| | | /** | |
| | | * DV message box for boxing multiple messages. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_DV_BOX 53 | |
| | | | |
| /**************************************************************************
***** | | /**************************************************************************
***** | |
| * Transport-UDP message types | | * Transport-UDP message types | |
| **************************************************************************
****/ | | **************************************************************************
****/ | |
| | | | |
| /** | | /** | |
| * Normal UDP message type. | | * Normal UDP message type. | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_TRANSPORT_UDP_MESSAGE 56 | | #define GNUNET_MESSAGE_TYPE_TRANSPORT_UDP_MESSAGE 56 | |
| | | | |
| /** | | /** | |
| | | | |
| skipping to change at line 309 | | skipping to change at line 345 | |
| * Request for peer iteration from CORE service. | | * Request for peer iteration from CORE service. | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_CORE_ITERATE_PEERS 78 | | #define GNUNET_MESSAGE_TYPE_CORE_ITERATE_PEERS 78 | |
| | | | |
| /** | | /** | |
| * Last reply from core to request for peer iteration from CORE service. | | * Last reply from core to request for peer iteration from CORE service. | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_CORE_ITERATE_PEERS_END 79 | | #define GNUNET_MESSAGE_TYPE_CORE_ITERATE_PEERS_END 79 | |
| | | | |
| /** | | /** | |
|
| * Check whether a given peer is currently connected to CORE. | | | |
| */ | | | |
| #define GNUNET_MESSAGE_TYPE_CORE_PEER_CONNECTED 80 | | | |
| | | | |
| /** | | | |
| * Session key exchange between peers. | | | |
| */ | | | |
| #define GNUNET_MESSAGE_TYPE_CORE_SET_KEY 81 | | | |
| | | | |
| /** | | | |
| * Encapsulation for an encrypted message between peers. | | * Encapsulation for an encrypted message between peers. | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_CORE_ENCRYPTED_MESSAGE 82 | | #define GNUNET_MESSAGE_TYPE_CORE_ENCRYPTED_MESSAGE 82 | |
| | | | |
| /** | | /** | |
| * Check that other peer is alive (challenge). | | * Check that other peer is alive (challenge). | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_CORE_PING 83 | | #define GNUNET_MESSAGE_TYPE_CORE_PING 83 | |
| | | | |
| /** | | /** | |
| | | | |
| skipping to change at line 348 | | skipping to change at line 374 | |
| /** | | /** | |
| * gzip-compressed type map of the sender | | * gzip-compressed type map of the sender | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_CORE_COMPRESSED_TYPE_MAP 86 | | #define GNUNET_MESSAGE_TYPE_CORE_COMPRESSED_TYPE_MAP 86 | |
| | | | |
| /** | | /** | |
| * uncompressed type map of the sender | | * uncompressed type map of the sender | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_CORE_BINARY_TYPE_MAP 87 | | #define GNUNET_MESSAGE_TYPE_CORE_BINARY_TYPE_MAP 87 | |
| | | | |
|
| | | /** | |
| | | * Session key exchange between peers. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CORE_EPHEMERAL_KEY 88 | |
| | | | |
| /**************************************************************************
***** | | /**************************************************************************
***** | |
| * DATASTORE message types | | * DATASTORE message types | |
| **************************************************************************
****/ | | **************************************************************************
****/ | |
| | | | |
| /** | | /** | |
| * Message sent by datastore client on join. | | * Message sent by datastore client on join. | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_DATASTORE_RESERVE 92 | | #define GNUNET_MESSAGE_TYPE_DATASTORE_RESERVE 92 | |
| | | | |
| /** | | /** | |
| | | | |
| skipping to change at line 484 | | skipping to change at line 515 | |
| * used between the service and clients (in response to START_SEARCH). | | * used between the service and clients (in response to START_SEARCH). | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_FS_PUT 138 | | #define GNUNET_MESSAGE_TYPE_FS_PUT 138 | |
| | | | |
| /** | | /** | |
| * Peer asks us to stop migrating content towards it for a while. | | * Peer asks us to stop migrating content towards it for a while. | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_FS_MIGRATION_STOP 139 | | #define GNUNET_MESSAGE_TYPE_FS_MIGRATION_STOP 139 | |
| | | | |
| /** | | /** | |
|
| * P2P request for content (one FS to another via a stream). | | * P2P request for content (one FS to another via a mesh). | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_FS_STREAM_QUERY 140 | | #define GNUNET_MESSAGE_TYPE_FS_MESH_QUERY 140 | |
| | | | |
| /** | | /** | |
|
| * P2P answer for content (one FS to another via a stream). | | * P2P answer for content (one FS to another via a mesh). | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_FS_STREAM_REPLY 141 | | #define GNUNET_MESSAGE_TYPE_FS_MESH_REPLY 141 | |
| | | | |
| /**************************************************************************
***** | | /**************************************************************************
***** | |
| * DHT message types | | * DHT message types | |
| **************************************************************************
****/ | | **************************************************************************
****/ | |
| | | | |
| /** | | /** | |
| * Client wants to store item in DHT. | | * Client wants to store item in DHT. | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_DHT_CLIENT_PUT 142 | | #define GNUNET_MESSAGE_TYPE_DHT_CLIENT_PUT 142 | |
| | | | |
| | | | |
| skipping to change at line 743 | | skipping to change at line 774 | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_MESH 215 | | #define GNUNET_MESSAGE_TYPE_MESH 215 | |
| | | | |
| /** | | /** | |
| * Type of message used to send another peer which messages we want to rece
ive | | * Type of message used to send another peer which messages we want to rece
ive | |
| * through a mesh-tunnel (LEGACY) | | * through a mesh-tunnel (LEGACY) | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_MESH_HELLO 216 | | #define GNUNET_MESSAGE_TYPE_MESH_HELLO 216 | |
| | | | |
| /** | | /** | |
|
| * Request the creation of a path | | * Request the creation of a connection | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_PATH_CREATE 256 | | #define GNUNET_MESSAGE_TYPE_MESH_CONNECTION_CREATE 256 | |
| | | | |
| /** | | /** | |
|
| * Request the modification of an existing path | | * Send origin an ACK that the connection is complete | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_PATH_CHANGE 257 | | #define GNUNET_MESSAGE_TYPE_MESH_CONNECTION_ACK 257 | |
| | | | |
| /** | | /** | |
|
| * Notify that a connection of a path is no longer valid | | * Notify that a connection is no longer valid | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_PATH_BROKEN 258 | | #define GNUNET_MESSAGE_TYPE_MESH_CONNECTION_BROKEN 258 | |
| | | | |
| /** | | /** | |
|
| * At some point, the route will spontaneously change | | * At some point, the route will spontaneously change TODO | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_MESH_PATH_CHANGED 259 | | #define GNUNET_MESSAGE_TYPE_MESH_PATH_CHANGED 259 | |
| | | | |
| /** | | /** | |
|
| * Transport data in the mesh (origin->end) unicast | | * Payload data (usually inside a encrypted tunnel). | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_UNICAST 260 | | #define GNUNET_MESSAGE_TYPE_MESH_DATA 260 | |
| | | | |
| /** | | /** | |
|
| * Transport data to all peers in a tunnel | | * Confirm payload data end-to-end. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_MULTICAST 261 | | #define GNUNET_MESSAGE_TYPE_MESH_DATA_ACK 261 | |
| | | | |
| /** | | /** | |
|
| * Transport data back in the mesh (end->origin) | | * Key exchange encapsulation. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_TO_ORIGIN 262 | | #define GNUNET_MESSAGE_TYPE_MESH_KX 262 | |
| | | | |
| /** | | /** | |
|
| * Send origin an ACK that the path is complete | | * New ephemeral key. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_PATH_ACK 263 | | #define GNUNET_MESSAGE_TYPE_MESH_KX_EPHEMERAL 263 | |
| | | | |
| /** | | /** | |
|
| * Avoid path timeouts | | * Challenge to test peer's session key. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_PATH_KEEPALIVE 264 | | #define GNUNET_MESSAGE_TYPE_MESH_KX_PING 264 | |
| | | | |
| /** | | /** | |
|
| * Request the destuction of a path | | * Answer to session key challenge. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_PATH_DESTROY 265 | | #define GNUNET_MESSAGE_TYPE_MESH_KX_PONG 265 | |
| | | | |
| /** | | /** | |
|
| * Request the destruction of a whole tunnel | | * Request the destuction of a connection | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_TUNNEL_DESTROY 266 | | #define GNUNET_MESSAGE_TYPE_MESH_CONNECTION_DESTROY 266 | |
| | | | |
| /** | | /** | |
|
| * ACK for a data packet. | | * Hop-by-hop, connection dependent ACK. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_ACK 267 | | #define GNUNET_MESSAGE_TYPE_MESH_ACK 268 | |
| | | | |
| /** | | | |
| * Poll for an ACK. | | | |
| */ | | | |
| #define GNUNET_MESSAGE_TYPE_MESH_POLL 268 | | | |
| | | | |
| /** | | | |
| * Connect to the mesh service, specifying subscriptions | | | |
| */ | | | |
| #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT 272 | | | |
| | | | |
| /** | | /** | |
|
| * Ask the mesh service to create a new tunnel | | * Poll for a hop-by-hop ACK. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_CREATE 273 | | #define GNUNET_MESSAGE_TYPE_MESH_POLL 269 | |
| | | | |
| /** | | /** | |
|
| * Ask the mesh service to destroy a tunnel | | * Announce connection is still alive (direction sensitive). | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_DESTROY 274 | | #define GNUNET_MESSAGE_TYPE_MESH_KEEPALIVE 270 | |
| | | | |
| /** | | /** | |
|
| * Ask the mesh service to add a peer to an existing tunnel | | * Connect to the mesh service, specifying subscriptions | |
| */ | | | |
| #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_ADD 275 | | | |
| | | | |
| /** | | | |
| * Ask the mesh service to remove a peer from a tunnel | | | |
| */ | | | |
| #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_DEL 276 | | | |
| | | | |
| /** | | | |
| * Ask the mesh service to add a peer offering a service to an existing tun | | | |
| nel | | | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_ADD_BY_TYPE 277 | | #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT 272 | |
| | | | |
| /** | | /** | |
|
| * Ask the mesh service to add a peer described by a service string | | * Ask the mesh service to create a new channel. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_ANNOUNCE_REGEX 278 | | #define GNUNET_MESSAGE_TYPE_MESH_CHANNEL_CREATE 273 | |
| | | | |
| /** | | /** | |
|
| * Ask the mesh service to add a peer described by a service string | | * Ask the mesh service to destroy a channel. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_ADD_BY_STRING 279 | | #define GNUNET_MESSAGE_TYPE_MESH_CHANNEL_DESTROY 274 | |
| | | | |
| /** | | /** | |
|
| * Ask the mesh service to add a peer to the blacklist of an existing tunne
l | | * Confirm the creation of a channel | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_BLACKLIST 280 | | #define GNUNET_MESSAGE_TYPE_MESH_CHANNEL_ACK 275 | |
| | | | |
| /** | | /** | |
|
| * Ask the mesh service to remove a peer from the blacklist of a tunnel | | * Reject the creation of a channel | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_UNBLACKLIST 281 | | #define GNUNET_MESSAGE_TYPE_MESH_CHANNEL_NACK 276 | |
| | | | |
| /** | | /** | |
|
| * Set tunnel speed to slowest peer | | * Encrypted data. (Payload, channel management, keepalive) | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_MIN 282 | | #define GNUNET_MESSAGE_TYPE_MESH_ENCRYPTED 280 | |
| | | | |
| /** | | /** | |
|
| * Set tunnel speed to fastest peer | | * Payload client <-> service | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_MAX 283 | | #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_DATA 285 | |
| | | | |
| /** | | /** | |
|
| * Set tunnel buffering on. | | * Local ACK for data. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_BUFFER 284 | | #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_ACK 286 | |
| | | | |
| /** | | /** | |
|
| * Set tunnel buffering off. | | * Local NACK for rejected channels. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_NOBUFFER 285 | | #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_NACK 287 | |
| | | | |
| /** | | /** | |
|
| * Local ACK for data. | | * Local information about all tunnels of service. DEPRECATED | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_ACK 286 | | #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_INFO_TUNNELS 287 | |
| | | #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_INFO_CHANNELS 287 | |
| | | | |
| /** | | /** | |
|
| * Local information about all tunnels of service. | | * Local information of service about a specific tunnel. DEPRECATED | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_INFO_TUNNELS 287 | | #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_INFO_TUNNEL 288 | |
| | | #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_INFO_CHANNEL 288 | |
| | | | |
| /** | | /** | |
|
| * Local information of service about a specific tunnel. | | * Traffic (net-cat style) used by the Command Line Interface. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_MESH_LOCAL_INFO_TUNNEL 288 | | #define GNUNET_MESSAGE_TYPE_MESH_CLI 298 | |
| | | | |
| /** | | /** | |
| * 640kb should be enough for everybody | | * 640kb should be enough for everybody | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_MESH_RESERVE_END 299 | | #define GNUNET_MESSAGE_TYPE_MESH_RESERVE_END 299 | |
| | | | |
| /**************************************************************************
***** | | /**************************************************************************
***** | |
| * CHAT message types START | | * CHAT message types START | |
| **************************************************************************
****/ | | **************************************************************************
****/ | |
| | | | |
| | | | |
| skipping to change at line 1115 | | skipping to change at line 1128 | |
| * to request information about addresses | | * to request information about addresses | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_ATS_ADDRESSLIST_REQUEST 354 | | #define GNUNET_MESSAGE_TYPE_ATS_ADDRESSLIST_REQUEST 354 | |
| | | | |
| /** | | /** | |
| * Type of the 'struct AddressListResponseMessage' sent by ATS to client | | * Type of the 'struct AddressListResponseMessage' sent by ATS to client | |
| * with information about addresses | | * with information about addresses | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_ATS_ADDRESSLIST_RESPONSE 355 | | #define GNUNET_MESSAGE_TYPE_ATS_ADDRESSLIST_RESPONSE 355 | |
| | | | |
|
| | | /** | |
| | | * Type of the 'struct ChangePreferenceMessage' sent by clients to ATS | |
| | | * to ask for allocation preference changes. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_ATS_PREFERENCE_FEEDBACK 356 | |
| | | | |
| /**************************************************************************
***** | | /**************************************************************************
***** | |
| * TRANSPORT message types | | * TRANSPORT message types | |
| **************************************************************************
****/ | | **************************************************************************
****/ | |
| | | | |
| /** | | /** | |
| * Message from the core saying that the transport | | * Message from the core saying that the transport | |
| * server should start giving it messages. This | | * server should start giving it messages. This | |
| * should automatically trigger the transmission of | | * should automatically trigger the transmission of | |
| * a HELLO message. | | * a HELLO message. | |
| */ | | */ | |
| | | | |
| skipping to change at line 1255 | | skipping to change at line 1274 | |
| /** | | /** | |
| * Request to iterate over all known addresses. | | * Request to iterate over all known addresses. | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_ITERATE_RESPONSE 383 | | #define GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_ITERATE_RESPONSE 383 | |
| | | | |
| /** | | /** | |
| * Message send by a peer to notify the other to keep the session alive. | | * Message send by a peer to notify the other to keep the session alive. | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_TRANSPORT_BROADCAST_BEACON 384 | | #define GNUNET_MESSAGE_TYPE_TRANSPORT_BROADCAST_BEACON 384 | |
| | | | |
|
| /************************************************************************** | | | |
| ***** | | | |
| * STREAM messages types | | | |
| ************************************************************************** | | | |
| ****/ | | | |
| | | | |
| /** | | | |
| * Message containing data exchanged between stream end-points over mesh. | | | |
| */ | | | |
| #define GNUNET_MESSAGE_TYPE_STREAM_DATA 400 | | | |
| | | | |
| /** | | | |
| * ACK message | | | |
| */ | | | |
| #define GNUNET_MESSAGE_TYPE_STREAM_ACK 401 | | | |
| | | | |
| /** | | | |
| * Handshake hello message | | | |
| */ | | | |
| #define GNUNET_MESSAGE_TYPE_STREAM_HELLO 402 | | | |
| | | | |
| /** | | | |
| * Handshake hello acknowledgement message | | | |
| */ | | | |
| #define GNUNET_MESSAGE_TYPE_STREAM_HELLO_ACK 403 | | | |
| | | | |
| /** | | | |
| * Reset message | | | |
| */ | | | |
| #define GNUNET_MESSAGE_TYPE_STREAM_RESET 404 | | | |
| | | | |
| /** | | /** | |
|
| * Transmit close message (data transmission no longer possible after this | | * Message containing traffic metrics for transport service | |
| * message) | | | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_STREAM_TRANSMIT_CLOSE 405 | | #define GNUNET_MESSAGE_TYPE_TRANSPORT_TRAFFIC_METRIC 385 | |
| | | | |
| /** | | | |
| * Transmit close acknowledgement message | | | |
| */ | | | |
| #define GNUNET_MESSAGE_TYPE_STREAM_TRANSMIT_CLOSE_ACK 406 | | | |
| | | | |
| /** | | | |
| * Receive close message (data is no loger read by the receiver after this | | | |
| * message) | | | |
| */ | | | |
| #define GNUNET_MESSAGE_TYPE_STREAM_RECEIVE_CLOSE 407 | | | |
| | | | |
| /** | | | |
| * Receive close acknowledgement message | | | |
| */ | | | |
| #define GNUNET_MESSAGE_TYPE_STREAM_RECEIVE_CLOSE_ACK 408 | | | |
| | | | |
| /** | | | |
| * Stream close message (data is no longer sent or read after this message) | | | |
| */ | | | |
| #define GNUNET_MESSAGE_TYPE_STREAM_CLOSE 409 | | | |
| | | | |
| /** | | | |
| * Close acknowledgement message | | | |
| */ | | | |
| #define GNUNET_MESSAGE_TYPE_STREAM_CLOSE_ACK 410 | | | |
| | | | |
| /**************************************************************************
***** | | /**************************************************************************
***** | |
| * FS-PUBLISH-HELPER IPC Messages | | * FS-PUBLISH-HELPER IPC Messages | |
| **************************************************************************
****/ | | **************************************************************************
****/ | |
| | | | |
| /** | | /** | |
| * Progress information from the helper: found a file | | * Progress information from the helper: found a file | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_FS_PUBLISH_HELPER_PROGRESS_FILE 420 | | #define GNUNET_MESSAGE_TYPE_FS_PUBLISH_HELPER_PROGRESS_FILE 420 | |
| | | | |
| | | | |
| skipping to change at line 1356 | | skipping to change at line 1319 | |
| * Extracted meta data from the helper. | | * Extracted meta data from the helper. | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_FS_PUBLISH_HELPER_META_DATA 425 | | #define GNUNET_MESSAGE_TYPE_FS_PUBLISH_HELPER_META_DATA 425 | |
| | | | |
| /** | | /** | |
| * Signal that helper is done. | | * Signal that helper is done. | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_FS_PUBLISH_HELPER_FINISHED 426 | | #define GNUNET_MESSAGE_TYPE_FS_PUBLISH_HELPER_FINISHED 426 | |
| | | | |
| /**************************************************************************
***** | | /**************************************************************************
***** | |
|
| * NAMESTORE message types | | * NAMECACHE message types | |
| **************************************************************************
****/ | | **************************************************************************
****/ | |
| | | | |
| /** | | /** | |
|
| * Client to service: register. | | * Client to service: lookup block | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_NAMESTORE_START 430 | | #define GNUNET_MESSAGE_TYPE_NAMECACHE_LOOKUP_BLOCK 431 | |
| | | | |
| /** | | /** | |
|
| * Client to service: lookup name | | * Service to client: result of block lookup | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME 431 | | #define GNUNET_MESSAGE_TYPE_NAMECACHE_LOOKUP_BLOCK_RESPONSE 432 | |
| | | | |
| /** | | /** | |
|
| * Service to client: result of name lookup | | * Client to service: cache a block | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME_RESPONSE 432 | | #define GNUNET_MESSAGE_TYPE_NAMECACHE_BLOCK_CACHE 433 | |
| | | | |
| /** | | /** | |
|
| * Client to service: put records (for caching) | | * Service to client: result of block cache request | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_PUT 433 | | #define GNUNET_MESSAGE_TYPE_NAMECACHE_BLOCK_CACHE_RESPONSE 434 | |
| | | | |
|
| /** | | /************************************************************************** | |
| * Service to client: result of put operation. | | ***** | |
| */ | | * NAMESTORE message types | |
| #define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_PUT_RESPONSE 434 | | ************************************************************************** | |
| | | ****/ | |
| | | | |
| /** | | /** | |
|
| * Client to service: create record as authority | | * Client to service: store records (as authority) | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_CREATE 435 | | #define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE 435 | |
| | | | |
| /** | | /** | |
|
| * Service to client: result of record creation request | | * Service to client: result of store operation. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_CREATE_RESPONSE 436 | | #define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE_RESPONSE 436 | |
| | | | |
| /** | | /** | |
|
| * Client to service: remove record(s) | | * Client to service: lookup label | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_REMOVE 437 | | #define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_LOOKUP 437 | |
| | | | |
| /** | | /** | |
|
| * Service to client: result of removal request. | | * Service to client: lookup label | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_REMOVE_RESPONSE 438 | | #define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_LOOKUP_RESPONSE 438 | |
| | | | |
| /** | | /** | |
| * Client to service: "reverse" lookup for zone name based on zone key | | * Client to service: "reverse" lookup for zone name based on zone key | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME 439 | | #define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME 439 | |
| | | | |
| /** | | /** | |
| * Service to client: result of zone-to-name lookup. | | * Service to client: result of zone-to-name lookup. | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME_RESPONSE 440 | | #define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME_RESPONSE 440 | |
| | | | |
| /** | | /** | |
|
| * Client to service: please start iteration | | * Client to service: start monitoring (yields sequence of | |
| | | * "ZONE_ITERATION_RESPONSES" --- forever). | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_START 445 | | #define GNUNET_MESSAGE_TYPE_NAMESTORE_MONITOR_START 441 | |
| | | | |
| /** | | /** | |
|
| * Service to client: current record in iteration (or end of list). | | * Service to client: you're now in sync. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_RESPONSE 446 | | #define GNUNET_MESSAGE_TYPE_NAMESTORE_MONITOR_SYNC 442 | |
| | | | |
| | | /** | |
| | | * Service to client: here is a (plaintext) record you requested. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_RESULT 443 | |
| | | | |
| | | /** | |
| | | * Client to service: please start iteration; receives | |
| | | * "GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME_RESPONSE" messages in return. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_START 445 | |
| | | | |
| /** | | /** | |
| * Client to service: next record in iteration please. | | * Client to service: next record in iteration please. | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_NEXT 447 | | #define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_NEXT 447 | |
| | | | |
| /** | | /** | |
| * Client to service: stop iterating. | | * Client to service: stop iterating. | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_STOP 448 | | #define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_STOP 448 | |
| | | | |
| skipping to change at line 1465 | | skipping to change at line 1439 | |
| **************************************************************************
****/ | | **************************************************************************
****/ | |
| | | | |
| /** | | /** | |
| * Initial message from a client to a testing control service | | * Initial message from a client to a testing control service | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_TESTBED_INIT 460 | | #define GNUNET_MESSAGE_TYPE_TESTBED_INIT 460 | |
| | | | |
| /** | | /** | |
| * Message to add host | | * Message to add host | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TESTBED_ADDHOST 461 | | #define GNUNET_MESSAGE_TYPE_TESTBED_ADD_HOST 461 | |
| | | | |
| /** | | /** | |
| * Message to signal that a add host succeeded | | * Message to signal that a add host succeeded | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TESTBED_ADDHOSTCONFIRM 462 | | #define GNUNET_MESSAGE_TYPE_TESTBED_ADD_HOST_SUCCESS 462 | |
| | | | |
| /** | | | |
| * Message to configure a service to be shared among peers | | | |
| */ | | | |
| #define GNUNET_MESSAGE_TYPE_TESTBED_SERVICESHARE 463 | | | |
| | | | |
| /** | | /** | |
| * Message to link delegated controller to slave controller | | * Message to link delegated controller to slave controller | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TESTBED_LCONTROLLERS 464 | | #define GNUNET_MESSAGE_TYPE_TESTBED_LINK_CONTROLLERS 463 | |
| | | | |
| /** | | /** | |
| * Message to create a peer at a host | | * Message to create a peer at a host | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TESTBED_CREATEPEER 465 | | #define GNUNET_MESSAGE_TYPE_TESTBED_CREATE_PEER 464 | |
| | | | |
| /** | | /** | |
| * Message to reconfigure a peer | | * Message to reconfigure a peer | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TESTBED_PEERRECONF 466 | | #define GNUNET_MESSAGE_TYPE_TESTBED_RECONFIGURE_PEER 465 | |
| | | | |
| /** | | /** | |
| * Message to start a peer at a host | | * Message to start a peer at a host | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TESTBED_STARTPEER 467 | | #define GNUNET_MESSAGE_TYPE_TESTBED_START_PEER 466 | |
| | | | |
| /** | | /** | |
| * Message to stop a peer at a host | | * Message to stop a peer at a host | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TESTBED_STOPPEER 468 | | #define GNUNET_MESSAGE_TYPE_TESTBED_STOP_PEER 467 | |
| | | | |
| /** | | /** | |
| * Message to destroy a peer | | * Message to destroy a peer | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TESTBED_DESTROYPEER 469 | | #define GNUNET_MESSAGE_TYPE_TESTBED_DESTROY_PEER 468 | |
| | | | |
| /** | | /** | |
| * Configure underlay link message | | * Configure underlay link message | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TESTBED_CONFIGULLINK 470 | | #define GNUNET_MESSAGE_TYPE_TESTBED_CONFIGURE_UNDERLAY_LINK 469 | |
| | | | |
| /** | | /** | |
| * Message to connect peers in a overlay | | * Message to connect peers in a overlay | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TESTBED_OLCONNECT 471 | | #define GNUNET_MESSAGE_TYPE_TESTBED_OVERLAY_CONNECT 470 | |
| | | | |
| /** | | /** | |
| * Message for peer events | | * Message for peer events | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TESTBED_PEEREVENT 472 | | #define GNUNET_MESSAGE_TYPE_TESTBED_PEER_EVENT 471 | |
| | | | |
| /** | | /** | |
| * Message for peer connect events | | * Message for peer connect events | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TESTBED_PEERCONEVENT 473 | | #define GNUNET_MESSAGE_TYPE_TESTBED_PEER_CONNECT_EVENT 472 | |
| | | | |
| /** | | /** | |
| * Message for operation events | | * Message for operation events | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TESTBED_OPERATIONFAILEVENT 474 | | #define GNUNET_MESSAGE_TYPE_TESTBED_OPERATION_FAIL_EVENT 473 | |
| | | | |
| /** | | /** | |
| * Message to signal successful peer creation | | * Message to signal successful peer creation | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TESTBED_PEERCREATESUCCESS 475 | | #define GNUNET_MESSAGE_TYPE_TESTBED_CREATE_PEER_SUCCESS 474 | |
| | | | |
| /** | | /** | |
| * Message to signal a generic operation has been successful | | * Message to signal a generic operation has been successful | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TESTBED_GENERICOPSUCCESS 476 | | #define GNUNET_MESSAGE_TYPE_TESTBED_GENERIC_OPERATION_SUCCESS 475 | |
| | | | |
| /** | | /** | |
|
| * Message to get the configuration of a peer | | * Message to get a peer's information | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TESTBED_GETPEERCONFIG 477 | | #define GNUNET_MESSAGE_TYPE_TESTBED_GET_PEER_INFORMATION 476 | |
| | | | |
| /** | | /** | |
|
| * Message containing the peer configuration | | * Message containing the peer's information | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TESTBED_PEERCONFIG 478 | | #define GNUNET_MESSAGE_TYPE_TESTBED_PEER_INFORMATION 477 | |
| | | | |
| /** | | /** | |
| * Message to request a controller to make one of its peer to connect to an
other | | * Message to request a controller to make one of its peer to connect to an
other | |
| * peer using the contained HELLO | | * peer using the contained HELLO | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TESTBED_REQUESTCONNECT 479 | | #define GNUNET_MESSAGE_TYPE_TESTBED_REMOTE_OVERLAY_CONNECT 478 | |
| | | | |
| /** | | /** | |
|
| * Message to cancel a REQUESTCONNECT request | | * Message to request configuration of a slave controller | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TESTBED_REQUESTCONNECTCANCEL 480 | | #define GNUNET_MESSAGE_TYPE_TESTBED_GET_SLAVE_CONFIGURATION 479 | |
| | | | |
| /** | | /** | |
|
| * Message to request configuration of a slave controller | | * Message which contains the configuration of slave controller | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TESTBED_GETSLAVECONFIG 481 | | #define GNUNET_MESSAGE_TYPE_TESTBED_SLAVE_CONFIGURATION 480 | |
| | | | |
| /** | | /** | |
|
| * Message which contains the configuration of slave controller | | * Message to signal the result of GNUNET_MESSAGE_TYPE_TESTBED_LINK_CONTROL | |
| | | LERS request | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_TESTBED_LINK_CONTROLLERS_RESULT 481 | |
| | | | |
| | | /** | |
| | | * A controller receiving this message floods it to its directly-connected | |
| | | * sub-controllers and then stops and destroys all peers | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TESTBED_SLAVECONFIG 482 | | #define GNUNET_MESSAGE_TYPE_TESTBED_SHUTDOWN_PEERS 482 | |
| | | | |
| | | /** | |
| | | * Message to start/stop a service of a peer | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_TESTBED_MANAGE_PEER_SERVICE 483 | |
| | | | |
| | | /** | |
| | | * Message to initialise a barrier. Messages of these type are flooded to | |
| | | all | |
| | | * sub-controllers | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_TESTBED_BARRIER_INIT 484 | |
| | | | |
| | | /** | |
| | | * Message to cancel a barrier. This message is flooded to all sub-control | |
| | | lers | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_TESTBED_BARRIER_CANCEL 485 | |
| | | | |
| | | /** | |
| | | * Message for signalling status of a barrier | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_TESTBED_BARRIER_STATUS 486 | |
| | | | |
| | | /** | |
| | | * Message sent by a peer when it has reached a barrier and is waiting for | |
| | | it to | |
| | | * be crossed | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_TESTBED_BARRIER_WAIT 487 | |
| | | | |
| /** | | /** | |
| * Not really a message, but for careful checks on the testbed messages; Sh
ould | | * Not really a message, but for careful checks on the testbed messages; Sh
ould | |
| * always be the maximum and never be used to send messages with this type | | * always be the maximum and never be used to send messages with this type | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_TESTBED_MAX 483 | | #define GNUNET_MESSAGE_TYPE_TESTBED_MAX 488 | |
| | | | |
| /** | | /** | |
| * The initialization message towards gnunet-testbed-helper | | * The initialization message towards gnunet-testbed-helper | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_TESTBED_HELPER_INIT 495 | | #define GNUNET_MESSAGE_TYPE_TESTBED_HELPER_INIT 495 | |
| | | | |
| /** | | /** | |
| * The reply message from gnunet-testbed-helper | | * The reply message from gnunet-testbed-helper | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_TESTBED_HELPER_REPLY 496 | | #define GNUNET_MESSAGE_TYPE_TESTBED_HELPER_REPLY 496 | |
| | | | |
|
| | | /************************************************************************** | |
| | | **** | |
| | | * GNS. | |
| | | ************************************************************************** | |
| | | ***/ | |
| | | | |
| /** | | /** | |
|
| * GNS. FIXME: document! | | * Client would like to resolve a name. | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_GNS_LOOKUP 500 | | #define GNUNET_MESSAGE_TYPE_GNS_LOOKUP 500 | |
| | | | |
|
| | | /** | |
| | | * Service response to name resolution request from client. | |
| | | */ | |
| #define GNUNET_MESSAGE_TYPE_GNS_LOOKUP_RESULT 501 | | #define GNUNET_MESSAGE_TYPE_GNS_LOOKUP_RESULT 501 | |
| | | | |
|
| #define GNUNET_MESSAGE_TYPE_GNS_SHORTEN 502 | | | |
| | | | |
| #define GNUNET_MESSAGE_TYPE_GNS_SHORTEN_RESULT 503 | | | |
| | | | |
| #define GNUNET_MESSAGE_TYPE_GNS_GET_AUTH 504 | | | |
| | | | |
| #define GNUNET_MESSAGE_TYPE_GNS_GET_AUTH_RESULT 505 | | | |
| | | | |
| /**************************************************************************
***** | | /**************************************************************************
***** | |
| * CONSENSUS message types | | * CONSENSUS message types | |
| **************************************************************************
****/ | | **************************************************************************
****/ | |
| | | | |
| /** | | /** | |
| * Join a consensus session. Sent by client to service as first message. | | * Join a consensus session. Sent by client to service as first message. | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_CONSENSUS_CLIENT_JOIN 520 | | #define GNUNET_MESSAGE_TYPE_CONSENSUS_CLIENT_JOIN 520 | |
| | | | |
| /** | | /** | |
| | | | |
| skipping to change at line 1640 | | skipping to change at line 1641 | |
| * Sent by client to service in order to start the consensus conclusion. | | * Sent by client to service in order to start the consensus conclusion. | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_CONSENSUS_CLIENT_CONCLUDE 524 | | #define GNUNET_MESSAGE_TYPE_CONSENSUS_CLIENT_CONCLUDE 524 | |
| | | | |
| /** | | /** | |
| * Sent by service to client in order to signal a completed consensus concl
usion. | | * Sent by service to client in order to signal a completed consensus concl
usion. | |
| * Last message sent in a consensus session. | | * Last message sent in a consensus session. | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_CONSENSUS_CLIENT_CONCLUDE_DONE 525 | | #define GNUNET_MESSAGE_TYPE_CONSENSUS_CLIENT_CONCLUDE_DONE 525 | |
| | | | |
|
| | | /* message types 526-539 reserved for consensus client/service messages */ | |
| | | | |
| /** | | /** | |
| * Sent by client to service, telling whether a received element should | | * Sent by client to service, telling whether a received element should | |
| * be accepted and propagated further or not. | | * be accepted and propagated further or not. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_CONSENSUS_CLIENT_ACK 527 | | #define GNUNET_MESSAGE_TYPE_CONSENSUS_CLIENT_ACK 540 | |
| | | | |
| | | /** | |
| | | * Strata estimator. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_DELTA_ESTIMATE 541 | |
| | | | |
| | | /** | |
| | | * IBF containing all elements of a peer. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_DIFFERENCE_DIGEST 542 | |
| | | | |
| /** | | /** | |
|
| * Update another peer's consensus set with new elements. | | * One or more elements that are sent from peer to peer. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_ELEMENTS 528 | | #define GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_ELEMENTS 543 | |
| | | | |
| /** | | /** | |
|
| * Request elements (by their hash) from another peer. | | * Elements, and requests for further elements | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_REQUEST_ELEMENTS 529 | | #define GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_ELEMENTS_REQUEST 544 | |
| | | | |
| | | /** | |
| | | * Elements that a peer reports to be missing at the remote peer. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_ELEMENTS_REPORT 545 | |
| | | | |
| | | /* | |
| | | * Initialization message for consensus p2p communication. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_HELLO 546 | |
| | | | |
| | | /** | |
| | | * Report that the peer is synced with the partner after successfuly decodi | |
| | | ng the invertible bloom filter. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_SYNCED 547 | |
| | | | |
| | | /** | |
| | | * Interaction os over, got synched and reported all elements | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_FIN 548 | |
| | | | |
| | | /** | |
| | | * Abort a round, don't send requested elements anymore | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_ABORT 548 | |
| | | | |
| | | /** | |
| | | * Abort a round, don't send requested elements anymore | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_ROUND_CONTEXT 547 | |
| | | | |
| | | /************************************************************************** | |
| | | ***** | |
| | | * SET message types | |
| | | ************************************************************************** | |
| | | ****/ | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_SET_REJECT 569 | |
| | | | |
| | | /** | |
| | | * Cancel a set operation | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SET_CANCEL 570 | |
| | | | |
| | | /** | |
| | | * Acknowledge result from iteration | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SET_ITER_ACK 571 | |
| | | | |
| | | /** | |
| | | * Create an empty set | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SET_RESULT 572 | |
| | | | |
| | | /** | |
| | | * Add element to set | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SET_ADD 573 | |
| | | | |
| | | /** | |
| | | * Remove element from set | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SET_REMOVE 574 | |
| | | | |
| | | /** | |
| | | * Listen for operation requests | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SET_LISTEN 575 | |
| | | | |
| | | /** | |
| | | * Accept a set request | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SET_ACCEPT 576 | |
| | | | |
| | | /** | |
| | | * Evaluate a set operation | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SET_EVALUATE 577 | |
| | | | |
| | | /** | |
| | | * Start a set operation with the given set | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SET_CONCLUDE 578 | |
| | | | |
| | | /** | |
| | | * Notify the client of a request from a remote peer | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SET_REQUEST 579 | |
| | | | |
| | | /** | |
| | | * Create a new local set | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SET_CREATE 580 | |
| | | | |
| | | /** | |
| | | * Request a set operation from a remote peer. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SET_P2P_OPERATION_REQUEST 581 | |
| | | | |
| /** | | /** | |
| * Strata estimator. | | * Strata estimator. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_STRATA 530 | | #define GNUNET_MESSAGE_TYPE_SET_UNION_P2P_SE 582 | |
| | | | |
| /** | | /** | |
|
| * IBF containing all elements of a peer. | | * Invertible bloom filter. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SET_UNION_P2P_IBF 583 | |
| | | | |
| | | /** | |
| | | * Actual set elements. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SET_P2P_ELEMENTS 584 | |
| | | | |
| | | /** | |
| | | * Requests for the elements with the given hashes. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SET_P2P_ELEMENT_REQUESTS 585 | |
| | | | |
| | | /** | |
| | | * Operation is done. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SET_P2P_DONE 586 | |
| | | | |
| | | /** | |
| | | * Start iteration over set elements. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_IBF 531 | | #define GNUNET_MESSAGE_TYPE_SET_ITER_REQUEST 587 | |
| | | | |
| /** | | /** | |
|
| * Request reconcilliation with another peer. | | * Element result for the iterating client. | |
| */ | | */ | |
|
| #define GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_RECONCILE 532 | | #define GNUNET_MESSAGE_TYPE_SET_ITER_ELEMENT 588 | |
| | | | |
| /** | | /** | |
|
| * Next available: 570 | | * Iteration end marker for the client. | |
| */ | | */ | |
|
| | | #define GNUNET_MESSAGE_TYPE_SET_ITER_DONE 589 | |
| | | | |
| | | /** | |
| | | * Information about the element count for intersection | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SET_INTERSECTION_P2P_ELEMENT_INFO 591 | |
| | | | |
| | | /** | |
| | | * Bloom filter message for intersection exchange started by Bob. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SET_INTERSECTION_P2P_BF 592 | |
| | | | |
| | | /** | |
| | | * Bloom filter message for intersection exchange started by Bob. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SET_INTERSECTION_P2P_BF_PART 593 | |
| | | | |
| /**************************************************************************
***** | | /**************************************************************************
***** | |
|
| * TODO: we need a way to register message types centrally (via some webpag | | * TESTBED LOGGER message types | |
| e). | | ************************************************************************** | |
| * For now: unofficial extensions should start at 48k, internal extensions | | ****/ | |
| * define here should leave some room (4-10 additional messages to the prev | | | |
| ious | | /** | |
| * extension). | | * Message for TESTBED LOGGER | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_TESTBED_LOGGER_MSG 600 | |
| | | | |
| | | /** | |
| | | * Message for TESTBED LOGGER acknowledgement | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_TESTBED_LOGGER_ACK 601 | |
| | | | |
| | | /************************************************************************** | |
| | | ***** | |
| | | * EXPERIMENTATION message types | |
| | | ************************************************************************** | |
| | | ****/ | |
| | | | |
| | | /** | |
| | | * Message for experimentation request | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_EXPERIMENTATION_REQUEST 610 | |
| | | | |
| | | /** | |
| | | * Message for experimentation response | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_EXPERIMENTATION_RESPONSE 611 | |
| | | | |
| | | /** | |
| | | * Message for experimentation response | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_EXPERIMENTATION_START 612 | |
| | | | |
| | | /** | |
| | | * Message for experimentation response | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_EXPERIMENTATION_START_ACK 613 | |
| | | | |
| | | /** | |
| | | * Message for experimentation response | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_EXPERIMENTATION_STOP 614 | |
| | | | |
| | | /** | |
| | | * Advertise regex capability. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_REGEX_ANNOUNCE 620 | |
| | | | |
| | | /** | |
| | | * Search for peer with matching capability. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_REGEX_SEARCH 621 | |
| | | | |
| | | /** | |
| | | * Result in response to regex search. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_REGEX_RESULT 622 | |
| | | | |
| | | /************************************************************************** | |
| | | ***** | |
| | | * IDENTITY message types | |
| | | ************************************************************************** | |
| | | ****/ | |
| | | | |
| | | /** | |
| | | * First message send from identity client to service (to subscribe to | |
| | | * updates). | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_IDENTITY_START 624 | |
| | | | |
| | | /** | |
| | | * Generic response from identity service with success and/or error message | |
| | | . | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_IDENTITY_RESULT_CODE 625 | |
| | | | |
| | | /** | |
| | | * Update about identity status from service to clients. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_IDENTITY_UPDATE 626 | |
| | | | |
| | | /** | |
| | | * Client requests to know default identity for a subsystem. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_IDENTITY_GET_DEFAULT 627 | |
| | | | |
| | | /** | |
| | | * Client sets default identity; or service informs about default identity. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_IDENTITY_SET_DEFAULT 628 | |
| | | | |
| | | /** | |
| | | * Create new identity (client->service). | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_IDENTITY_CREATE 629 | |
| | | | |
| | | /** | |
| | | * Rename existing identity (client->service). | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_IDENTITY_RENAME 630 | |
| | | | |
| | | /** | |
| | | * Delete identity (client->service). | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_IDENTITY_DELETE 631 | |
| | | | |
| | | /************************************************************************** | |
| | | ***** | |
| | | * REVOCATION message types | |
| | | ************************************************************************** | |
| | | ****/ | |
| | | | |
| | | /** | |
| | | * Client to service: was this key revoked? | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_REVOCATION_QUERY 636 | |
| | | | |
| | | /** | |
| | | * Service to client: answer if key was revoked! | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_REVOCATION_QUERY_RESPONSE 637 | |
| | | | |
| | | /** | |
| | | * Client to service OR peer-to-peer: revoke this key! | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_REVOCATION_REVOKE 638 | |
| | | | |
| | | /** | |
| | | * Service to client: revocation confirmed | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_REVOCATION_REVOKE_RESPONSE 639 | |
| | | | |
| | | /************************************************************************** | |
| | | ***** | |
| | | * SCALARPRODUCT message types | |
| | | ************************************************************************** | |
| | | ****/ | |
| | | | |
| | | /** | |
| | | * Client -> Vector-Product Service request message | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SCALARPRODUCT_CLIENT_TO_ALICE 640 | |
| | | | |
| | | /** | |
| | | * Client -> Vector-Product Service request message | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SCALARPRODUCT_CLIENT_TO_BOB 641 | |
| | | | |
| | | /** | |
| | | * Vector-Product Service request -> remote VP Service | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SCALARPRODUCT_ALICE_TO_BOB 642 | |
| | | | |
| | | /** | |
| | | * Vector-Product Service request -> remote VP Service Multipart | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SCALARPRODUCT_ALICE_TO_BOB_MULTIPART 643 | |
| | | | |
| | | /** | |
| | | * remote Vector-Product Service response -> requesting VP Service | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SCALARPRODUCT_BOB_TO_ALICE 644 | |
| | | | |
| | | /** | |
| | | * remote Vector-Product Service response -> requesting VP Service Multipar | |
| | | t | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SCALARPRODUCT_BOB_TO_ALICE_MULTIPART 645 | |
| | | | |
| | | /** | |
| | | * Vector-Product Service response -> Client | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SCALARPRODUCT_SERVICE_TO_CLIENT 646 | |
| | | | |
| | | /************************************************************************** | |
| | | ***** | |
| | | * PSYCSTORE message types | |
| | | ************************************************************************** | |
| | | ****/ | |
| | | | |
| | | /** | |
| | | * Store a membership event. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_PSYCSTORE_MEMBERSHIP_STORE 650 | |
| | | | |
| | | /** | |
| | | * Test for membership of a member at a particular point in time. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_PSYCSTORE_MEMBERSHIP_TEST 651 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYCSTORE_FRAGMENT_STORE 652 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYCSTORE_FRAGMENT_GET 653 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYCSTORE_MESSAGE_GET 654 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYCSTORE_MESSAGE_GET_FRAGMENT 655 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYCSTORE_COUNTERS_GET 656 | |
| | | | |
| | | /* 657 */ | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYCSTORE_STATE_MODIFY 658 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYCSTORE_STATE_SYNC 659 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYCSTORE_STATE_RESET 660 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYCSTORE_STATE_HASH_UPDATE 661 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYCSTORE_STATE_GET 662 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYCSTORE_STATE_GET_PREFIX 663 | |
| | | | |
| | | /** | |
| | | * Generic response from PSYCstore service with success and/or error messag | |
| | | e. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_PSYCSTORE_RESULT_CODE 664 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYCSTORE_RESULT_FRAGMENT 665 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYCSTORE_RESULT_COUNTERS 666 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYCSTORE_RESULT_STATE 667 | |
| | | | |
| | | /************************************************************************** | |
| | | ***** | |
| | | * PSYC message types | |
| | | ************************************************************************** | |
| | | ****/ | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_RESULT_CODE 680 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_MASTER_START 681 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_MASTER_START_ACK 682 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_MASTER_STOP 683 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_SLAVE_JOIN 684 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_SLAVE_JOIN_ACK 685 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_SLAVE_PART 686 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_JOIN_REQUEST 687 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_JOIN_DECISION 688 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_CHANNEL_SLAVE_ADD 689 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_CHANNEL_SLAVE_RM 690 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD 691 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MODIFIER 692 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MOD_CONT 693 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_DATA 694 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_TRANSMIT_ACK 695 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_STORY_REQUEST 701 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_STORY_RESPONSE 702 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_STATE_GET 703 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_STATE_GET_PREFIX 704 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_STATE_RESPONSE 705 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_STATE_MODIFIER 706 | |
| | | | |
| | | #define GNUNET_MESSAGE_TYPE_PSYC_STATE_MOD_CONT 707 | |
| | | | |
| | | /************************************************************************** | |
| | | ***** | |
| | | * CONVERSATION message types | |
| | | ************************************************************************** | |
| | | ****/ | |
| | | | |
| | | /** | |
| | | * Message to transmit the audio between helper and speaker/microphone libr | |
| | | ary. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONVERSATION_AUDIO 730 | |
| | | | |
| | | /** | |
| | | * Client -> Server message register a phone. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_REGISTER 731 | |
| | | | |
| | | /** | |
| | | * Client -> Server message to reject/hangup a call | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_PICK_UP 732 | |
| | | | |
| | | /** | |
| | | * Client -> Server message to reject/hangup a call | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_HANG_UP 733 | |
| | | | |
| | | /** | |
| | | * Client <- Server message to indicate a ringing phone | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_CALL 734 | |
| | | | |
| | | /** | |
| | | * Client <- Server message to indicate a ringing phone | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_RING 735 | |
| | | | |
| | | /** | |
| | | * Client <-> Server message to suspend connection. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_SUSPEND 736 | |
| | | | |
| | | /** | |
| | | * Client <-> Server message to resume connection. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_RESUME 737 | |
| | | | |
| | | /** | |
| | | * Client <-> Server message to send audio data. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_PICKED_UP 738 | |
| | | | |
| | | /** | |
| | | * Client <-> Server message to send audio data. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONVERSATION_CS_AUDIO 739 | |
| | | | |
| | | /** | |
| | | * Mesh: call initiation | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONVERSATION_MESH_PHONE_RING 740 | |
| | | | |
| | | /** | |
| | | * Mesh: hang up / refuse call | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONVERSATION_MESH_PHONE_HANG_UP 741 | |
| | | | |
| | | /** | |
| | | * Mesh: pick up phone (establish audio channel) | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONVERSATION_MESH_PHONE_PICK_UP 742 | |
| | | | |
| | | /** | |
| | | * Mesh: phone suspended. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONVERSATION_MESH_PHONE_SUSPEND 743 | |
| | | | |
| | | /** | |
| | | * Mesh: phone resumed. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONVERSATION_MESH_PHONE_RESUME 744 | |
| | | | |
| | | /** | |
| | | * Mesh: audio data | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_CONVERSATION_MESH_AUDIO 745 | |
| | | | |
| | | /************************************************************************** | |
| | | ***** | |
| | | * MULTICAST message types | |
| | | ************************************************************************** | |
| | | ****/ | |
| | | | |
| | | /* WIP: no numbers assigned yet */ | |
| | | | |
| | | /** | |
| | | * Multicast message from the origin to all members. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_MULTICAST_MESSAGE 750 | |
| | | | |
| | | /** | |
| | | * A unicast message from a group member to the origin. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_MULTICAST_REQUEST | |
| | | | |
| | | /** | |
| | | * A peer wants to join the group. | |
| | | * | |
| | | * Unicast message to the origin or another group member. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_MULTICAST_JOIN_REQUEST | |
| | | | |
| | | /** | |
| | | * Response to a join request. | |
| | | * | |
| | | * Unicast message from a group member to the peer wanting to join. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_MULTICAST_JOIN_DECISION | |
| | | | |
| | | /** | |
| | | * A peer wants to part the group. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_MULTICAST_PART_REQUEST | |
| | | | |
| | | /** | |
| | | * Acknowledgement sent in response to a part request. | |
| | | * | |
| | | * Unicast message from a group member to the peer wanting to part. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_MULTICAST_PART_ACK | |
| | | | |
| | | /** | |
| | | * Group terminated. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_MULTICAST_GROUP_END | |
| | | | |
| | | /** | |
| | | * | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_REQUEST | |
| | | | |
| | | /** | |
| | | * | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_REQUEST_CANCEL | |
| | | | |
| | | /************************************************************************** | |
| | | ***** | |
| | | * SECRETSHARING message types | |
| | | ************************************************************************** | |
| | | ****/ | |
| | | | |
| | | /** | |
| | | * Establish a new session. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SECRETSHARING_CLIENT_GENERATE 780 | |
| | | | |
| | | /** | |
| | | * Request the decryption of a ciphertext. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SECRETSHARING_CLIENT_DECRYPT 781 | |
| | | | |
| | | /** | |
| | | * The service succeeded in decrypting a ciphertext. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SECRETSHARING_CLIENT_DECRYPT_DONE 782 | |
| | | | |
| | | /** | |
| | | * The cryptosystem has been established. | |
| | | * Contains the peer's share. | |
| | | */ | |
| | | #define GNUNET_MESSAGE_TYPE_SECRETSHARING_CLIENT_SECRET_READY 783 | |
| | | | |
| | | /** | |
| | | * Next available: 800 | |
| | | */ | |
| | | | |
| | | /************************************************************************** | |
| | | ***** | |
| | | * PSYC message types | |
| | | ************************************************************************** | |
| | | ****/ | |
| | | | |
| | | /************************************************************************** | |
| | | ***** | |
| | | * PSYCSTORE message types | |
| | | ************************************************************************** | |
| | | ****/ | |
| | | | |
| | | /************************************************************************** | |
| | | ***** | |
| | | * SOCIAL message types | |
| **************************************************************************
****/ | | **************************************************************************
****/ | |
| | | | |
| /** | | /** | |
| * Type used to match 'all' message types. | | * Type used to match 'all' message types. | |
| */ | | */ | |
| #define GNUNET_MESSAGE_TYPE_ALL 65535 | | #define GNUNET_MESSAGE_TYPE_ALL 65535 | |
| | | | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| { | | { | |
| #endif | | #endif | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| } | | } | |
| #endif | | #endif | |
| | | | |
|
| | | /** @} */ /* end of group protocols */ | |
| | | | |
| /* ifndef GNUNET_PROTOCOLS_H */ | | /* ifndef GNUNET_PROTOCOLS_H */ | |
| #endif | | #endif | |
| /* end of gnunet_protocols.h */ | | /* end of gnunet_protocols.h */ | |
| | | | |
End of changes. 150 change blocks. |
| 247 lines changed or deleted | | 875 lines changed or added | |
|
| gnunet_scheduler_lib.h | | gnunet_scheduler_lib.h | |
| /* | | /* | |
| This file is part of GNUnet | | This file is part of GNUnet | |
|
| (C) 2009, 2011 Christian Grothoff (and other contributing authors) | | (C) 2009-2013 Christian Grothoff (and other contributing authors) | |
| | | | |
| GNUnet is free software; you can redistribute it and/or modify | | GNUnet is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published | | 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. | | option) any later version. | |
| | | | |
| GNUnet is distributed in the hope that it will be useful, but | | GNUnet is distributed in the hope that it will be useful, but | |
| WITHOUT ANY WARRANTY; without even the implied warranty of | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| General Public License for more details. | | General Public License for more details. | |
| | | | |
| You should have received a copy of the GNU General Public License | | You should have received a copy of the GNU General Public License | |
| along with GNUnet; see the file COPYING. If not, write to the | | along with GNUnet; see the file COPYING. If not, write to the | |
| Free Software Foundation, Inc., 59 Temple Place - Suite 330, | | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| Boston, MA 02111-1307, USA. | | Boston, MA 02111-1307, USA. | |
| */ | | */ | |
| | | | |
| /** | | /** | |
| * @file include/gnunet_scheduler_lib.h | | * @file include/gnunet_scheduler_lib.h | |
| * @brief API to schedule computations using continuation passing style | | * @brief API to schedule computations using continuation passing style | |
| * @author Christian Grothoff | | * @author Christian Grothoff | |
|
| | | * @defgroup scheduler Event loop (scheduler) | |
| | | * @{ | |
| */ | | */ | |
| | | | |
| #ifndef GNUNET_SCHEDULER_LIB_H | | #ifndef GNUNET_SCHEDULER_LIB_H | |
| #define GNUNET_SCHEDULER_LIB_H | | #define GNUNET_SCHEDULER_LIB_H | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| extern "C" | | extern "C" | |
| { | | { | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| } | | } | |
| | | | |
| skipping to change at line 196 | | skipping to change at line 198 | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param tc context information (why was this task triggered now) | | * @param tc context information (why was this task triggered now) | |
| */ | | */ | |
| typedef void (*GNUNET_SCHEDULER_Task) (void *cls, | | typedef void (*GNUNET_SCHEDULER_Task) (void *cls, | |
| const struct GNUNET_SCHEDULER_TaskCo
ntext | | const struct GNUNET_SCHEDULER_TaskCo
ntext | |
| * tc); | | * tc); | |
| | | | |
| /** | | /** | |
| * Signature of the select function used by the scheduler. | | * Signature of the select function used by the scheduler. | |
|
| * GNUNET_NETWORK_socket_select matches it. | | * #GNUNET_NETWORK_socket_select matches it. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param rfds set of sockets to be checked for readability | | * @param rfds set of sockets to be checked for readability | |
| * @param wfds set of sockets to be checked for writability | | * @param wfds set of sockets to be checked for writability | |
| * @param efds set of sockets to be checked for exceptions | | * @param efds set of sockets to be checked for exceptions | |
| * @param timeout relative value when to return | | * @param timeout relative value when to return | |
|
| * @return number of selected sockets, GNUNET_SYSERR on error | | * @return number of selected sockets, #GNUNET_SYSERR on error | |
| */ | | */ | |
| typedef int (*GNUNET_SCHEDULER_select) (void *cls, | | typedef int (*GNUNET_SCHEDULER_select) (void *cls, | |
|
| struct GNUNET_NETWORK_FDSet * rfds, | | struct GNUNET_NETWORK_FDSet *rfds, | |
| struct GNUNET_NETWORK_FDSet * wfds, | | struct GNUNET_NETWORK_FDSet *wfds, | |
| struct GNUNET_NETWORK_FDSet * efds, | | struct GNUNET_NETWORK_FDSet *efds, | |
| struct GNUNET_TIME_Relative timeout
); | | struct GNUNET_TIME_Relative timeout
); | |
| | | | |
| /** | | /** | |
| * Initialize and run scheduler. This function will return when all | | * Initialize and run scheduler. This function will return when all | |
| * tasks have completed. On systems with signals, receiving a SIGTERM | | * tasks have completed. On systems with signals, receiving a SIGTERM | |
|
| * (and other similar signals) will cause "GNUNET_SCHEDULER_shutdown" | | * (and other similar signals) will cause #GNUNET_SCHEDULER_shutdown | |
| * to be run after the active task is complete. As a result, SIGTERM | | * to be run after the active task is complete. As a result, SIGTERM | |
| * causes all active tasks to be scheduled with reason | | * causes all active tasks to be scheduled with reason | |
|
| * "GNUNET_SCHEDULER_REASON_SHUTDOWN". (However, tasks added | | * #GNUNET_SCHEDULER_REASON_SHUTDOWN. (However, tasks added | |
| * afterwards will execute normally!). Note that any particular | | * afterwards will execute normally!). Note that any particular | |
| * signal will only shut down one scheduler; applications should | | * signal will only shut down one scheduler; applications should | |
| * always only create a single scheduler. | | * always only create a single scheduler. | |
| * | | * | |
| * @param task task to run first (and immediately) | | * @param task task to run first (and immediately) | |
| * @param task_cls closure of task | | * @param task_cls closure of task | |
| */ | | */ | |
| void | | void | |
| GNUNET_SCHEDULER_run (GNUNET_SCHEDULER_Task task, void *task_cls); | | GNUNET_SCHEDULER_run (GNUNET_SCHEDULER_Task task, void *task_cls); | |
| | | | |
| | | | |
| skipping to change at line 244 | | skipping to change at line 246 | |
| */ | | */ | |
| void | | void | |
| GNUNET_SCHEDULER_shutdown (void); | | GNUNET_SCHEDULER_shutdown (void); | |
| | | | |
| /** | | /** | |
| * Get information about the current load of this scheduler. Use this | | * Get information about the current load of this scheduler. Use this | |
| * function to determine if an elective task should be added or simply | | * function to determine if an elective task should be added or simply | |
| * dropped (if the decision should be made based on the number of | | * dropped (if the decision should be made based on the number of | |
| * tasks ready to run). | | * tasks ready to run). | |
| * | | * | |
|
| * * @param p priority-level to query, use KEEP to query the level | | * @param p priority-level to query, use KEEP to query the level | |
| * of the current task, use COUNT to get the sum over | | * of the current task, use COUNT to get the sum over | |
| * all priority levels | | * all priority levels | |
| * @return number of tasks pending right now | | * @return number of tasks pending right now | |
| */ | | */ | |
| unsigned int | | unsigned int | |
| GNUNET_SCHEDULER_get_load (enum GNUNET_SCHEDULER_Priority p); | | GNUNET_SCHEDULER_get_load (enum GNUNET_SCHEDULER_Priority p); | |
| | | | |
| /** | | /** | |
| * Obtain the reason code for why the current task was | | * Obtain the reason code for why the current task was | |
| * started. Will return the same value as | | * started. Will return the same value as | |
| * the GNUNET_SCHEDULER_TaskContext's reason field. | | * the GNUNET_SCHEDULER_TaskContext's reason field. | |
| * | | * | |
|
| * * @return reason(s) why the current task is run | | * @return reason(s) why the current task is run | |
| */ | | */ | |
| enum GNUNET_SCHEDULER_Reason | | enum GNUNET_SCHEDULER_Reason | |
| GNUNET_SCHEDULER_get_reason (void); | | GNUNET_SCHEDULER_get_reason (void); | |
| | | | |
| /** | | /** | |
| * Cancel the task with the specified identifier. | | * Cancel the task with the specified identifier. | |
| * The task must not yet have run. | | * The task must not yet have run. | |
| * | | * | |
|
| * * @param task id of the task to cancel | | * @param task id of the task to cancel | |
| * @return the closure of the callback of the cancelled task | | * @return the closure of the callback of the cancelled task | |
| */ | | */ | |
| void * | | void * | |
| GNUNET_SCHEDULER_cancel (GNUNET_SCHEDULER_TaskIdentifier task); | | GNUNET_SCHEDULER_cancel (GNUNET_SCHEDULER_TaskIdentifier task); | |
| | | | |
| /** | | /** | |
| * Continue the current execution with the given function. This is | | * Continue the current execution with the given function. This is | |
| * similar to the other "add" functions except that there is no delay | | * similar to the other "add" functions except that there is no delay | |
| * and the reason code can be specified. | | * and the reason code can be specified. | |
| * | | * | |
|
| * * @param task main function of the task | | * @param task main function of the task | |
| * @param task_cls closure of task | | * @param task_cls closure of task | |
| * @param reason reason for task invocation | | * @param reason reason for task invocation | |
| */ | | */ | |
| void | | void | |
| GNUNET_SCHEDULER_add_continuation (GNUNET_SCHEDULER_Task task, void *task_c
ls, | | GNUNET_SCHEDULER_add_continuation (GNUNET_SCHEDULER_Task task, void *task_c
ls, | |
| enum GNUNET_SCHEDULER_Reason reason); | | enum GNUNET_SCHEDULER_Reason reason); | |
| | | | |
| /** | | /** | |
| * Continue the current execution with the given function. This is | | * Continue the current execution with the given function. This is | |
| * similar to the other "add" functions except that there is no delay | | * similar to the other "add" functions except that there is no delay | |
| * and the reason code can be specified. | | * and the reason code can be specified. | |
| * | | * | |
| * @param task main function of the task | | * @param task main function of the task | |
|
| * @param task_cls closure for 'main' | | * @param task_cls closure for @a task | |
| * @param reason reason for task invocation | | * @param reason reason for task invocation | |
| * @param priority priority to use for the task | | * @param priority priority to use for the task | |
| */ | | */ | |
| void | | void | |
| GNUNET_SCHEDULER_add_continuation_with_priority (GNUNET_SCHEDULER_Task task
, void *task_cls, | | GNUNET_SCHEDULER_add_continuation_with_priority (GNUNET_SCHEDULER_Task task
, void *task_cls, | |
| enum GNUNET_SCHEDULER_Reaso
n reason, | | enum GNUNET_SCHEDULER_Reaso
n reason, | |
| enum GNUNET_SCHEDULER_Prior
ity priority); | | enum GNUNET_SCHEDULER_Prior
ity priority); | |
| | | | |
| /** | | /** | |
| * Schedule a new task to be run with a specified priority. | | * Schedule a new task to be run with a specified priority. | |
| * | | * | |
|
| * * @param prio how important is the new task? | | * @param prio how important is the new task? | |
| * @param task main function of the task | | * @param task main function of the task | |
|
| * @param task_cls closure of task | | * @param task_cls closure of @a task | |
| * @return unique task identifier for the job | | * @return unique task identifier for the job | |
|
| * only valid until "task" is started! | | * only valid until @a task is started! | |
| */ | | */ | |
| GNUNET_SCHEDULER_TaskIdentifier | | GNUNET_SCHEDULER_TaskIdentifier | |
| GNUNET_SCHEDULER_add_with_priority (enum GNUNET_SCHEDULER_Priority prio, | | GNUNET_SCHEDULER_add_with_priority (enum GNUNET_SCHEDULER_Priority prio, | |
| GNUNET_SCHEDULER_Task task, void *task_
cls); | | GNUNET_SCHEDULER_Task task, void *task_
cls); | |
| | | | |
| /** | | /** | |
|
| * Schedule a new task to be run as soon as possible. The task | | * Schedule a new task to be run as soon as possible. Note that this | |
| * will be run with the DEFAULT priority. | | * does not guarantee that this will be the next task that is being | |
| | | * run, as other tasks with higher priority (or that are already ready | |
| | | * to run) might get to run first. Just as with delays, clients must | |
| | | * not rely on any particular order of execution between tasks | |
| | | * scheduled concurrently. | |
| * | | * | |
|
| * * @param task main function of the task | | * The task will be run with the DEFAULT priority. | |
| * @param task_cls closure of task | | * | |
| | | * @param task main function of the task | |
| | | * @param task_cls closure of @a task | |
| * @return unique task identifier for the job | | * @return unique task identifier for the job | |
|
| * only valid until "task" is started! | | * only valid until @a task is started! | |
| */ | | */ | |
| GNUNET_SCHEDULER_TaskIdentifier | | GNUNET_SCHEDULER_TaskIdentifier | |
| GNUNET_SCHEDULER_add_now (GNUNET_SCHEDULER_Task task, void *task_cls); | | GNUNET_SCHEDULER_add_now (GNUNET_SCHEDULER_Task task, void *task_cls); | |
| | | | |
| /** | | /** | |
| * Schedule a new task to be run as soon as possible with the | | * Schedule a new task to be run as soon as possible with the | |
| * (transitive) ignore-shutdown flag either explicitly set or | | * (transitive) ignore-shutdown flag either explicitly set or | |
| * explicitly enabled. This task (and all tasks created from it, | | * explicitly enabled. This task (and all tasks created from it, | |
| * other than by another call to this function) will either count or | | * other than by another call to this function) will either count or | |
| * not count for the 'lifeness' of the process. This API is only | | * not count for the 'lifeness' of the process. This API is only | |
| * useful in a few special cases. | | * useful in a few special cases. | |
| * | | * | |
|
| * @param lifeness GNUNET_YES if the task counts for lifeness, GNUNET_NO if
not. | | * @param lifeness #GNUNET_YES if the task counts for lifeness, #GNUNET_NO
if not. | |
| * @param task main function of the task | | * @param task main function of the task | |
|
| * @param task_cls closure of task | | * @param task_cls closure of @a task | |
| * @return unique task identifier for the job | | * @return unique task identifier for the job | |
|
| * only valid until "task" is started! | | * only valid until @a task is started! | |
| */ | | */ | |
| GNUNET_SCHEDULER_TaskIdentifier | | GNUNET_SCHEDULER_TaskIdentifier | |
| GNUNET_SCHEDULER_add_now_with_lifeness (int lifeness, | | GNUNET_SCHEDULER_add_now_with_lifeness (int lifeness, | |
| GNUNET_SCHEDULER_Task task, | | GNUNET_SCHEDULER_Task task, | |
| void *task_cls); | | void *task_cls); | |
| | | | |
| /** | | /** | |
| * Schedule a new task to be run with a specified delay. The task | | * Schedule a new task to be run with a specified delay. The task | |
| * will be scheduled for execution once the delay has expired. It | | * will be scheduled for execution once the delay has expired. It | |
| * will be run with the DEFAULT priority. | | * will be run with the DEFAULT priority. | |
| * | | * | |
| * * @param delay when should this operation time out? Use | | * * @param delay when should this operation time out? Use | |
|
| * GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown" | | * #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown" | |
| * @param task main function of the task | | * @param task main function of the task | |
|
| * @param task_cls closure of task | | * @param task_cls closure of @a task | |
| * @return unique task identifier for the job | | * @return unique task identifier for the job | |
|
| * only valid until "task" is started! | | * only valid until @a task is started! | |
| */ | | */ | |
| GNUNET_SCHEDULER_TaskIdentifier | | GNUNET_SCHEDULER_TaskIdentifier | |
| GNUNET_SCHEDULER_add_delayed (struct GNUNET_TIME_Relative delay, | | GNUNET_SCHEDULER_add_delayed (struct GNUNET_TIME_Relative delay, | |
| GNUNET_SCHEDULER_Task task, void *task_cls); | | GNUNET_SCHEDULER_Task task, void *task_cls); | |
| | | | |
| /** | | /** | |
| * Schedule a new task to be run with a specified delay. The task | | * Schedule a new task to be run with a specified delay. The task | |
| * will be scheduled for execution once the delay has expired. | | * will be scheduled for execution once the delay has expired. | |
| * | | * | |
| * @param delay when should this operation time out? Use | | * @param delay when should this operation time out? Use | |
|
| * GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown" | | * #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown" | |
| * @param priority priority to use for the task | | * @param priority priority to use for the task | |
| * @param task main function of the task | | * @param task main function of the task | |
|
| * @param task_cls closure of task | | * @param task_cls closure of @a task | |
| * @return unique task identifier for the job | | * @return unique task identifier for the job | |
|
| * only valid until "task" is started! | | * only valid until @a task is started! | |
| */ | | */ | |
| GNUNET_SCHEDULER_TaskIdentifier | | GNUNET_SCHEDULER_TaskIdentifier | |
| GNUNET_SCHEDULER_add_delayed_with_priority (struct GNUNET_TIME_Relative del
ay, | | GNUNET_SCHEDULER_add_delayed_with_priority (struct GNUNET_TIME_Relative del
ay, | |
| enum GNUNET_SCHEDULER_Priority p
riority, | | enum GNUNET_SCHEDULER_Priority p
riority, | |
| GNUNET_SCHEDULER_Task task, void
*task_cls); | | GNUNET_SCHEDULER_Task task, void
*task_cls); | |
| | | | |
| /** | | /** | |
| * Schedule a new task to be run with a specified delay or when the | | * Schedule a new task to be run with a specified delay or when the | |
| * specified file descriptor is ready for reading. The delay can be | | * specified file descriptor is ready for reading. The delay can be | |
| * used as a timeout on the socket being ready. The task will be | | * used as a timeout on the socket being ready. The task will be | |
| * scheduled for execution once either the delay has expired or the | | * scheduled for execution once either the delay has expired or the | |
| * socket operation is ready. It will be run with the DEFAULT priority. | | * socket operation is ready. It will be run with the DEFAULT priority. | |
| * | | * | |
| * * @param delay when should this operation time out? Use | | * * @param delay when should this operation time out? Use | |
|
| * GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown" | | * #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown" | |
| * @param rfd read file-descriptor | | * @param rfd read file-descriptor | |
| * @param task main function of the task | | * @param task main function of the task | |
|
| * @param task_cls closure of task | | * @param task_cls closure of @a task | |
| * @return unique task identifier for the job | | * @return unique task identifier for the job | |
|
| * only valid until "task" is started! | | * only valid until @a task is started! | |
| */ | | */ | |
| GNUNET_SCHEDULER_TaskIdentifier | | GNUNET_SCHEDULER_TaskIdentifier | |
| GNUNET_SCHEDULER_add_read_net (struct GNUNET_TIME_Relative delay, | | GNUNET_SCHEDULER_add_read_net (struct GNUNET_TIME_Relative delay, | |
| struct GNUNET_NETWORK_Handle *rfd, | | struct GNUNET_NETWORK_Handle *rfd, | |
| GNUNET_SCHEDULER_Task task, void *task_cls); | | GNUNET_SCHEDULER_Task task, void *task_cls); | |
| | | | |
| /** | | /** | |
| * Schedule a new task to be run with a specified priority and to be | | * Schedule a new task to be run with a specified priority and to be | |
| * run after the specified delay or when the specified file descriptor | | * run after the specified delay or when the specified file descriptor | |
| * is ready for reading. The delay can be used as a timeout on the | | * is ready for reading. The delay can be used as a timeout on the | |
| * socket being ready. The task will be scheduled for execution once | | * socket being ready. The task will be scheduled for execution once | |
| * either the delay has expired or the socket operation is ready. It | | * either the delay has expired or the socket operation is ready. It | |
| * will be run with the DEFAULT priority. | | * will be run with the DEFAULT priority. | |
| * | | * | |
| * @param delay when should this operation time out? Use | | * @param delay when should this operation time out? Use | |
|
| * GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown" | | * #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown" | |
| * @param priority priority to use for the task | | * @param priority priority to use for the task | |
| * @param rfd read file-descriptor | | * @param rfd read file-descriptor | |
| * @param task main function of the task | | * @param task main function of the task | |
|
| * @param task_cls closure of task | | * @param task_cls closure of @a task | |
| * @return unique task identifier for the job | | * @return unique task identifier for the job | |
|
| * only valid until "task" is started! | | * only valid until @a task is started! | |
| */ | | */ | |
| GNUNET_SCHEDULER_TaskIdentifier | | GNUNET_SCHEDULER_TaskIdentifier | |
| GNUNET_SCHEDULER_add_read_net_with_priority (struct GNUNET_TIME_Relative de
lay, | | GNUNET_SCHEDULER_add_read_net_with_priority (struct GNUNET_TIME_Relative de
lay, | |
| enum GNUNET_SCHEDULER_Priority
priority, | | enum GNUNET_SCHEDULER_Priority
priority, | |
| struct GNUNET_NETWORK_Handle *r
fd, | | struct GNUNET_NETWORK_Handle *r
fd, | |
| GNUNET_SCHEDULER_Task task, voi
d *task_cls); | | GNUNET_SCHEDULER_Task task, voi
d *task_cls); | |
| | | | |
| /** | | /** | |
| * Schedule a new task to be run with a specified delay or when the | | * Schedule a new task to be run with a specified delay or when the | |
| * specified file descriptor is ready for writing. The delay can be | | * specified file descriptor is ready for writing. The delay can be | |
| * used as a timeout on the socket being ready. The task will be | | * used as a timeout on the socket being ready. The task will be | |
| * scheduled for execution once either the delay has expired or the | | * scheduled for execution once either the delay has expired or the | |
| * socket operation is ready. It will be run with the DEFAULT priority. | | * socket operation is ready. It will be run with the DEFAULT priority. | |
| * | | * | |
| * * @param delay when should this operation time out? Use | | * * @param delay when should this operation time out? Use | |
|
| * GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown" | | * #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown" | |
| * @param wfd write file-descriptor | | * @param wfd write file-descriptor | |
| * @param task main function of the task | | * @param task main function of the task | |
|
| * @param task_cls closure of task | | * @param task_cls closure of @a task | |
| * @return unique task identifier for the job | | * @return unique task identifier for the job | |
|
| * only valid until "task" is started! | | * only valid until @a task is started! | |
| */ | | */ | |
| GNUNET_SCHEDULER_TaskIdentifier | | GNUNET_SCHEDULER_TaskIdentifier | |
| GNUNET_SCHEDULER_add_write_net (struct GNUNET_TIME_Relative delay, | | GNUNET_SCHEDULER_add_write_net (struct GNUNET_TIME_Relative delay, | |
| struct GNUNET_NETWORK_Handle *wfd, | | struct GNUNET_NETWORK_Handle *wfd, | |
| GNUNET_SCHEDULER_Task task, void *task_cls)
; | | GNUNET_SCHEDULER_Task task, void *task_cls)
; | |
| | | | |
| /** | | /** | |
| * Schedule a new task to be run with a specified delay or when the | | * Schedule a new task to be run with a specified delay or when the | |
|
| | | * specified file descriptor is ready. The delay can be | |
| | | * used as a timeout on the socket being ready. The task will be | |
| | | * scheduled for execution once either the delay has expired or the | |
| | | * socket operation is ready. | |
| | | * | |
| | | * @param delay when should this operation time out? Use | |
| | | * #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown" | |
| | | * @param priority priority of the task | |
| | | * @param fd file-descriptor | |
| | | * @param on_read whether to poll the file-descriptor for readability | |
| | | * @param on_write whether to poll the file-descriptor for writability | |
| | | * @param task main function of the task | |
| | | * @param task_cls closure of @a task | |
| | | * @return unique task identifier for the job | |
| | | * only valid until "task" is started! | |
| | | */ | |
| | | GNUNET_SCHEDULER_TaskIdentifier | |
| | | GNUNET_SCHEDULER_add_net_with_priority (struct GNUNET_TIME_Relative delay, | |
| | | enum GNUNET_SCHEDULER_Priority pri | |
| | | ority, | |
| | | struct GNUNET_NETWORK_Handle *fd, | |
| | | int on_read, int on_write, | |
| | | GNUNET_SCHEDULER_Task task, void * | |
| | | task_cls); | |
| | | | |
| | | /** | |
| | | * Schedule a new task to be run with a specified delay or when the | |
| * specified file descriptor is ready for reading. The delay can be | | * specified file descriptor is ready for reading. The delay can be | |
| * used as a timeout on the socket being ready. The task will be | | * used as a timeout on the socket being ready. The task will be | |
| * scheduled for execution once either the delay has expired or the | | * scheduled for execution once either the delay has expired or the | |
| * socket operation is ready. It will be run with the DEFAULT priority. | | * socket operation is ready. It will be run with the DEFAULT priority. | |
| * | | * | |
| * * @param delay when should this operation time out? Use | | * * @param delay when should this operation time out? Use | |
|
| * GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown" | | * #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown" | |
| * @param rfd read file-descriptor | | * @param rfd read file-descriptor | |
| * @param task main function of the task | | * @param task main function of the task | |
|
| * @param task_cls closure of task | | * @param task_cls closure of @a task | |
| * @return unique task identifier for the job | | * @return unique task identifier for the job | |
| * only valid until "task" is started! | | * only valid until "task" is started! | |
| */ | | */ | |
| GNUNET_SCHEDULER_TaskIdentifier | | GNUNET_SCHEDULER_TaskIdentifier | |
| GNUNET_SCHEDULER_add_read_file (struct GNUNET_TIME_Relative delay, | | GNUNET_SCHEDULER_add_read_file (struct GNUNET_TIME_Relative delay, | |
| const struct GNUNET_DISK_FileHandle *rfd, | | const struct GNUNET_DISK_FileHandle *rfd, | |
| GNUNET_SCHEDULER_Task task, void *task_cls)
; | | GNUNET_SCHEDULER_Task task, void *task_cls)
; | |
| | | | |
| /** | | /** | |
| * Schedule a new task to be run with a specified delay or when the | | * Schedule a new task to be run with a specified delay or when the | |
| * specified file descriptor is ready for writing. The delay can be | | * specified file descriptor is ready for writing. The delay can be | |
| * used as a timeout on the socket being ready. The task will be | | * used as a timeout on the socket being ready. The task will be | |
| * scheduled for execution once either the delay has expired or the | | * scheduled for execution once either the delay has expired or the | |
| * socket operation is ready. It will be run with the DEFAULT priority. | | * socket operation is ready. It will be run with the DEFAULT priority. | |
| * | | * | |
| * * @param delay when should this operation time out? Use | | * * @param delay when should this operation time out? Use | |
|
| * GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown" | | * #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown" | |
| * @param wfd write file-descriptor | | * @param wfd write file-descriptor | |
| * @param task main function of the task | | * @param task main function of the task | |
|
| * @param task_cls closure of task | | * @param task_cls closure of @a task | |
| * @return unique task identifier for the job | | * @return unique task identifier for the job | |
|
| * only valid until "task" is started! | | * only valid until @a task is started! | |
| */ | | */ | |
| GNUNET_SCHEDULER_TaskIdentifier | | GNUNET_SCHEDULER_TaskIdentifier | |
| GNUNET_SCHEDULER_add_write_file (struct GNUNET_TIME_Relative delay, | | GNUNET_SCHEDULER_add_write_file (struct GNUNET_TIME_Relative delay, | |
| const struct GNUNET_DISK_FileHandle *wfd, | | const struct GNUNET_DISK_FileHandle *wfd, | |
| GNUNET_SCHEDULER_Task task, void *task_cls
); | | GNUNET_SCHEDULER_Task task, void *task_cls
); | |
| | | | |
| /** | | /** | |
|
| | | * Schedule a new task to be run with a specified delay or when the | |
| | | * specified file descriptor is ready. The delay can be | |
| | | * used as a timeout on the socket being ready. The task will be | |
| | | * scheduled for execution once either the delay has expired or the | |
| | | * socket operation is ready. | |
| | | * | |
| | | * @param delay when should this operation time out? Use | |
| | | * #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown" | |
| | | * @param priority priority of the task | |
| | | * @param fd file-descriptor | |
| | | * @param on_read whether to poll the file-descriptor for readability | |
| | | * @param on_write whether to poll the file-descriptor for writability | |
| | | * @param task main function of the task | |
| | | * @param task_cls closure of @a task | |
| | | * @return unique task identifier for the job | |
| | | * only valid until @a task is started! | |
| | | */ | |
| | | GNUNET_SCHEDULER_TaskIdentifier | |
| | | GNUNET_SCHEDULER_add_file_with_priority (struct GNUNET_TIME_Relative delay, | |
| | | enum GNUNET_SCHEDULER_Priority pri | |
| | | ority, | |
| | | const struct GNUNET_DISK_FileHandl | |
| | | e *fd, | |
| | | int on_read, int on_write, | |
| | | GNUNET_SCHEDULER_Task task, void * | |
| | | task_cls); | |
| | | | |
| | | /** | |
| * Schedule a new task to be run with a specified delay or when any of | | * Schedule a new task to be run with a specified delay or when any of | |
| * the specified file descriptor sets is ready. The delay can be used | | * the specified file descriptor sets is ready. The delay can be used | |
| * as a timeout on the socket(s) being ready. The task will be | | * as a timeout on the socket(s) being ready. The task will be | |
| * scheduled for execution once either the delay has expired or any of | | * scheduled for execution once either the delay has expired or any of | |
| * the socket operations is ready. This is the most general | | * the socket operations is ready. This is the most general | |
| * function of the "add" family. Note that the "prerequisite_task" | | * function of the "add" family. Note that the "prerequisite_task" | |
| * must be satisfied in addition to any of the other conditions. In | | * must be satisfied in addition to any of the other conditions. In | |
| * other words, the task will be started when | | * other words, the task will be started when | |
| * <code> | | * <code> | |
| * (prerequisite-run) | | * (prerequisite-run) | |
| * && (delay-ready | | * && (delay-ready | |
| * || any-rs-ready | | * || any-rs-ready | |
| * || any-ws-ready | | * || any-ws-ready | |
| * || shutdown-active) | | * || shutdown-active) | |
| * </code> | | * </code> | |
| * | | * | |
| * @param prio how important is this task? | | * @param prio how important is this task? | |
|
| * @param delay how long should we wait? Use GNUNET_TIME_UNIT_FOREVER_REL f
or "forever", | | * @param delay how long should we wait? Use #GNUNET_TIME_UNIT_FOREVER_REL
for "forever", | |
| * which means that the task will only be run after we receive SIGTE
RM | | * which means that the task will only be run after we receive SIGTE
RM | |
| * @param rs set of file descriptors we want to read (can be NULL) | | * @param rs set of file descriptors we want to read (can be NULL) | |
| * @param ws set of file descriptors we want to write (can be NULL) | | * @param ws set of file descriptors we want to write (can be NULL) | |
| * @param task main function of the task | | * @param task main function of the task | |
|
| * @param task_cls closure of task | | * @param task_cls closure of @a task | |
| * @return unique task identifier for the job | | * @return unique task identifier for the job | |
| * only valid until "task" is started! | | * only valid until "task" is started! | |
| */ | | */ | |
| GNUNET_SCHEDULER_TaskIdentifier | | GNUNET_SCHEDULER_TaskIdentifier | |
| GNUNET_SCHEDULER_add_select (enum GNUNET_SCHEDULER_Priority prio, | | GNUNET_SCHEDULER_add_select (enum GNUNET_SCHEDULER_Priority prio, | |
| struct GNUNET_TIME_Relative delay, | | struct GNUNET_TIME_Relative delay, | |
| const struct GNUNET_NETWORK_FDSet *rs, | | const struct GNUNET_NETWORK_FDSet *rs, | |
| const struct GNUNET_NETWORK_FDSet *ws, | | const struct GNUNET_NETWORK_FDSet *ws, | |
| GNUNET_SCHEDULER_Task task, void *task_cls); | | GNUNET_SCHEDULER_Task task, void *task_cls); | |
| | | | |
| /** | | /** | |
| * Sets the select function to use in the scheduler (scheduler_select). | | * Sets the select function to use in the scheduler (scheduler_select). | |
| * | | * | |
| * @param new_select new select function to use (NULL to reset to default) | | * @param new_select new select function to use (NULL to reset to default) | |
| * @param new_select_cls closure for 'new_select' | | * @param new_select_cls closure for 'new_select' | |
| */ | | */ | |
| void | | void | |
| GNUNET_SCHEDULER_set_select (GNUNET_SCHEDULER_select new_select, | | GNUNET_SCHEDULER_set_select (GNUNET_SCHEDULER_select new_select, | |
| void *new_select_cls); | | void *new_select_cls); | |
| | | | |
|
| | | /** @} */ /* end of group scheduler */ | |
| | | | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| { | | { | |
| #endif | | #endif | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| } | | } | |
| #endif | | #endif | |
| | | | |
| #endif | | #endif | |
| | | | |
End of changes. 47 change blocks. |
| 47 lines changed or deleted | | 112 lines changed or added | |
|
| gnunet_server_lib.h | | gnunet_server_lib.h | |
| /* | | /* | |
| This file is part of GNUnet. | | This file is part of GNUnet. | |
|
| (C) 2009, 2010 Christian Grothoff (and other contributing authors) | | (C) 2009-2013 Christian Grothoff (and other contributing authors) | |
| | | | |
| GNUnet is free software; you can redistribute it and/or modify | | GNUnet is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published | | 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. | | option) any later version. | |
| | | | |
| GNUnet is distributed in the hope that it will be useful, but | | GNUnet is distributed in the hope that it will be useful, but | |
| WITHOUT ANY WARRANTY; without even the implied warranty of | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| General Public License for more details. | | General Public License for more details. | |
| | | | |
| You should have received a copy of the GNU General Public License | | You should have received a copy of the GNU General Public License | |
| along with GNUnet; see the file COPYING. If not, write to the | | along with GNUnet; see the file COPYING. If not, write to the | |
| Free Software Foundation, Inc., 59 Temple Place - Suite 330, | | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| Boston, MA 02111-1307, USA. | | Boston, MA 02111-1307, USA. | |
| */ | | */ | |
| | | | |
| /** | | /** | |
| * @file include/gnunet_server_lib.h | | * @file include/gnunet_server_lib.h | |
| * @brief library for building GNUnet network servers | | * @brief library for building GNUnet network servers | |
|
| * | | | |
| * @author Christian Grothoff | | * @author Christian Grothoff | |
|
| | | * @defgroup server functions for a server that communicates with clients | |
| | | * @{ | |
| */ | | */ | |
| | | | |
| #ifndef GNUNET_SERVER_LIB_H | | #ifndef GNUNET_SERVER_LIB_H | |
| #define GNUNET_SERVER_LIB_H | | #define GNUNET_SERVER_LIB_H | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| extern "C" | | extern "C" | |
| { | | { | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| } | | } | |
| #endif | | #endif | |
| #endif | | #endif | |
| | | | |
| #include "gnunet_common.h" | | #include "gnunet_common.h" | |
| #include "gnunet_connection_lib.h" | | #include "gnunet_connection_lib.h" | |
| | | | |
| /** | | /** | |
|
| * Largest supported message. | | * Largest supported message (to be precise, one byte more | |
| | | * than the largest possible message, so tests involving | |
| | | * this value should check for messages being smaller than | |
| | | * this value). | |
| */ | | */ | |
| #define GNUNET_SERVER_MAX_MESSAGE_SIZE 65536 | | #define GNUNET_SERVER_MAX_MESSAGE_SIZE 65536 | |
| | | | |
| /** | | /** | |
| * Smallest supported message. | | * Smallest supported message. | |
| */ | | */ | |
| #define GNUNET_SERVER_MIN_BUFFER_SIZE sizeof (struct GNUNET_MessageHeader) | | #define GNUNET_SERVER_MIN_BUFFER_SIZE sizeof (struct GNUNET_MessageHeader) | |
| | | | |
| /** | | /** | |
| * @brief handle for a server | | * @brief handle for a server | |
| | | | |
| skipping to change at line 76 | | skipping to change at line 80 | |
| | | | |
| /** | | /** | |
| * Functions with this signature are called whenever a message is | | * Functions with this signature are called whenever a message is | |
| * received. | | * received. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param client identification of the client | | * @param client identification of the client | |
| * @param message the actual message | | * @param message the actual message | |
| */ | | */ | |
| typedef void (*GNUNET_SERVER_MessageCallback) (void *cls, | | typedef void (*GNUNET_SERVER_MessageCallback) (void *cls, | |
|
| struct GNUNET_SERVER_Client | | struct GNUNET_SERVER_Client | |
| * | | *client, | |
| client, | | | |
| const struct GNUNET_MessageH
eader | | const struct GNUNET_MessageH
eader | |
|
| * message); | | *message); | |
| | | | |
| /** | | /** | |
| * Message handler. Each struct specifies how to handle on particular | | * Message handler. Each struct specifies how to handle on particular | |
| * type of message received. | | * type of message received. | |
| */ | | */ | |
| struct GNUNET_SERVER_MessageHandler | | struct GNUNET_SERVER_MessageHandler | |
| { | | { | |
| /** | | /** | |
| * Function to call for messages of "type". | | * Function to call for messages of "type". | |
| */ | | */ | |
| GNUNET_SERVER_MessageCallback callback; | | GNUNET_SERVER_MessageCallback callback; | |
| | | | |
| /** | | /** | |
|
| * Closure argument for "callback". | | * Closure argument for @e callback. | |
| */ | | */ | |
| void *callback_cls; | | void *callback_cls; | |
| | | | |
| /** | | /** | |
| * Type of the message this handler covers. | | * Type of the message this handler covers. | |
| */ | | */ | |
| uint16_t type; | | uint16_t type; | |
| | | | |
| /** | | /** | |
| * Expected size of messages of this type. Use 0 for | | * Expected size of messages of this type. Use 0 for | |
| | | | |
| skipping to change at line 116 | | skipping to change at line 119 | |
| * if they do not have the right size. | | * if they do not have the right size. | |
| */ | | */ | |
| uint16_t expected_size; | | uint16_t expected_size; | |
| | | | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Create a new server. | | * Create a new server. | |
| * | | * | |
| * @param access function for access control | | * @param access function for access control | |
|
| * @param access_cls closure for access | | * @param access_cls closure for @a access | |
| * @param lsocks NULL-terminated array of listen sockets | | * @param lsocks NULL-terminated array of listen sockets | |
| * @param idle_timeout after how long should we timeout idle connections? | | * @param idle_timeout after how long should we timeout idle connections? | |
|
| * @param require_found if YES, connections sending messages of unknown typ
e | | * @param require_found if #GNUNET_YES, connections sending messages of unk
nown type | |
| * will be closed | | * will be closed | |
| * @return handle for the new server, NULL on error | | * @return handle for the new server, NULL on error | |
| * (typically, "port" already in use) | | * (typically, "port" already in use) | |
| */ | | */ | |
| struct GNUNET_SERVER_Handle * | | struct GNUNET_SERVER_Handle * | |
| GNUNET_SERVER_create_with_sockets (GNUNET_CONNECTION_AccessCheck access, | | GNUNET_SERVER_create_with_sockets (GNUNET_CONNECTION_AccessCheck access, | |
| void *access_cls, | | void *access_cls, | |
| struct GNUNET_NETWORK_Handle **lsocks, | | struct GNUNET_NETWORK_Handle **lsocks, | |
| struct GNUNET_TIME_Relative idle_timeout
, | | struct GNUNET_TIME_Relative idle_timeout
, | |
| int require_found); | | int require_found); | |
| | | | |
| /** | | /** | |
| * Create a new server. | | * Create a new server. | |
| * | | * | |
| * @param access function for access control | | * @param access function for access control | |
|
| * @param access_cls closure for access | | * @param access_cls closure for @a access | |
| * @param serverAddr address toes listen on (including port), NULL terminat | | * @param server_addr address toes listen on (including port), NULL termina | |
| ed array | | ted array | |
| * @param socklen lengths of respective serverAddr | | * @param socklen lengths of respective @a server_addr | |
| * @param idle_timeout after how long should we timeout idle connections? | | * @param idle_timeout after how long should we timeout idle connections? | |
|
| * @param require_found if YES, connections sending messages of unknown typ
e | | * @param require_found if #GNUNET_YES, connections sending messages of unk
nown type | |
| * will be closed | | * will be closed | |
| * @return handle for the new server, NULL on error | | * @return handle for the new server, NULL on error | |
| * (typically, "port" already in use) | | * (typically, "port" already in use) | |
| */ | | */ | |
| struct GNUNET_SERVER_Handle * | | struct GNUNET_SERVER_Handle * | |
| GNUNET_SERVER_create (GNUNET_CONNECTION_AccessCheck access, void *access_cl
s, | | GNUNET_SERVER_create (GNUNET_CONNECTION_AccessCheck access, void *access_cl
s, | |
|
| struct sockaddr *const *serverAddr, | | struct sockaddr *const *server_addr, | |
| const socklen_t * socklen, | | const socklen_t * socklen, | |
| struct GNUNET_TIME_Relative idle_timeout, | | struct GNUNET_TIME_Relative idle_timeout, | |
| int require_found); | | int require_found); | |
| | | | |
| /** | | /** | |
| * Suspend accepting connections from the listen socket temporarily. | | * Suspend accepting connections from the listen socket temporarily. | |
|
| | | * Resume activity using #GNUNET_SERVER_resume. | |
| * | | * | |
| * @param server server to stop accepting connections. | | * @param server server to stop accepting connections. | |
| */ | | */ | |
| void | | void | |
| GNUNET_SERVER_suspend (struct GNUNET_SERVER_Handle *server); | | GNUNET_SERVER_suspend (struct GNUNET_SERVER_Handle *server); | |
| | | | |
| /** | | /** | |
| * Resume accepting connections from the listen socket. | | * Resume accepting connections from the listen socket. | |
| * | | * | |
|
| * @param server server to stop accepting connections. | | * @param server server to resume accepting connections. | |
| */ | | */ | |
| void | | void | |
| GNUNET_SERVER_resume (struct GNUNET_SERVER_Handle *server); | | GNUNET_SERVER_resume (struct GNUNET_SERVER_Handle *server); | |
| | | | |
| /** | | /** | |
|
| * Stop the listen socket and get ready to shutdown the server | | * Stop the listen socket and get ready to shutdown the server once | |
| * once only 'monitor' clients are left. | | * only clients marked using #GNUNET_SERVER_client_mark_monitor are | |
| | | * left. | |
| * | | * | |
| * @param server server to stop listening on | | * @param server server to stop listening on | |
| */ | | */ | |
| void | | void | |
| GNUNET_SERVER_stop_listening (struct GNUNET_SERVER_Handle *server); | | GNUNET_SERVER_stop_listening (struct GNUNET_SERVER_Handle *server); | |
| | | | |
| /** | | /** | |
| * Free resources held by this server. | | * Free resources held by this server. | |
| * | | * | |
| * @param server server to destroy | | * @param server server to destroy | |
| | | | |
| skipping to change at line 199 | | skipping to change at line 204 | |
| * incoming messages; the last entry must | | * incoming messages; the last entry must | |
| * have "NULL" for the "callback"; multiple | | * have "NULL" for the "callback"; multiple | |
| * entries for the same type are allowed, | | * entries for the same type are allowed, | |
| * they will be called in order of occurence. | | * they will be called in order of occurence. | |
| * These handlers can be removed later; | | * These handlers can be removed later; | |
| * the handlers array must exist until removed | | * the handlers array must exist until removed | |
| * (or server is destroyed). | | * (or server is destroyed). | |
| */ | | */ | |
| void | | void | |
| GNUNET_SERVER_add_handlers (struct GNUNET_SERVER_Handle *server, | | GNUNET_SERVER_add_handlers (struct GNUNET_SERVER_Handle *server, | |
|
| const struct GNUNET_SERVER_MessageHandler | | const struct GNUNET_SERVER_MessageHandler *hand | |
| *handlers); | | lers); | |
| | | | |
| /** | | /** | |
| * Notify us when the server has enough space to transmit | | * Notify us when the server has enough space to transmit | |
| * a message of the given size to the given client. | | * a message of the given size to the given client. | |
| * | | * | |
| * @param client client to transmit message to | | * @param client client to transmit message to | |
| * @param size requested amount of buffer space | | * @param size requested amount of buffer space | |
| * @param timeout after how long should we give up (and call | | * @param timeout after how long should we give up (and call | |
| * notify with buf NULL and size 0)? | | * notify with buf NULL and size 0)? | |
| * @param callback function to call when space is available | | * @param callback function to call when space is available | |
|
| * @param callback_cls closure for callback | | * @param callback_cls closure for @a callback | |
| * @return non-NULL if the notify callback was queued; can be used | | * @return non-NULL if the notify callback was queued; can be used | |
| * to cancel the request using | | * to cancel the request using | |
|
| * GNUNET_SERVER_notify_transmit_ready_cancel. | | * #GNUNET_SERVER_notify_transmit_ready_cancel. | |
| * NULL if we are already going to notify someone else (busy) | | * NULL if we are already going to notify someone else (busy) | |
| */ | | */ | |
| struct GNUNET_SERVER_TransmitHandle * | | struct GNUNET_SERVER_TransmitHandle * | |
| GNUNET_SERVER_notify_transmit_ready (struct GNUNET_SERVER_Client *client, | | GNUNET_SERVER_notify_transmit_ready (struct GNUNET_SERVER_Client *client, | |
| size_t size, | | size_t size, | |
| struct GNUNET_TIME_Relative timeout, | | struct GNUNET_TIME_Relative timeout, | |
|
| GNUNET_CONNECTION_TransmitReadyNotify | | GNUNET_CONNECTION_TransmitReadyNotify | |
| callback, void *callback_cls); | | callback, | |
| | | void *callback_cls); | |
| | | | |
| /** | | /** | |
| * Abort transmission request. | | * Abort transmission request. | |
| * | | * | |
| * @param th request to abort | | * @param th request to abort | |
| */ | | */ | |
| void | | void | |
| GNUNET_SERVER_notify_transmit_ready_cancel (struct GNUNET_SERVER_TransmitHa
ndle *th); | | GNUNET_SERVER_notify_transmit_ready_cancel (struct GNUNET_SERVER_TransmitHa
ndle *th); | |
| | | | |
| /** | | /** | |
| * Set the 'monitor' flag on this client. Clients which have been | | * Set the 'monitor' flag on this client. Clients which have been | |
| * marked as 'monitors' won't prevent the server from shutting down | | * marked as 'monitors' won't prevent the server from shutting down | |
|
| * once 'GNUNET_SERVER_stop_listening' has been invoked. The idea is | | * once #GNUNET_SERVER_stop_listening has been invoked. The idea is | |
| * that for "normal" clients we likely want to allow them to process | | * that for "normal" clients we likely want to allow them to process | |
| * their requests; however, monitor-clients are likely to 'never' | | * their requests; however, monitor-clients are likely to 'never' | |
| * disconnect during shutdown and thus will not be considered when | | * disconnect during shutdown and thus will not be considered when | |
| * determining if the server should continue to exist after | | * determining if the server should continue to exist after | |
|
| * 'GNUNET_SERVER_destroy' has been called. | | * #GNUNET_SERVER_destroy has been called. | |
| * | | * | |
| * @param client the client to set the 'monitor' flag on | | * @param client the client to set the 'monitor' flag on | |
| */ | | */ | |
| void | | void | |
| GNUNET_SERVER_client_mark_monitor (struct GNUNET_SERVER_Client *client); | | GNUNET_SERVER_client_mark_monitor (struct GNUNET_SERVER_Client *client); | |
| | | | |
| /** | | /** | |
|
| * Set the persistent flag on this client, used to setup client connection | | * Set the persistent flag on this client, used to setup client | |
| * to only be killed when the service it's connected to is actually dead. | | * connection to only be killed when the process of the service it's | |
| | | * connected to is actually dead. This API is used during shutdown | |
| | | * signalling within ARM, and it is not expected that typical users | |
| | | * of the API would need this function. | |
| * | | * | |
| * @param client the client to set the persistent flag on | | * @param client the client to set the persistent flag on | |
| */ | | */ | |
| void | | void | |
| GNUNET_SERVER_client_persist_ (struct GNUNET_SERVER_Client *client); | | GNUNET_SERVER_client_persist_ (struct GNUNET_SERVER_Client *client); | |
| | | | |
| /** | | /** | |
| * Resume receiving from this client, we are done processing the | | * Resume receiving from this client, we are done processing the | |
| * current request. This function must be called from within each | | * current request. This function must be called from within each | |
|
| * GNUNET_SERVER_MessageCallback (or its respective continuations). | | * #GNUNET_SERVER_MessageCallback (or its respective continuations). | |
| * | | * | |
| * @param client client we were processing a message of | | * @param client client we were processing a message of | |
|
| * @param success GNUNET_OK to keep the connection open and | | * @param success #GNUNET_OK to keep the connection open and | |
| * continue to receive | | * continue to receive | |
|
| * GNUNET_NO to close the connection (normal behavior) | | * #GNUNET_NO to close the connection (normal behavior) | |
| * GNUNET_SYSERR to close the connection (signal | | * #GNUNET_SYSERR to close the connection (signal | |
| * serious error) | | * serious error) | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_SERVER_receive_done (struct GNUNET_SERVER_Client *client, int succes | | GNUNET_SERVER_receive_done (struct GNUNET_SERVER_Client *client, | |
| s); | | int success); | |
| | | | |
| /** | | /** | |
| * Change the timeout for a particular client. Decreasing the timeout | | * Change the timeout for a particular client. Decreasing the timeout | |
| * may not go into effect immediately (only after the previous timeout | | * may not go into effect immediately (only after the previous timeout | |
| * times out or activity happens on the socket). | | * times out or activity happens on the socket). | |
| * | | * | |
| * @param client the client to update | | * @param client the client to update | |
| * @param timeout new timeout for activities on the socket | | * @param timeout new timeout for activities on the socket | |
| */ | | */ | |
| void | | void | |
| GNUNET_SERVER_client_set_timeout (struct GNUNET_SERVER_Client *client, | | GNUNET_SERVER_client_set_timeout (struct GNUNET_SERVER_Client *client, | |
| struct GNUNET_TIME_Relative timeout); | | struct GNUNET_TIME_Relative timeout); | |
| | | | |
| /** | | /** | |
|
| | | * Return user context associated with the given client. | |
| | | * Note: you should probably use the macro (call without the underscore). | |
| | | * | |
| | | * @param client client to query | |
| | | * @param size number of bytes in user context struct (for verification onl | |
| | | y) | |
| | | * @return pointer to user context | |
| | | */ | |
| | | void * | |
| | | GNUNET_SERVER_client_get_user_context_ (struct GNUNET_SERVER_Client *client | |
| | | , | |
| | | size_t size); | |
| | | | |
| | | /** | |
| | | * Set user context to be associated with the given client. | |
| | | * Note: you should probably use the macro (call without the underscore). | |
| | | * | |
| | | * @param client client to query | |
| | | * @param ptr pointer to user context | |
| | | * @param size number of bytes in user context struct (for verification onl | |
| | | y) | |
| | | */ | |
| | | void | |
| | | GNUNET_SERVER_client_set_user_context_ (struct GNUNET_SERVER_Client *client | |
| | | , | |
| | | void *ptr, | |
| | | size_t size); | |
| | | | |
| | | /** | |
| | | * Return user context associated with the given client. | |
| | | * | |
| | | * @param client client to query | |
| | | * @param type expected return type (i.e. 'struct Foo') | |
| | | * @return pointer to user context of type 'type *'. | |
| | | */ | |
| | | #define GNUNET_SERVER_client_get_user_context(client,type) \ | |
| | | (type *) GNUNET_SERVER_client_get_user_context_ (client, sizeof (type)) | |
| | | | |
| | | /** | |
| | | * Set user context to be associated with the given client. | |
| | | * | |
| | | * @param client client to query | |
| | | * @param value pointer to user context | |
| | | */ | |
| | | #define GNUNET_SERVER_client_set_user_context(client,value) \ | |
| | | GNUNET_SERVER_client_set_user_context_ (client, value, sizeof (*value)) | |
| | | | |
| | | /** | |
| * Disable the warning the server issues if a message is not acknowledged | | * Disable the warning the server issues if a message is not acknowledged | |
| * in a timely fashion. Use this call if a client is intentionally delayed | | * in a timely fashion. Use this call if a client is intentionally delayed | |
| * for a while. Only applies to the current message. | | * for a while. Only applies to the current message. | |
| * | | * | |
| * @param client client for which to disable the warning | | * @param client client for which to disable the warning | |
| */ | | */ | |
| void | | void | |
| GNUNET_SERVER_disable_receive_done_warning (struct GNUNET_SERVER_Client | | GNUNET_SERVER_disable_receive_done_warning (struct GNUNET_SERVER_Client | |
| *client); | | *client); | |
| | | | |
| /** | | /** | |
| * Inject a message into the server, pretend it came | | * Inject a message into the server, pretend it came | |
| * from the specified client. Delivery of the message | | * from the specified client. Delivery of the message | |
| * will happen instantly (if a handler is installed; | | * will happen instantly (if a handler is installed; | |
| * otherwise the call does nothing). | | * otherwise the call does nothing). | |
| * | | * | |
| * @param server the server receiving the message | | * @param server the server receiving the message | |
| * @param sender the "pretended" sender of the message | | * @param sender the "pretended" sender of the message | |
| * can be NULL! | | * can be NULL! | |
| * @param message message to transmit | | * @param message message to transmit | |
|
| * @return GNUNET_OK if the message was OK and the | | * @return #GNUNET_OK if the message was OK and the | |
| * connection can stay open | | * connection can stay open | |
|
| * GNUNET_SYSERR if the connection to the | | * #GNUNET_SYSERR if the connection to the | |
| * client should be shut down | | * client should be shut down | |
| */ | | */ | |
| int | | int | |
| GNUNET_SERVER_inject (struct GNUNET_SERVER_Handle *server, | | GNUNET_SERVER_inject (struct GNUNET_SERVER_Handle *server, | |
| struct GNUNET_SERVER_Client *sender, | | struct GNUNET_SERVER_Client *sender, | |
| const struct GNUNET_MessageHeader *message); | | const struct GNUNET_MessageHeader *message); | |
| | | | |
| /** | | /** | |
| * Add a TCP socket-based connection to the set of handles managed by | | * Add a TCP socket-based connection to the set of handles managed by | |
| * this server. Use this function for outgoing (P2P) connections that | | * this server. Use this function for outgoing (P2P) connections that | |
| * we initiated (and where this server should process incoming | | * we initiated (and where this server should process incoming | |
| * messages). | | * messages). | |
| * | | * | |
| * @param server the server to use | | * @param server the server to use | |
| * @param connection the connection to manage (client must | | * @param connection the connection to manage (client must | |
| * stop using this connection from now on) | | * stop using this connection from now on) | |
| * @return the client handle (client should call | | * @return the client handle (client should call | |
|
| * "client_drop" on the return value eventually) | | * #GNUNET_SERVER_client_drop on the return value eventually) | |
| */ | | */ | |
| struct GNUNET_SERVER_Client * | | struct GNUNET_SERVER_Client * | |
| GNUNET_SERVER_connect_socket (struct GNUNET_SERVER_Handle *server, | | GNUNET_SERVER_connect_socket (struct GNUNET_SERVER_Handle *server, | |
| struct GNUNET_CONNECTION_Handle *connection); | | struct GNUNET_CONNECTION_Handle *connection); | |
| | | | |
| /** | | /** | |
| * Notify the server that the given client handle should | | * Notify the server that the given client handle should | |
| * be kept (keeps the connection up if possible, increments | | * be kept (keeps the connection up if possible, increments | |
| * the internal reference counter). | | * the internal reference counter). | |
| * | | * | |
| | | | |
| skipping to change at line 356 | | skipping to change at line 408 | |
| * @param client the client to drop | | * @param client the client to drop | |
| */ | | */ | |
| void | | void | |
| GNUNET_SERVER_client_drop (struct GNUNET_SERVER_Client *client); | | GNUNET_SERVER_client_drop (struct GNUNET_SERVER_Client *client); | |
| | | | |
| /** | | /** | |
| * Obtain the network address of the other party. | | * Obtain the network address of the other party. | |
| * | | * | |
| * @param client the client to get the address for | | * @param client the client to get the address for | |
| * @param addr where to store the address | | * @param addr where to store the address | |
|
| * @param addrlen where to store the length of the address | | * @param addrlen where to store the length of @a addr | |
| * @return GNUNET_OK on success | | * @return #GNUNET_OK on success | |
| */ | | */ | |
| int | | int | |
| GNUNET_SERVER_client_get_address (struct GNUNET_SERVER_Client *client, | | GNUNET_SERVER_client_get_address (struct GNUNET_SERVER_Client *client, | |
|
| void **addr, size_t * addrlen); | | void **addr, size_t *addrlen); | |
| | | | |
| /** | | /** | |
| * Functions with this signature are called whenever a client | | * Functions with this signature are called whenever a client | |
| * is disconnected on the network level. | | * is disconnected on the network level. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param client identification of the client; NULL | | * @param client identification of the client; NULL | |
| * for the last call when the server is destroyed | | * for the last call when the server is destroyed | |
| */ | | */ | |
| typedef void (*GNUNET_SERVER_DisconnectCallback) (void *cls, | | typedef void (*GNUNET_SERVER_DisconnectCallback) (void *cls, | |
|
| struct GNUNET_SERVER_Clie | | struct GNUNET_SERVER_Clie | |
| nt * | | nt *client); | |
| client); | | | |
| | | /** | |
| | | * Functions with this signature are called whenever a client | |
| | | * is connected on the network level. | |
| | | * | |
| | | * @param cls closure | |
| | | * @param client identification of the client | |
| | | */ | |
| | | typedef void (*GNUNET_SERVER_ConnectCallback) (void *cls, | |
| | | struct GNUNET_SERVER_Client * | |
| | | client); | |
| | | | |
| /** | | /** | |
| * Ask the server to notify us whenever a client disconnects. | | * Ask the server to notify us whenever a client disconnects. | |
| * This function is called whenever the actual network connection | | * This function is called whenever the actual network connection | |
| * is closed; the reference count may be zero or larger than zero | | * is closed; the reference count may be zero or larger than zero | |
| * at this point. If the server is destroyed before this | | * at this point. If the server is destroyed before this | |
| * notification is explicitly cancelled, the 'callback' will | | * notification is explicitly cancelled, the 'callback' will | |
| * once be called with a 'client' argument of NULL to indicate | | * once be called with a 'client' argument of NULL to indicate | |
| * that the server itself is now gone (and that the callback | | * that the server itself is now gone (and that the callback | |
| * won't be called anymore and also can no longer be cancelled). | | * won't be called anymore and also can no longer be cancelled). | |
| * | | * | |
| * @param server the server manageing the clients | | * @param server the server manageing the clients | |
| * @param callback function to call on disconnect | | * @param callback function to call on disconnect | |
|
| * @param callback_cls closure for callback | | * @param callback_cls closure for @a callback | |
| */ | | */ | |
| void | | void | |
| GNUNET_SERVER_disconnect_notify (struct GNUNET_SERVER_Handle *server, | | GNUNET_SERVER_disconnect_notify (struct GNUNET_SERVER_Handle *server, | |
| GNUNET_SERVER_DisconnectCallback callback, | | GNUNET_SERVER_DisconnectCallback callback, | |
| void *callback_cls); | | void *callback_cls); | |
| | | | |
| /** | | /** | |
|
| | | * Ask the server to notify us whenever a client connects. | |
| | | * This function is called whenever the actual network connection | |
| | | * is opened. If the server is destroyed before this | |
| | | * notification is explicitly cancelled, the @a callback will | |
| | | * once be called with a 'client' argument of NULL to indicate | |
| | | * that the server itself is now gone (and that the callback | |
| | | * won't be called anymore and also can no longer be cancelled). | |
| | | * | |
| | | * @param server the server manageing the clients | |
| | | * @param callback function to call on sconnect | |
| | | * @param callback_cls closure for @a callback | |
| | | */ | |
| | | void | |
| | | GNUNET_SERVER_connect_notify (struct GNUNET_SERVER_Handle *server, | |
| | | GNUNET_SERVER_ConnectCallback callback, | |
| | | void *callback_cls); | |
| | | | |
| | | /** | |
| * Ask the server to stop notifying us whenever a client disconnects. | | * Ask the server to stop notifying us whenever a client disconnects. | |
|
| | | * Arguments must match exactly those given to | |
| | | * #GNUNET_SERVER_disconnect_notify. It is not necessary to call this | |
| | | * function during shutdown of the server; in fact, most applications | |
| | | * will never use this function. | |
| * | | * | |
| * @param server the server manageing the clients | | * @param server the server manageing the clients | |
| * @param callback function to call on disconnect | | * @param callback function to call on disconnect | |
|
| * @param callback_cls closure for callback | | * @param callback_cls closure for @a callback | |
| */ | | */ | |
| void | | void | |
| GNUNET_SERVER_disconnect_notify_cancel (struct GNUNET_SERVER_Handle *server
, | | GNUNET_SERVER_disconnect_notify_cancel (struct GNUNET_SERVER_Handle *server
, | |
|
| GNUNET_SERVER_DisconnectCallback | | GNUNET_SERVER_DisconnectCallback ca | |
| callback, void *callback_cls); | | llback, | |
| | | void *callback_cls); | |
| | | | |
| | | /** | |
| | | * Ask the server to stop notifying us whenever a client connects. | |
| | | * Arguments must match exactly those given to | |
| | | * #GNUNET_SERVER_connect_notify. It is not necessary to call this | |
| | | * function during shutdown of the server; in fact, most applications | |
| | | * will never use this function. | |
| | | * | |
| | | * @param server the server manageing the clients | |
| | | * @param callback function to call on connect | |
| | | * @param callback_cls closure for @a callback | |
| | | */ | |
| | | void | |
| | | GNUNET_SERVER_connect_notify_cancel (struct GNUNET_SERVER_Handle *server, | |
| | | GNUNET_SERVER_ConnectCallback callback, | |
| | | void *callback_cls); | |
| | | | |
| /** | | /** | |
|
| * Ask the server to disconnect from the given client. | | * Ask the server to disconnect from the given client. This is the | |
| * This is the same as returning GNUNET_SYSERR from a message | | * same as passing #GNUNET_SYSERR to #GNUNET_SERVER_receive_done, | |
| * handler, except that it allows dropping of a client even | | * except that it allows dropping of a client even when not handling a | |
| * when not handling a message from that client. | | * message from that client. | |
| * | | * | |
| * @param client the client to disconnect from | | * @param client the client to disconnect from | |
| */ | | */ | |
| void | | void | |
| GNUNET_SERVER_client_disconnect (struct GNUNET_SERVER_Client *client); | | GNUNET_SERVER_client_disconnect (struct GNUNET_SERVER_Client *client); | |
| | | | |
| /** | | /** | |
| * Disable the "CORK" feature for communication with the given client, | | * Disable the "CORK" feature for communication with the given client, | |
| * forcing the OS to immediately flush the buffer on transmission | | * forcing the OS to immediately flush the buffer on transmission | |
| * instead of potentially buffering multiple messages. | | * instead of potentially buffering multiple messages. | |
| * | | * | |
| * @param client handle to the client | | * @param client handle to the client | |
|
| * @return GNUNET_OK on success | | * @return #GNUNET_OK on success | |
| */ | | */ | |
| int | | int | |
| GNUNET_SERVER_client_disable_corking (struct GNUNET_SERVER_Client *client); | | GNUNET_SERVER_client_disable_corking (struct GNUNET_SERVER_Client *client); | |
| | | | |
| /** | | /** | |
| * The tansmit context is the key datastructure for a conveniance API | | * The tansmit context is the key datastructure for a conveniance API | |
| * used for transmission of complex results to the client followed | | * used for transmission of complex results to the client followed | |
| * ONLY by signaling receive_done with success or error | | * ONLY by signaling receive_done with success or error | |
| */ | | */ | |
| struct GNUNET_SERVER_TransmitContext; | | struct GNUNET_SERVER_TransmitContext; | |
| | | | |
| /** | | /** | |
|
| * Create a new transmission context for the | | * Create a new transmission context for the given client. | |
| * given client. | | | |
| * | | * | |
| * @param client client to create the context for. | | * @param client client to create the context for. | |
| * @return NULL on error | | * @return NULL on error | |
| */ | | */ | |
| struct GNUNET_SERVER_TransmitContext * | | struct GNUNET_SERVER_TransmitContext * | |
| GNUNET_SERVER_transmit_context_create (struct GNUNET_SERVER_Client *client)
; | | GNUNET_SERVER_transmit_context_create (struct GNUNET_SERVER_Client *client)
; | |
| | | | |
| /** | | /** | |
| * Append a message to the transmission context. | | * Append a message to the transmission context. | |
| * All messages in the context will be sent by | | * All messages in the context will be sent by | |
|
| * the transmit_context_run method. | | * the #GNUNET_SERVER_transmit_context_run method. | |
| * | | * | |
| * @param tc context to use | | * @param tc context to use | |
| * @param data what to append to the result message | | * @param data what to append to the result message | |
|
| * @param length length of data | | * @param length length of @a data | |
| * @param type type of the message | | * @param type type of the message | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_SERVER_transmit_context_append_data (struct GNUNET_SERVER_TransmitCo | | GNUNET_SERVER_transmit_context_append_data (struct GNUNET_SERVER_TransmitCo | |
| ntext | | ntext *tc, | |
| *tc, const void *data, | | const void *data, | |
| size_t length, uint16_t type); | | size_t length, uint16_t type); | |
| | | | |
| /** | | /** | |
| * Append a message to the transmission context. | | * Append a message to the transmission context. | |
| * All messages in the context will be sent by | | * All messages in the context will be sent by | |
| * the transmit_context_run method. | | * the transmit_context_run method. | |
| * | | * | |
| * @param tc context to use | | * @param tc context to use | |
| * @param msg message to append | | * @param msg message to append | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_SERVER_transmit_context_append_message (struct | | GNUNET_SERVER_transmit_context_append_message (struct GNUNET_SERVER_Transmi | |
| GNUNET_SERVER_TransmitContex | | tContext *tc, | |
| t | | const struct GNUNET_MessageH | |
| *tc, | | eader *msg); | |
| const struct GNUNET_MessageH | | | |
| eader | | | |
| *msg); | | | |
| | | | |
| /** | | /** | |
| * Execute a transmission context. If there is an error in the | | * Execute a transmission context. If there is an error in the | |
| * transmission, the receive_done method will be called with an error | | * transmission, the receive_done method will be called with an error | |
|
| * code (GNUNET_SYSERR), otherwise with GNUNET_OK. | | * code (#GNUNET_SYSERR), otherwise with #GNUNET_OK. | |
| * | | * | |
| * @param tc transmission context to use | | * @param tc transmission context to use | |
| * @param timeout when to time out and abort the transmission | | * @param timeout when to time out and abort the transmission | |
| */ | | */ | |
| void | | void | |
| GNUNET_SERVER_transmit_context_run (struct GNUNET_SERVER_TransmitContext *t
c, | | GNUNET_SERVER_transmit_context_run (struct GNUNET_SERVER_TransmitContext *t
c, | |
| struct GNUNET_TIME_Relative timeout); | | struct GNUNET_TIME_Relative timeout); | |
| | | | |
| /** | | /** | |
| * Destroy a transmission context. This function must not be called | | * Destroy a transmission context. This function must not be called | |
|
| * after 'GNUNET_SERVER_transmit_context_run'. | | * after #GNUNET_SERVER_transmit_context_run. | |
| * | | * | |
| * @param tc transmission context to destroy | | * @param tc transmission context to destroy | |
|
| * @param success code to give to 'GNUNET_SERVER_receive_done' for | | * @param success code to give to #GNUNET_SERVER_receive_done for | |
| * the client: GNUNET_OK to keep the connection open and | | * the client: #GNUNET_OK to keep the connection open and | |
| * continue to receive | | * continue to receive | |
|
| * GNUNET_NO to close the connection (normal behavior) | | * #GNUNET_NO to close the connection (normal behavior) | |
| * GNUNET_SYSERR to close the connection (signal | | * #GNUNET_SYSERR to close the connection (signal | |
| * serious error) | | * serious error) | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_SERVER_transmit_context_destroy (struct GNUNET_SERVER_TransmitContex | | GNUNET_SERVER_transmit_context_destroy (struct GNUNET_SERVER_TransmitContex | |
| t | | t *tc, | |
| *tc, int success); | | int success); | |
| | | | |
| /** | | /** | |
| * The notification context is the key datastructure for a conveniance | | * The notification context is the key datastructure for a conveniance | |
| * API used for transmission of notifications to the client until the | | * API used for transmission of notifications to the client until the | |
| * client disconnects or is disconnected (or the notification context | | * client disconnects or is disconnected (or the notification context | |
| * is destroyed, in which case we disconnect these clients). | | * is destroyed, in which case we disconnect these clients). | |
| * Essentially, all (notification) messages are queued up until the | | * Essentially, all (notification) messages are queued up until the | |
| * client is able to read them. | | * client is able to read them. | |
| */ | | */ | |
| struct GNUNET_SERVER_NotificationContext; | | struct GNUNET_SERVER_NotificationContext; | |
| | | | |
| skipping to change at line 532 | | skipping to change at line 627 | |
| struct GNUNET_SERVER_NotificationContext * | | struct GNUNET_SERVER_NotificationContext * | |
| GNUNET_SERVER_notification_context_create (struct GNUNET_SERVER_Handle *ser
ver, | | GNUNET_SERVER_notification_context_create (struct GNUNET_SERVER_Handle *ser
ver, | |
| unsigned int queue_length); | | unsigned int queue_length); | |
| | | | |
| /** | | /** | |
| * Destroy the context, force disconnect for all clients. | | * Destroy the context, force disconnect for all clients. | |
| * | | * | |
| * @param nc context to destroy. | | * @param nc context to destroy. | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_SERVER_notification_context_destroy (struct | | GNUNET_SERVER_notification_context_destroy (struct GNUNET_SERVER_Notificati | |
| GNUNET_SERVER_NotificationConte | | onContext *nc); | |
| xt | | | |
| *nc); | | | |
| | | | |
| /** | | /** | |
| * Add a client to the notification context. | | * Add a client to the notification context. | |
| * | | * | |
| * @param nc context to modify | | * @param nc context to modify | |
| * @param client client to add | | * @param client client to add | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_SERVER_notification_context_add (struct GNUNET_SERVER_NotificationCo | | GNUNET_SERVER_notification_context_add (struct GNUNET_SERVER_NotificationCo | |
| ntext | | ntext *nc, | |
| *nc, | | | |
| struct GNUNET_SERVER_Client *client
); | | struct GNUNET_SERVER_Client *client
); | |
| | | | |
| /** | | /** | |
| * Send a message to a particular client; must have | | * Send a message to a particular client; must have | |
| * already been added to the notification context. | | * already been added to the notification context. | |
| * | | * | |
| * @param nc context to modify | | * @param nc context to modify | |
| * @param client client to transmit to | | * @param client client to transmit to | |
| * @param msg message to send | | * @param msg message to send | |
| * @param can_drop can this message be dropped due to queue length limitati
ons | | * @param can_drop can this message be dropped due to queue length limitati
ons | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_SERVER_notification_context_unicast (struct | | GNUNET_SERVER_notification_context_unicast (struct GNUNET_SERVER_Notificati | |
| GNUNET_SERVER_NotificationConte | | onContext *nc, | |
| xt | | | |
| *nc, | | | |
| struct GNUNET_SERVER_Client *cl
ient, | | struct GNUNET_SERVER_Client *cl
ient, | |
|
| const struct GNUNET_MessageHead | | const struct GNUNET_MessageHead | |
| er | | er *msg, | |
| *msg, int can_drop); | | int can_drop); | |
| | | | |
| /** | | /** | |
| * Send a message to all clients of this context. | | * Send a message to all clients of this context. | |
| * | | * | |
| * @param nc context to modify | | * @param nc context to modify | |
| * @param msg message to send | | * @param msg message to send | |
| * @param can_drop can this message be dropped due to queue length limitati
ons | | * @param can_drop can this message be dropped due to queue length limitati
ons | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_SERVER_notification_context_broadcast (struct | | GNUNET_SERVER_notification_context_broadcast (struct GNUNET_SERVER_Notifica | |
| GNUNET_SERVER_NotificationCon | | tionContext *nc, | |
| text | | const struct GNUNET_MessageHe | |
| *nc, | | ader *msg, | |
| const struct GNUNET_MessageHe | | int can_drop); | |
| ader | | | |
| *msg, int can_drop); | | | |
| | | | |
| /** | | /** | |
| * Handle to a message stream tokenizer. | | * Handle to a message stream tokenizer. | |
| */ | | */ | |
| struct GNUNET_SERVER_MessageStreamTokenizer; | | struct GNUNET_SERVER_MessageStreamTokenizer; | |
| | | | |
| /** | | /** | |
| * Functions with this signature are called whenever a | | * Functions with this signature are called whenever a | |
| * complete message is received by the tokenizer. | | * complete message is received by the tokenizer. | |
| * | | * | |
|
| * Do not call GNUNET_SERVER_mst_destroy in callback | | * Do not call #GNUNET_SERVER_mst_destroy from within | |
| | | * the scope of this callback. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param client identification of the client | | * @param client identification of the client | |
| * @param message the actual message | | * @param message the actual message | |
|
| * | | * @return #GNUNET_OK on success, #GNUNET_SYSERR to stop further processing | |
| * @return GNUNET_OK on success, GNUNET_SYSERR to stop further processing | | | |
| */ | | */ | |
| typedef int (*GNUNET_SERVER_MessageTokenizerCallback) (void *cls, void *cli
ent, | | typedef int (*GNUNET_SERVER_MessageTokenizerCallback) (void *cls, void *cli
ent, | |
|
| const struct | | const struct GNUNET_ | |
| GNUNET_MessageHeade | | MessageHeader *message); | |
| r * | | | |
| message); | | | |
| | | | |
| /** | | /** | |
| * Create a message stream tokenizer. | | * Create a message stream tokenizer. | |
| * | | * | |
| * @param cb function to call on completed messages | | * @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 | | * @return handle to tokenizer | |
| */ | | */ | |
| struct GNUNET_SERVER_MessageStreamTokenizer * | | struct GNUNET_SERVER_MessageStreamTokenizer * | |
| GNUNET_SERVER_mst_create (GNUNET_SERVER_MessageTokenizerCallback cb, | | GNUNET_SERVER_mst_create (GNUNET_SERVER_MessageTokenizerCallback cb, | |
| void *cb_cls); | | void *cb_cls); | |
| | | | |
| /** | | /** | |
| * Add incoming data to the receive buffer and call the | | * Add incoming data to the receive buffer and call the | |
| * callback for all complete messages. | | * callback for all complete messages. | |
| * | | * | |
| * @param mst tokenizer to use | | * @param mst tokenizer to use | |
| * @param client_identity ID of client for which this is a buffer, | | * @param client_identity ID of client for which this is a buffer, | |
| * can be NULL (will be passed back to 'cb') | | * can be NULL (will be passed back to 'cb') | |
| * @param buf input data to add | | * @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 | | * @param purge should any excess bytes in the buffer be discarded | |
| * (i.e. for packet-based services like UDP) | | * (i.e. for packet-based services like UDP) | |
| * @param one_shot only call callback once, keep rest of message in buffer | | * @param one_shot only call callback once, keep rest of message in buffer | |
|
| * @return GNUNET_OK if we are done processing (need more data) | | * @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_NO if one_shot was set and we have another message ready | |
| * GNUNET_SYSERR if the data stream is corrupt | | * #GNUNET_SYSERR if the data stream is corrupt | |
| */ | | */ | |
| int | | int | |
| GNUNET_SERVER_mst_receive (struct GNUNET_SERVER_MessageStreamTokenizer *mst
, | | GNUNET_SERVER_mst_receive (struct GNUNET_SERVER_MessageStreamTokenizer *mst
, | |
|
| void *client_identity, const char *buf, size_t s | | void *client_identity, | |
| ize, | | const char *buf, size_t size, | |
| int purge, int one_shot); | | int purge, int one_shot); | |
| | | | |
| /** | | /** | |
| * Destroys a tokenizer. | | * Destroys a tokenizer. | |
| * | | * | |
| * @param mst tokenizer to destroy | | * @param mst tokenizer to destroy | |
| */ | | */ | |
| void | | void | |
| GNUNET_SERVER_mst_destroy (struct GNUNET_SERVER_MessageStreamTokenizer *mst
); | | GNUNET_SERVER_mst_destroy (struct GNUNET_SERVER_MessageStreamTokenizer *mst
); | |
| | | | |
| /** | | /** | |
| * Signature of a function to create a custom tokenizer. | | * Signature of a function to create a custom tokenizer. | |
| * | | * | |
|
| * @param cls closure from 'GNUNET_SERVER_set_callbacks' | | * @param cls closure from #GNUNET_SERVER_set_callbacks | |
| * @param client handle to client the tokenzier will be used for | | * @param client handle to client the tokenzier will be used for | |
| * @return handle to custom tokenizer ('mst') | | * @return handle to custom tokenizer ('mst') | |
| */ | | */ | |
| typedef void* (*GNUNET_SERVER_MstCreateCallback) (void *cls, | | typedef void* (*GNUNET_SERVER_MstCreateCallback) (void *cls, | |
| struct GNUNET_SERVER_Clie
nt *client); | | struct GNUNET_SERVER_Clie
nt *client); | |
| | | | |
| /** | | /** | |
| * Signature of a function to destroy a custom tokenizer. | | * Signature of a function to destroy a custom tokenizer. | |
| * | | * | |
|
| * @param cls closure from 'GNUNET_SERVER_set_callbacks' | | * @param cls closure from #GNUNET_SERVER_set_callbacks | |
| * @param mst custom tokenizer handle | | * @param mst custom tokenizer handle | |
| */ | | */ | |
| typedef void (*GNUNET_SERVER_MstDestroyCallback) (void *cls, void *mst); | | typedef void (*GNUNET_SERVER_MstDestroyCallback) (void *cls, void *mst); | |
| | | | |
| /** | | /** | |
|
| * Signature of a function to destroy a custom tokenizer. | | * Signature of a function to receive data for a custom tokenizer. | |
| * | | * | |
|
| * @param cls closure from 'GNUNET_SERVER_set_callbacks' | | * @param cls closure from #GNUNET_SERVER_set_callbacks | |
| * @param mst custom tokenizer handle | | * @param mst custom tokenizer handle | |
| * @param client_identity ID of client for which this is a buffer, | | * @param client_identity ID of client for which this is a buffer, | |
| * can be NULL (will be passed back to 'cb') | | * can be NULL (will be passed back to 'cb') | |
| * @param buf input data to add | | * @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 | | * @param purge should any excess bytes in the buffer be discarded | |
| * (i.e. for packet-based services like UDP) | | * (i.e. for packet-based services like UDP) | |
| * @param one_shot only call callback once, keep rest of message in buffer | | * @param one_shot only call callback once, keep rest of message in buffer | |
|
| * @return GNUNET_OK if we are done processing (need more data) | | * @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_NO if one_shot was set and we have another message ready | |
| * GNUNET_SYSERR if the data stream is corrupt | | * #GNUNET_SYSERR if the data stream is corrupt | |
| */ | | */ | |
| typedef int (*GNUNET_SERVER_MstReceiveCallback) (void *cls, void *mst, | | typedef int (*GNUNET_SERVER_MstReceiveCallback) (void *cls, void *mst, | |
| struct GNUNET_SERVER_Clien
t *client, | | struct GNUNET_SERVER_Clien
t *client, | |
| const char *buf, size_t si
ze, | | const char *buf, size_t si
ze, | |
| int purge, int one_shot); | | int purge, int one_shot); | |
| | | | |
| /** | | /** | |
| * Change functions used by the server to tokenize the message stream. | | * Change functions used by the server to tokenize the message stream. | |
| * (very rarely used). | | * (very rarely used). | |
| * | | * | |
| * @param server server to modify | | * @param server server to modify | |
| * @param create new tokenizer initialization function | | * @param create new tokenizer initialization function | |
| * @param destroy new tokenizer destruction function | | * @param destroy new tokenizer destruction function | |
| * @param receive new tokenizer receive function | | * @param receive new tokenizer receive function | |
|
| * @param cls closure for 'create', 'receive', 'destroy' | | * @param cls closure for @a create, @a receive and @a destroy | |
| */ | | */ | |
| void | | void | |
| GNUNET_SERVER_set_callbacks (struct GNUNET_SERVER_Handle *server, | | GNUNET_SERVER_set_callbacks (struct GNUNET_SERVER_Handle *server, | |
| GNUNET_SERVER_MstCreateCallback create, | | GNUNET_SERVER_MstCreateCallback create, | |
| GNUNET_SERVER_MstDestroyCallback destroy, | | GNUNET_SERVER_MstDestroyCallback destroy, | |
| GNUNET_SERVER_MstReceiveCallback receive, | | GNUNET_SERVER_MstReceiveCallback receive, | |
| void *cls); | | void *cls); | |
| | | | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| { | | { | |
| #endif | | #endif | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| } | | } | |
| #endif | | #endif | |
| | | | |
|
| | | /** @} */ /* end of group server */ | |
| | | | |
| /* ifndef GNUNET_SERVER_LIB_H */ | | /* ifndef GNUNET_SERVER_LIB_H */ | |
| #endif | | #endif | |
| /* end of gnunet_server_lib.h */ | | /* end of gnunet_server_lib.h */ | |
| | | | |
End of changes. 71 change blocks. |
| 121 lines changed or deleted | | 216 lines changed or added | |
|
| gnunet_strings_lib.h | | gnunet_strings_lib.h | |
| /* | | /* | |
| This file is part of GNUnet. | | This file is part of GNUnet. | |
|
| (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2012 Christian Gro
thoff (and other contributing authors) | | (C) 2001-2013 Christian Grothoff (and other contributing authors) | |
| | | | |
| GNUnet is free software; you can redistribute it and/or modify | | GNUnet is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published | | 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. | | option) any later version. | |
| | | | |
| GNUnet is distributed in the hope that it will be useful, but | | GNUnet is distributed in the hope that it will be useful, but | |
| WITHOUT ANY WARRANTY; without even the implied warranty of | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| General Public License for more details. | | General Public License for more details. | |
| | | | |
| You should have received a copy of the GNU General Public License | | You should have received a copy of the GNU General Public License | |
| along with GNUnet; see the file COPYING. If not, write to the | | along with GNUnet; see the file COPYING. If not, write to the | |
| Free Software Foundation, Inc., 59 Temple Place - Suite 330, | | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| | | | |
| skipping to change at line 57 | | skipping to change at line 57 | |
| #endif | | #endif | |
| #endif | | #endif | |
| | | | |
| #include "gnunet_time_lib.h" | | #include "gnunet_time_lib.h" | |
| | | | |
| /** | | /** | |
| * Convert a given fancy human-readable size to bytes. | | * Convert a given fancy human-readable size to bytes. | |
| * | | * | |
| * @param fancy_size human readable string (i.e. 1 MB) | | * @param fancy_size human readable string (i.e. 1 MB) | |
| * @param size set to the size in bytes | | * @param size set to the size in bytes | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR on error | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
| GNUNET_STRINGS_fancy_size_to_bytes (const char *fancy_size, | | GNUNET_STRINGS_fancy_size_to_bytes (const char *fancy_size, | |
| unsigned long long *size); | | unsigned long long *size); | |
| | | | |
| /** | | /** | |
| * Convert a given fancy human-readable time to our internal | | * Convert a given fancy human-readable time to our internal | |
| * representation. | | * representation. | |
| * | | * | |
| * @param fancy_time human readable string (i.e. 1 minute) | | * @param fancy_time human readable string (i.e. 1 minute) | |
| * @param rtime set to the relative time | | * @param rtime set to the relative time | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR on error | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
| GNUNET_STRINGS_fancy_time_to_relative (const char *fancy_time, | | GNUNET_STRINGS_fancy_time_to_relative (const char *fancy_time, | |
| struct GNUNET_TIME_Relative *rtime); | | struct GNUNET_TIME_Relative *rtime); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup time | |
| * Convert a given fancy human-readable time to our internal | | * Convert a given fancy human-readable time to our internal | |
|
| * representation. | | * representation. The human-readable time is expected to be | |
| | | * in local time, whereas the returned value will be in UTC. | |
| * | | * | |
| * @param fancy_time human readable string (i.e. %Y-%m-%d %H:%M:%S) | | * @param fancy_time human readable string (i.e. %Y-%m-%d %H:%M:%S) | |
| * @param atime set to the absolute time | | * @param atime set to the absolute time | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR on error | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | |
| */ | | */ | |
| int | | int | |
| GNUNET_STRINGS_fancy_time_to_absolute (const char *fancy_time, | | GNUNET_STRINGS_fancy_time_to_absolute (const char *fancy_time, | |
| struct GNUNET_TIME_Absolute *atime); | | struct GNUNET_TIME_Absolute *atime); | |
| | | | |
| /** | | /** | |
| * Convert a given filesize into a fancy human-readable format. | | * Convert a given filesize into a fancy human-readable format. | |
| * | | * | |
| * @param size number of bytes | | * @param size number of bytes | |
| * @return fancy representation of the size (possibly rounded) for humans | | * @return fancy representation of the size (possibly rounded) for humans | |
| */ | | */ | |
| char * | | char * | |
| GNUNET_STRINGS_byte_size_fancy (unsigned long long size); | | GNUNET_STRINGS_byte_size_fancy (unsigned long long size); | |
| | | | |
| /** | | /** | |
| * Convert the len characters long character sequence | | * Convert the len characters long character sequence | |
| * given in input that is in the given input charset | | * given in input that is in the given input charset | |
| * to a string in given output charset. | | * to a string in given output charset. | |
|
| | | * | |
| | | * @param input input string | |
| | | * @param len number of bytes in @a input | |
| | | * @param input_charset character set used for @a input | |
| | | * @param output_charset desired character set for the return value | |
| * @return the converted string (0-terminated), | | * @return the converted string (0-terminated), | |
| * if conversion fails, a copy of the orignal | | * if conversion fails, a copy of the orignal | |
| * string is returned. | | * string is returned. | |
| */ | | */ | |
| char * | | char * | |
| GNUNET_STRINGS_conv (const char *input, size_t len, | | GNUNET_STRINGS_conv (const char *input, size_t len, | |
| const char *input_charset, | | const char *input_charset, | |
| const char *output_charset); | | const char *output_charset); | |
| | | | |
| /** | | /** | |
| * Convert the len characters long character sequence | | * Convert the len characters long character sequence | |
| * given in input that is in the given charset | | * given in input that is in the given charset | |
| * to UTF-8. | | * to UTF-8. | |
| * | | * | |
| * @param input the input string (not necessarily 0-terminated) | | * @param input the input string (not necessarily 0-terminated) | |
|
| * @param len the number of bytes in the input | | * @param len the number of bytes in the @a input | |
| * @param charset character set to convert from | | * @param charset character set to convert from | |
| * @return the converted string (0-terminated) | | * @return the converted string (0-terminated) | |
| */ | | */ | |
| char * | | char * | |
| GNUNET_STRINGS_to_utf8 (const char *input, | | GNUNET_STRINGS_to_utf8 (const char *input, | |
| size_t len, | | size_t len, | |
| const char *charset); | | const char *charset); | |
| | | | |
| /** | | /** | |
| * Convert the len bytes-long UTF-8 string | | * Convert the len bytes-long UTF-8 string | |
| * given in input to the given charset. | | * given in input to the given charset. | |
|
| | | * | |
| | | * @param input the input string (not necessarily 0-terminated) | |
| | | * @param len the number of bytes in the @a input | |
| | | * @param charset character set to convert to | |
| * @return the converted string (0-terminated), | | * @return the converted string (0-terminated), | |
| * if conversion fails, a copy of the orignal | | * if conversion fails, a copy of the orignal | |
| * string is returned. | | * string is returned. | |
| */ | | */ | |
| char * | | char * | |
| GNUNET_STRINGS_from_utf8 (const char *input, | | GNUNET_STRINGS_from_utf8 (const char *input, | |
| size_t len, | | size_t len, | |
| const char *charset); | | const char *charset); | |
| | | | |
| /** | | /** | |
|
| * Convert the utf-8 input string to lowercase | | * Convert the utf-8 input string to lower case. | |
| * Output needs to be allocated appropriately | | * Output needs to be allocated appropriately. | |
| * | | * | |
| * @param input input string | | * @param input input string | |
| * @param output output buffer | | * @param output output buffer | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_STRINGS_utf8_tolower (const char* input, | | GNUNET_STRINGS_utf8_tolower (const char *input, | |
| char** output); | | char *output); | |
| | | | |
| /** | | /** | |
|
| * Convert the utf-8 input string to lowercase | | * Convert the utf-8 input string to upper case. | |
| * Output needs to be allocated appropriately | | * Output needs to be allocated appropriately. | |
| * | | * | |
| * @param input input string | | * @param input input string | |
| * @param output output buffer | | * @param output output buffer | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_STRINGS_utf8_toupper (const char* input, | | GNUNET_STRINGS_utf8_toupper (const char *input, | |
| char** output); | | char *output); | |
| | | | |
| /** | | /** | |
| * Complete filename (a la shell) from abbrevition. | | * Complete filename (a la shell) from abbrevition. | |
| * | | * | |
| * @param fil the name of the file, may contain ~/ or | | * @param fil the name of the file, may contain ~/ or | |
| * be relative to the current directory | | * be relative to the current directory | |
| * @return the full file name, | | * @return the full file name, | |
| * NULL is returned on error | | * NULL is returned on error | |
| */ | | */ | |
| char * | | char * | |
| | | | |
| skipping to change at line 201 | | skipping to change at line 211 | |
| size_t size, | | size_t size, | |
| unsigned int count, | | unsigned int count, | |
| ...); | | ...); | |
| | | | |
| /** | | /** | |
| * Given a buffer of a given size, find "count" 0-terminated strings | | * Given a buffer of a given size, find "count" 0-terminated strings | |
| * in the buffer and assign the count (varargs) of type "const char**" | | * in the buffer and assign the count (varargs) of type "const char**" | |
| * to the locations of the respective strings in the buffer. | | * to the locations of the respective strings in the buffer. | |
| * | | * | |
| * @param buffer the buffer to parse | | * @param buffer the buffer to parse | |
|
| * @param size size of the buffer | | * @param size size of the @a buffer | |
| * @param count number of strings to locate | | * @param count number of strings to locate | |
| * @param ... pointers to where to store the strings | | * @param ... pointers to where to store the strings | |
| * @return offset of the character after the last 0-termination | | * @return offset of the character after the last 0-termination | |
| * in the buffer, or 0 on error. | | * in the buffer, or 0 on error. | |
| */ | | */ | |
| unsigned int | | unsigned int | |
|
| GNUNET_STRINGS_buffer_tokenize (const char *buffer, size_t size, | | GNUNET_STRINGS_buffer_tokenize (const char *buffer, | |
| | | size_t size, | |
| unsigned int count, ...); | | unsigned int count, ...); | |
| | | | |
| /** | | /** | |
|
| * "asctime", except for GNUnet time. | | * @ingroup time | |
| * This is one of the very few calls in the entire API that is | | * Like `asctime`, except for GNUnet time. Converts a GNUnet internal | |
| * NOT reentrant! | | * absolute time (which is in UTC) to a string in local time. | |
| | | * Note that the returned value will be overwritten if this function | |
| | | * is called again. | |
| * | | * | |
| * @param t the absolute time to convert | | * @param t the absolute time to convert | |
|
| * @return timestamp in human-readable form | | * @return timestamp in human-readable form in local time | |
| */ | | */ | |
| const char * | | const char * | |
| GNUNET_STRINGS_absolute_time_to_string (struct GNUNET_TIME_Absolute t); | | GNUNET_STRINGS_absolute_time_to_string (struct GNUNET_TIME_Absolute t); | |
| | | | |
| /** | | /** | |
|
| | | * @ingroup time | |
| * Give relative time in human-readable fancy format. | | * Give relative time in human-readable fancy format. | |
| * This is one of the very few calls in the entire API that is | | * This is one of the very few calls in the entire API that is | |
| * NOT reentrant! | | * NOT reentrant! | |
| * | | * | |
| * @param delta time in milli seconds | | * @param delta time in milli seconds | |
| * @param do_round are we allowed to round a bit? | | * @param do_round are we allowed to round a bit? | |
| * @return string in human-readable form | | * @return string in human-readable form | |
| */ | | */ | |
| const char * | | const char * | |
| GNUNET_STRINGS_relative_time_to_string (struct GNUNET_TIME_Relative delta, | | GNUNET_STRINGS_relative_time_to_string (struct GNUNET_TIME_Relative delta, | |
| | | | |
| skipping to change at line 265 | | skipping to change at line 279 | |
| * it should be placed, if needed. | | * it should be placed, if needed. | |
| * | | * | |
| * @param data data to encode | | * @param data data to encode | |
| * @param size size of data (in bytes) | | * @param size size of data (in bytes) | |
| * @param out buffer to fill | | * @param out buffer to fill | |
| * @param out_size size of the buffer. Must be large enough to hold | | * @param out_size size of the buffer. Must be large enough to hold | |
| * ((size*8) + (((size*8) % 5) > 0 ? 5 - ((size*8) % 5) : 0)) / 5 | | * ((size*8) + (((size*8) % 5) > 0 ? 5 - ((size*8) % 5) : 0)) / 5 | |
| * @return pointer to the next byte in 'out' or NULL on error. | | * @return pointer to the next byte in 'out' or NULL on error. | |
| */ | | */ | |
| char * | | char * | |
|
| GNUNET_STRINGS_data_to_string (const unsigned char *data, | | GNUNET_STRINGS_data_to_string (const void *data, | |
| size_t size, | | size_t size, | |
| char *out, | | char *out, | |
| size_t out_size); | | size_t out_size); | |
| | | | |
| /** | | /** | |
| * Convert ASCII encoding back to data | | * Convert ASCII encoding back to data | |
| * out_size must match exactly the size of the data before it was encoded. | | * out_size must match exactly the size of the data before it was encoded. | |
| * | | * | |
| * @param enc the encoding | | * @param enc the encoding | |
| * @param enclen number of characters in 'enc' (without 0-terminator, which
can be missing) | | * @param enclen number of characters in 'enc' (without 0-terminator, which
can be missing) | |
| * @param out location where to store the decoded data | | * @param out location where to store the decoded data | |
|
| * @param out_size sizeof the output buffer | | * @param out_size size of the output buffer @a out | |
| * @return GNUNET_OK on success, GNUNET_SYSERR if result has the wrong enco | | * @return #GNUNET_OK on success, #GNUNET_SYSERR if result has the wrong en | |
| ding | | coding | |
| */ | | */ | |
| int | | int | |
| GNUNET_STRINGS_string_to_data (const char *enc, | | GNUNET_STRINGS_string_to_data (const char *enc, | |
| size_t enclen, | | size_t enclen, | |
|
| unsigned char *out, | | void *out, | |
| size_t out_size); | | size_t out_size); | |
| | | | |
| /** | | /** | |
|
| | | * Encode into Base64. | |
| | | * | |
| | | * @param data the data to encode | |
| | | * @param len the length of the input | |
| | | * @param output where to write the output (*output should be NULL, | |
| | | * is allocated) | |
| | | * @return the size of the output | |
| | | */ | |
| | | size_t | |
| | | GNUNET_STRINGS_base64_encode (const char *data, size_t len, char **output); | |
| | | | |
| | | /** | |
| | | * Decode from Base64. | |
| | | * | |
| | | * @param data the data to encode | |
| | | * @param len the length of the input | |
| | | * @param output where to write the output (*output should be NULL, | |
| | | * is allocated) | |
| | | * @return the size of the output | |
| | | */ | |
| | | size_t | |
| | | GNUNET_STRINGS_base64_decode (const char *data, size_t len, char **output); | |
| | | | |
| | | /** | |
| * Parse a path that might be an URI. | | * Parse a path that might be an URI. | |
| * | | * | |
| * @param path path to parse. Must be NULL-terminated. | | * @param path path to parse. Must be NULL-terminated. | |
| * @param scheme_part a pointer to 'char *' where a pointer to a string tha
t | | * @param scheme_part a pointer to 'char *' where a pointer to a string tha
t | |
| * represents the URI scheme will be stored. Can be NULL. The string
is | | * represents the URI scheme will be stored. Can be NULL. The string
is | |
| * allocated by the function, and should be freed by GNUNET_free() w
hen | | * allocated by the function, and should be freed by GNUNET_free() w
hen | |
| * it is no longer needed. | | * it is no longer needed. | |
| * @param path_part a pointer to 'const char *' where a pointer to the path | | * @param path_part a pointer to 'const char *' where a pointer to the path | |
| * part of the URI will be stored. Can be NULL. Points to the same b
lock | | * part of the URI will be stored. Can be NULL. Points to the same b
lock | |
| * of memory as 'path', and thus must not be freed. Might point to '
\0', | | * of memory as 'path', and thus must not be freed. Might point to '
\0', | |
| * if path part is zero-length. | | * if path part is zero-length. | |
|
| * @return GNUNET_YES if it's an URI, GNUNET_NO otherwise. If 'path' is not | | * @return #GNUNET_YES if it's an URI, #GNUNET_NO otherwise. If 'path' is n
ot | |
| * an URI, '* scheme_part' and '*path_part' will remain unchanged | | * an URI, '* scheme_part' and '*path_part' will remain unchanged | |
| * (if they weren't NULL). | | * (if they weren't NULL). | |
| */ | | */ | |
| int | | int | |
| GNUNET_STRINGS_parse_uri (const char *path, | | GNUNET_STRINGS_parse_uri (const char *path, | |
| char **scheme_part, | | char **scheme_part, | |
| const char **path_part); | | const char **path_part); | |
| | | | |
| /** | | /** | |
| * Check whether filename is absolute or not, and if it's an URI | | * Check whether filename is absolute or not, and if it's an URI | |
| * | | * | |
| * @param filename filename to check | | * @param filename filename to check | |
|
| * @param can_be_uri GNUNET_YES to check for being URI, GNUNET_NO - to | | * @param can_be_uri #GNUNET_YES to check for being URI, #GNUNET_NO - to | |
| * assume it's not URI | | * assume it's not URI | |
|
| * @param r_is_uri a pointer to an int that is set to GNUNET_YES if 'filena
me' | | * @param r_is_uri a pointer to an int that is set to #GNUNET_YES if 'filen
ame' | |
| * is URI and to GNUNET_NO otherwise. Can be NULL. If 'can_be_uri' i
s | | * is URI and to GNUNET_NO otherwise. Can be NULL. If 'can_be_uri' i
s | |
|
| * not GNUNET_YES, *r_is_uri is set to GNUNET_NO. | | * not #GNUNET_YES, *r_is_uri is set to #GNUNET_NO. | |
| * @param r_uri_scheme a pointer to a char * that is set to a pointer to UR
I scheme. | | * @param r_uri_scheme a pointer to a char * that is set to a pointer to UR
I scheme. | |
| * The string is allocated by the function, and should be freed with | | * The string is allocated by the function, and should be freed with | |
| * GNUNET_free (). Can be NULL. | | * GNUNET_free (). Can be NULL. | |
|
| * @return GNUNET_YES if 'filename' is absolute, GNUNET_NO otherwise. | | * @return #GNUNET_YES if 'filename' is absolute, #GNUNET_NO otherwise. | |
| */ | | */ | |
| int | | int | |
| GNUNET_STRINGS_path_is_absolute (const char *filename, | | GNUNET_STRINGS_path_is_absolute (const char *filename, | |
| int can_be_uri, | | int can_be_uri, | |
| int *r_is_uri, | | int *r_is_uri, | |
| char **r_uri_scheme); | | char **r_uri_scheme); | |
| | | | |
| /** | | /** | |
| * Flags for what we should check a file for. | | * Flags for what we should check a file for. | |
| */ | | */ | |
| | | | |
| skipping to change at line 354 | | skipping to change at line 392 | |
| */ | | */ | |
| GNUNET_STRINGS_CHECK_IS_LINK = 0x00000004, | | GNUNET_STRINGS_CHECK_IS_LINK = 0x00000004, | |
| | | | |
| /** | | /** | |
| * Check that the path is an absolute path. | | * Check that the path is an absolute path. | |
| */ | | */ | |
| GNUNET_STRINGS_CHECK_IS_ABSOLUTE = 0x00000008 | | GNUNET_STRINGS_CHECK_IS_ABSOLUTE = 0x00000008 | |
| }; | | }; | |
| | | | |
| /** | | /** | |
|
| * Perform checks on 'filename'. FIXME: some duplication with | | * Perform checks on @a filename. FIXME: some duplication with | |
| * "GNUNET_DISK_"-APIs. We should unify those. | | * "GNUNET_DISK_"-APIs. We should unify those. | |
| * | | * | |
| * @param filename file to check | | * @param filename file to check | |
| * @param checks checks to perform | | * @param checks checks to perform | |
|
| * @return GNUNET_YES if all checks pass, GNUNET_NO if at least one of them | | * @return #GNUNET_YES if all checks pass, #GNUNET_NO if at least one of th | |
| * fails, GNUNET_SYSERR when a check can't be performed | | em | |
| | | * fails, #GNUNET_SYSERR when a check can't be performed | |
| */ | | */ | |
| int | | int | |
| GNUNET_STRINGS_check_filename (const char *filename, | | GNUNET_STRINGS_check_filename (const char *filename, | |
| enum GNUNET_STRINGS_FilenameCheck checks); | | enum GNUNET_STRINGS_FilenameCheck checks); | |
| | | | |
| /** | | /** | |
|
| * Tries to convert 'zt_addr' string to an IPv6 address. | | * Tries to convert @a zt_addr string to an IPv6 address. | |
| * The string is expected to have the format "[ABCD::01]:80". | | * The string is expected to have the format "[ABCD::01]:80". | |
| * | | * | |
| * @param zt_addr 0-terminated string. May be mangled by the function. | | * @param zt_addr 0-terminated string. May be mangled by the function. | |
| * @param addrlen length of zt_addr (not counting 0-terminator). | | * @param addrlen length of zt_addr (not counting 0-terminator). | |
| * @param r_buf a buffer to fill. Initially gets filled with zeroes, | | * @param r_buf a buffer to fill. Initially gets filled with zeroes, | |
| * then its sin6_port, sin6_family and sin6_addr are set appropriate
ly. | | * then its sin6_port, sin6_family and sin6_addr are set appropriate
ly. | |
|
| * @return GNUNET_OK if conversion succeded. GNUNET_SYSERR otherwise, in wh
ich | | * @return #GNUNET_OK if conversion succeded. #GNUNET_SYSERR otherwise, in
which | |
| * case the contents of r_buf are undefined. | | * case the contents of r_buf are undefined. | |
| */ | | */ | |
| int | | int | |
| GNUNET_STRINGS_to_address_ipv6 (const char *zt_addr, | | GNUNET_STRINGS_to_address_ipv6 (const char *zt_addr, | |
| uint16_t addrlen, | | uint16_t addrlen, | |
| struct sockaddr_in6 *r_buf); | | struct sockaddr_in6 *r_buf); | |
| | | | |
| /** | | /** | |
|
| * Tries to convert 'zt_addr' string to an IPv4 address. | | * Tries to convert @a zt_addr string to an IPv4 address. | |
| * The string is expected to have the format "1.2.3.4:80". | | * The string is expected to have the format "1.2.3.4:80". | |
| * | | * | |
| * @param zt_addr 0-terminated string. May be mangled by the function. | | * @param zt_addr 0-terminated string. May be mangled by the function. | |
| * @param addrlen length of zt_addr (not counting 0-terminator). | | * @param addrlen length of zt_addr (not counting 0-terminator). | |
| * @param r_buf a buffer to fill. | | * @param r_buf a buffer to fill. | |
|
| * @return GNUNET_OK if conversion succeded. GNUNET_SYSERR otherwise, in wh
ich case | | * @return #GNUNET_OK if conversion succeded. #GNUNET_SYSERR otherwise, in
which case | |
| * the contents of r_buf are undefined. | | * the contents of r_buf are undefined. | |
| */ | | */ | |
| int | | int | |
| GNUNET_STRINGS_to_address_ipv4 (const char *zt_addr, | | GNUNET_STRINGS_to_address_ipv4 (const char *zt_addr, | |
| uint16_t addrlen, | | uint16_t addrlen, | |
| struct sockaddr_in *r_buf); | | struct sockaddr_in *r_buf); | |
| | | | |
| /** | | /** | |
|
| * Tries to convert 'addr' string to an IP (v4 or v6) address. | | * Tries to convert @a addr string to an IP (v4 or v6) address. | |
| * Will automatically decide whether to treat 'addr' as v4 or v6 address. | | * Will automatically decide whether to treat 'addr' as v4 or v6 address. | |
| * | | * | |
| * @param addr a string, may not be 0-terminated. | | * @param addr a string, may not be 0-terminated. | |
|
| * @param addrlen number of bytes in addr (if addr is 0-terminated, | | * @param addrlen number of bytes in @a addr (if addr is 0-terminated, | |
| * 0-terminator should not be counted towards addrlen). | | * 0-terminator should not be counted towards addrlen). | |
| * @param r_buf a buffer to fill. | | * @param r_buf a buffer to fill. | |
|
| * @return GNUNET_OK if conversion succeded. GNUNET_SYSERR otherwise, in wh
ich | | * @return #GNUNET_OK if conversion succeded. #GNUNET_SYSERR otherwise, in
which | |
| * case the contents of r_buf are undefined. | | * case the contents of r_buf are undefined. | |
| */ | | */ | |
| int | | int | |
| GNUNET_STRINGS_to_address_ip (const char *addr, | | GNUNET_STRINGS_to_address_ip (const char *addr, | |
| uint16_t addrlen, | | uint16_t addrlen, | |
| struct sockaddr_storage *r_buf); | | struct sockaddr_storage *r_buf); | |
| | | | |
| /** | | /** | |
|
| * Returns utf-8 encoded arguments. | | * Returns utf-8 encoded arguments. Does nothing (returns a copy of | |
| * Does nothing (returns a copy of argc and argv) on any platform | | * @a argc and @a argv) on any platform other than W32. Returned @a | |
| * other than W32. | | * argv has `u8argv[u8argc] == NULL`. Returned @a argv is a single | |
| * Returned argv has u8argv[u8argc] == NULL. | | * memory block, and can be freed with a single GNUNET_free() call. | |
| * Returned argv is a single memory block, and can be freed with a single | | | |
| * GNUNET_free () call. | | | |
| * | | * | |
| * @param argc argc (as given by main()) | | * @param argc argc (as given by main()) | |
| * @param argv argv (as given by main()) | | * @param argv argv (as given by main()) | |
| * @param u8argc a location to store new argc in (though it's th same as ar
gc) | | * @param u8argc a location to store new argc in (though it's th same as ar
gc) | |
| * @param u8argv a location to store new argv in | | * @param u8argv a location to store new argv in | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR on failure | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on failure | |
| */ | | */ | |
| int | | int | |
| GNUNET_STRINGS_get_utf8_args (int argc, | | GNUNET_STRINGS_get_utf8_args (int argc, | |
| char *const *argv, | | char *const *argv, | |
| int *u8argc, | | int *u8argc, | |
| char *const **u8argv); | | char *const **u8argv); | |
| | | | |
|
| | | /* ***************** IPv4/IPv6 parsing ****************** */ | |
| | | | |
| | | struct GNUNET_STRINGS_PortPolicy | |
| | | { | |
| | | | |
| | | /** | |
| | | * Starting port range (0 if none given). | |
| | | */ | |
| | | uint16_t start_port; | |
| | | | |
| | | /** | |
| | | * End of port range (0 if none given). | |
| | | */ | |
| | | uint16_t end_port; | |
| | | | |
| | | /** | |
| | | * #GNUNET_YES if the port range should be negated | |
| | | * ("!" in policy). | |
| | | */ | |
| | | int negate_portrange; | |
| | | | |
| | | }; | |
| | | | |
| | | /** | |
| | | * @brief IPV4 network in CIDR notation. | |
| | | */ | |
| | | struct GNUNET_STRINGS_IPv4NetworkPolicy | |
| | | { | |
| | | /** | |
| | | * IPv4 address. | |
| | | */ | |
| | | struct in_addr network; | |
| | | | |
| | | /** | |
| | | * IPv4 netmask. | |
| | | */ | |
| | | struct in_addr netmask; | |
| | | | |
| | | /** | |
| | | * Policy for port access. | |
| | | */ | |
| | | struct GNUNET_STRINGS_PortPolicy pp; | |
| | | | |
| | | }; | |
| | | | |
| | | /** | |
| | | * @brief network in CIDR notation for IPV6. | |
| | | */ | |
| | | struct GNUNET_STRINGS_IPv6NetworkPolicy | |
| | | { | |
| | | /** | |
| | | * IPv6 address. | |
| | | */ | |
| | | struct in6_addr network; | |
| | | | |
| | | /** | |
| | | * IPv6 netmask. | |
| | | */ | |
| | | struct in6_addr netmask; | |
| | | | |
| | | /** | |
| | | * Policy for port access. | |
| | | */ | |
| | | struct GNUNET_STRINGS_PortPolicy pp; | |
| | | | |
| | | }; | |
| | | | |
| | | /** | |
| | | * Parse an IPv4 network policy. The argument specifies a list of | |
| | | * subnets. The format is <tt>(network[/netmask][:[!]SPORT-DPORT];)*</tt> | |
| | | * (no whitespace, must be terminated with a semicolon). The network | |
| | | * must be given in dotted-decimal notation. The netmask can be given | |
| | | * in CIDR notation (/16) or in dotted-decimal (/255.255.0.0). | |
| | | * | |
| | | * @param routeListX a string specifying the IPv4 subnets | |
| | | * @return the converted list, terminated with all zeros; | |
| | | * NULL if the synatx is flawed | |
| | | */ | |
| | | struct GNUNET_STRINGS_IPv4NetworkPolicy * | |
| | | GNUNET_STRINGS_parse_ipv4_policy (const char *routeListX); | |
| | | | |
| | | /** | |
| | | * Parse an IPv6 network policy. The argument specifies a list of | |
| | | * subnets. The format is <tt>(network[/netmask[:[!]SPORT[-DPORT]]];)*</tt> | |
| | | * (no whitespace, must be terminated with a semicolon). The network | |
| | | * must be given in colon-hex notation. The netmask must be given in | |
| | | * CIDR notation (/16) or can be omitted to specify a single host. | |
| | | * Note that the netmask is mandatory if ports are specified. | |
| | | * | |
| | | * @param routeListX a string specifying the policy | |
| | | * @return the converted list, 0-terminated, NULL if the synatx is flawed | |
| | | */ | |
| | | struct GNUNET_STRINGS_IPv6NetworkPolicy * | |
| | | GNUNET_STRINGS_parse_ipv6_policy (const char *routeListX); | |
| | | | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| { | | { | |
| #endif | | #endif | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| } | | } | |
| #endif | | #endif | |
| | | | |
| /* ifndef GNUNET_UTIL_STRING_H */ | | /* ifndef GNUNET_UTIL_STRING_H */ | |
| #endif | | #endif | |
| /* end of gnunet_util_string.h */ | | /* end of gnunet_util_string.h */ | |
| | | | |
End of changes. 40 change blocks. |
| 49 lines changed or deleted | | 181 lines changed or added | |
|
| gnunet_testbed_service.h | | gnunet_testbed_service.h | |
| /* | | /* | |
| This file is part of GNUnet | | This file is part of GNUnet | |
|
| (C) 2008, 2009, 2012 Christian Grothoff (and other contributing autho
rs) | | (C) 2008--2013 Christian Grothoff (and other contributing authors) | |
| | | | |
| GNUnet is free software; you can redistribute it and/or modify | | GNUnet is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published | | it under the terms of the GNU General Public License as published | |
| by the Free Software Foundation; either version 3, or (at your | | by the Free Software Foundation; either version 3, or (at your | |
| option) any later version. | | option) any later version. | |
| | | | |
| GNUnet is distributed in the hope that it will be useful, but | | GNUnet is distributed in the hope that it will be useful, but | |
| WITHOUT ANY WARRANTY; without even the implied warranty of | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| General Public License for more details. | | General Public License for more details. | |
| | | | |
| skipping to change at line 76 | | skipping to change at line 76 | |
| * controllers can interact with each other (in a P2P fashion); those | | * controllers can interact with each other (in a P2P fashion); those | |
| * links are established via TCP/IP on the controller's service port. | | * links are established via TCP/IP on the controller's service port. | |
| */ | | */ | |
| struct GNUNET_TESTBED_Controller; | | struct GNUNET_TESTBED_Controller; | |
| | | | |
| /** | | /** | |
| * Create a host to run peers and controllers on. | | * Create a host to run peers and controllers on. | |
| * | | * | |
| * @param hostname name of the host, use "NULL" for localhost | | * @param hostname name of the host, use "NULL" for localhost | |
| * @param username username to use for the login; may be NULL | | * @param username username to use for the login; may be NULL | |
|
| | | * @param cfg the configuration to use as a template while starting a contr | |
| | | oller | |
| | | * on this host. Operation queue sizes specific to a host are als | |
| | | o | |
| | | * read from this configuration handle | |
| * @param port port number to use for ssh; use 0 to let ssh decide | | * @param port port number to use for ssh; use 0 to let ssh decide | |
| * @return handle to the host, NULL on error | | * @return handle to the host, NULL on error | |
| */ | | */ | |
| struct GNUNET_TESTBED_Host * | | struct GNUNET_TESTBED_Host * | |
| GNUNET_TESTBED_host_create (const char *hostname, | | GNUNET_TESTBED_host_create (const char *hostname, | |
| const char *username, | | const char *username, | |
|
| | | const struct GNUNET_CONFIGURATION_Handle *cfg, | |
| uint16_t port); | | uint16_t port); | |
| | | | |
| /** | | /** | |
| * Create a host to run peers and controllers on. This function is used | | * Create a host to run peers and controllers on. This function is used | |
| * if a peer learns about a host via IPC between controllers (and thus | | * if a peer learns about a host via IPC between controllers (and thus | |
| * some higher-level controller has already determined the unique IDs). | | * some higher-level controller has already determined the unique IDs). | |
| * | | * | |
| * @param id global host ID assigned to the host; 0 is | | * @param id global host ID assigned to the host; 0 is | |
| * reserved to always mean 'localhost' | | * reserved to always mean 'localhost' | |
| * @param hostname name of the host, use "NULL" for localhost | | * @param hostname name of the host, use "NULL" for localhost | |
| * @param username username to use for the login; may be NULL | | * @param username username to use for the login; may be NULL | |
|
| | | * @param cfg the configuration to use as a template while starting a contr | |
| | | oller | |
| | | * on this host. Operation queue sizes specific to a host are als | |
| | | o | |
| | | * read from this configuration handle | |
| * @param port port number to use for ssh; use 0 to let ssh decide | | * @param port port number to use for ssh; use 0 to let ssh decide | |
| * @return handle to the host, NULL on error | | * @return handle to the host, NULL on error | |
| */ | | */ | |
| struct GNUNET_TESTBED_Host * | | struct GNUNET_TESTBED_Host * | |
| GNUNET_TESTBED_host_create_with_id (uint32_t id, | | GNUNET_TESTBED_host_create_with_id (uint32_t id, | |
| const char *hostname, | | const char *hostname, | |
| const char *username, | | const char *username, | |
|
| | | const struct GNUNET_CONFIGURATION_Handl | |
| | | e | |
| | | *cfg, | |
| uint16_t port); | | uint16_t port); | |
| | | | |
| /** | | /** | |
|
| * Load a set of hosts from a configuration file. | | * Load a set of hosts from a configuration file. The hostfile format is | |
| | | * specified at https://gnunet.org/content/hosts-file-format | |
| * | | * | |
| * @param filename file with the host specification | | * @param filename file with the host specification | |
|
| | | * @param cfg the configuration to use as a template while starting a contr | |
| | | oller | |
| | | * on any of the loaded hosts. Operation queue sizes specific to | |
| | | a host | |
| | | * are also read from this configuration handle | |
| * @param hosts set to the hosts found in the file; caller must free this i
f | | * @param hosts set to the hosts found in the file; caller must free this i
f | |
| * number of hosts returned is greater than 0 | | * number of hosts returned is greater than 0 | |
| * @return number of hosts returned in 'hosts', 0 on error | | * @return number of hosts returned in 'hosts', 0 on error | |
| */ | | */ | |
| unsigned int | | unsigned int | |
| GNUNET_TESTBED_hosts_load_from_file (const char *filename, | | GNUNET_TESTBED_hosts_load_from_file (const char *filename, | |
|
| | | const struct GNUNET_CONFIGURATION_Hand | |
| | | le | |
| | | *cfg, | |
| struct GNUNET_TESTBED_Host ***hosts); | | struct GNUNET_TESTBED_Host ***hosts); | |
| | | | |
| /** | | /** | |
|
| | | * Loads the set of host allocated by the LoadLeveler Job Scheduler. This | |
| | | * function is only available when compiled with support for LoadLeveler an | |
| | | d is | |
| | | * used for running on the SuperMUC | |
| | | * | |
| | | * @param cfg the configuration to use as a template while starting a contr | |
| | | oller | |
| | | * on any of the loaded hosts. Operation queue sizes specific to | |
| | | a host | |
| | | * are also read from this configuration handle | |
| | | * @param hosts set to the hosts found in the file; caller must free this i | |
| | | f | |
| | | * number of hosts returned is greater than 0 | |
| | | * @return number of hosts returned in 'hosts', 0 on error | |
| | | */ | |
| | | unsigned int | |
| | | GNUNET_TESTBED_hosts_load_from_loadleveler (const struct | |
| | | GNUNET_CONFIGURATION_Handle *cf | |
| | | g, | |
| | | struct GNUNET_TESTBED_Host | |
| | | ***hosts); | |
| | | | |
| | | /** | |
| * Destroy a host handle. Must only be called once everything | | * Destroy a host handle. Must only be called once everything | |
| * running on that host has been stopped. | | * running on that host has been stopped. | |
| * | | * | |
| * @param host handle to destroy | | * @param host handle to destroy | |
| */ | | */ | |
| void | | void | |
| GNUNET_TESTBED_host_destroy (struct GNUNET_TESTBED_Host *host); | | GNUNET_TESTBED_host_destroy (struct GNUNET_TESTBED_Host *host); | |
| | | | |
| /** | | /** | |
| * The handle for whether a host is habitable or not | | * The handle for whether a host is habitable or not | |
| | | | |
| skipping to change at line 165 | | skipping to change at line 198 | |
| struct GNUNET_TESTBED_HostHabitableCheckHandle * | | struct GNUNET_TESTBED_HostHabitableCheckHandle * | |
| GNUNET_TESTBED_is_host_habitable (const struct GNUNET_TESTBED_Host *host, | | GNUNET_TESTBED_is_host_habitable (const struct GNUNET_TESTBED_Host *host, | |
| const struct GNUNET_CONFIGURATION_Handle | | const struct GNUNET_CONFIGURATION_Handle | |
| *config, | | *config, | |
| GNUNET_TESTBED_HostHabitableCallback cb, | | GNUNET_TESTBED_HostHabitableCallback cb, | |
| void *cb_cls); | | void *cb_cls); | |
| | | | |
| /** | | /** | |
| * Function to cancel a request started using GNUNET_TESTBED_is_host_habita
ble() | | * Function to cancel a request started using GNUNET_TESTBED_is_host_habita
ble() | |
| * | | * | |
|
| * @param struct handle the habitability check handle | | * @param handle the habitability check handle | |
| */ | | */ | |
| void | | void | |
| GNUNET_TESTBED_is_host_habitable_cancel (struct | | GNUNET_TESTBED_is_host_habitable_cancel (struct | |
| GNUNET_TESTBED_HostHabitableCheckH
andle | | GNUNET_TESTBED_HostHabitableCheckH
andle | |
| *handle); | | *handle); | |
| | | | |
| /** | | /** | |
| * Obtain the host's hostname. | | * Obtain the host's hostname. | |
| * | | * | |
| * @param host handle to the host, NULL means 'localhost' | | * @param host handle to the host, NULL means 'localhost' | |
| | | | |
| skipping to change at line 212 | | skipping to change at line 245 | |
| /** | | /** | |
| * A connection between two peers was torn down. | | * A connection between two peers was torn down. | |
| */ | | */ | |
| GNUNET_TESTBED_ET_DISCONNECT = 3, | | GNUNET_TESTBED_ET_DISCONNECT = 3, | |
| | | | |
| /** | | /** | |
| * A requested testbed operation has been completed. | | * A requested testbed operation has been completed. | |
| */ | | */ | |
| GNUNET_TESTBED_ET_OPERATION_FINISHED = 4, | | GNUNET_TESTBED_ET_OPERATION_FINISHED = 4, | |
| | | | |
|
| /** | | | |
| * The 'GNUNET_TESTBED_run' operation has been completed | | | |
| */ | | | |
| GNUNET_TESTBED_ET_TESTBED_ONLINE = 5 | | | |
| | | | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Types of information that can be requested about a peer. | | * Types of information that can be requested about a peer. | |
| */ | | */ | |
| enum GNUNET_TESTBED_PeerInformationType | | enum GNUNET_TESTBED_PeerInformationType | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Special value (not valid for requesting information) | | * Special value (not valid for requesting information) | |
| | | | |
| skipping to change at line 264 | | skipping to change at line 292 | |
| */ | | */ | |
| struct GNUNET_TESTBED_EventInformation | | struct GNUNET_TESTBED_EventInformation | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Type of the event. | | * Type of the event. | |
| */ | | */ | |
| enum GNUNET_TESTBED_EventType type; | | enum GNUNET_TESTBED_EventType type; | |
| | | | |
| /** | | /** | |
|
| | | * Handle for the corresponding operation that generated this event | |
| | | */ | |
| | | struct GNUNET_TESTBED_Operation *op; | |
| | | | |
| | | /** | |
| | | * Closure given while creating the above operation | |
| | | */ | |
| | | void *op_cls; | |
| | | | |
| | | /** | |
| * Details about the event. | | * Details about the event. | |
| */ | | */ | |
| union | | union | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Details about peer start event. | | * Details about peer start event. | |
| */ | | */ | |
| struct | | struct | |
| { | | { | |
| | | | |
| skipping to change at line 339 | | skipping to change at line 377 | |
| */ | | */ | |
| struct GNUNET_TESTBED_Peer *peer2; | | struct GNUNET_TESTBED_Peer *peer2; | |
| | | | |
| } peer_disconnect; | | } peer_disconnect; | |
| | | | |
| /** | | /** | |
| * Details about an operation finished event. | | * Details about an operation finished event. | |
| */ | | */ | |
| struct | | struct | |
| { | | { | |
|
| | | | |
| /** | | | |
| * Handle for the operation that was finished. | | | |
| */ | | | |
| struct GNUNET_TESTBED_Operation *operation; | | | |
| | | | |
| /** | | | |
| * Closure that was passed in when the event was | | | |
| * requested. | | | |
| */ | | | |
| void *op_cls; | | | |
| | | | |
| /** | | /** | |
| * Error message for the operation, NULL on success. | | * Error message for the operation, NULL on success. | |
| */ | | */ | |
| const char *emsg; | | const char *emsg; | |
| | | | |
| /** | | /** | |
| * No result (NULL pointer) or generic result | | * No result (NULL pointer) or generic result | |
| * (whatever the GNUNET_TESTBED_ConnectAdapter returned). | | * (whatever the GNUNET_TESTBED_ConnectAdapter returned). | |
| */ | | */ | |
| void *generic; | | void *generic; | |
| | | | |
| } operation_finished; | | } operation_finished; | |
| | | | |
|
| /** | | | |
| * Details about an testbed run completed event. | | | |
| */ | | | |
| struct | | | |
| { | | | |
| | | | |
| /** | | | |
| * Error message for the operation, NULL on success. | | | |
| */ | | | |
| const char *emsg; | | | |
| | | | |
| /** | | | |
| * Array of peers now running (valid until | | | |
| * 'GNUNET_TESTBED_testbed_stop' is called). Note that it is | | | |
| * not allowed to call 'GNUNET_TESTBED_peer_destroy' on peers | | | |
| * from this array. | | | |
| */ | | | |
| struct GNUNET_TESTBED_Peer **peers; | | | |
| | | | |
| /** | | | |
| * Size of the 'peers' array. | | | |
| */ | | | |
| unsigned int num_peers; | | | |
| | | | |
| } testbed_run_finished; | | | |
| | | | |
| } details; | | } details; | |
| | | | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Signature of the event handler function called by the | | * Signature of the event handler function called by the | |
| * respective event controller. | | * respective event controller. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param event information about the event | | * @param event information about the event | |
| | | | |
| skipping to change at line 423 | | skipping to change at line 423 | |
| * @param cfg the configuration with which the controller has been started; | | * @param cfg the configuration with which the controller has been started; | |
| * NULL if status is not GNUNET_OK | | * NULL if status is not GNUNET_OK | |
| * @param status GNUNET_OK if the startup is successfull; GNUNET_SYSERR if
not, | | * @param status GNUNET_OK if the startup is successfull; GNUNET_SYSERR if
not, | |
| * GNUNET_TESTBED_controller_stop() shouldn't be called in this ca
se | | * GNUNET_TESTBED_controller_stop() shouldn't be called in this ca
se | |
| */ | | */ | |
| typedef void (*GNUNET_TESTBED_ControllerStatusCallback) (void *cls, | | typedef void (*GNUNET_TESTBED_ControllerStatusCallback) (void *cls, | |
| const struct GNUNET
_CONFIGURATION_Handle *cfg, | | const struct GNUNET
_CONFIGURATION_Handle *cfg, | |
| int status); | | int status); | |
| | | | |
| /** | | /** | |
|
| * Starts a controller process at the given host. | | * Starts a controller process at the given host. The given host's configr | |
| | | ation | |
| | | * is used as a Template configuration to use for the remote controller; th | |
| | | e | |
| | | * remote controller will be started with a slightly modified configuration | |
| | | * (port numbers, unix domain sockets and service home values are changed a | |
| | | s per | |
| | | * TESTING library on the remote host). The modified configuration replace | |
| | | s the | |
| | | * host's existing configuration before signalling success through the | |
| | | * GNUNET_TESTBED_ControllerStatusCallback() | |
| * | | * | |
| * @param trusted_ip the ip address of the controller which will be set as
TRUSTED | | * @param trusted_ip the ip address of the controller which will be set as
TRUSTED | |
| * HOST(all connections form this ip are permitted by the testbed)
when | | * HOST(all connections form this ip are permitted by the testbed)
when | |
| * starting testbed controller at host. This can either be a singl
e ip | | * starting testbed controller at host. This can either be a singl
e ip | |
| * address or a network address in CIDR notation. | | * address or a network address in CIDR notation. | |
|
| * @param host the host where the controller has to be started; NULL for | | * @param host the host where the controller has to be started. CANNOT be | |
| * localhost | | NULL. | |
| * @param cfg template configuration to use for the remote controller; the | | | |
| * remote controller will be started with a slightly modified | | | |
| * configuration (port numbers, unix domain sockets and service ho | | | |
| me | | | |
| * values are changed as per TESTING library on the remote host) | | | |
| * @param cb function called when the controller is successfully started or | | * @param cb function called when the controller is successfully started or | |
| * dies unexpectedly; GNUNET_TESTBED_controller_stop shouldn't be | | * dies unexpectedly; GNUNET_TESTBED_controller_stop shouldn't be | |
| * called if cb is called with GNUNET_SYSERR as status. Will never
be | | * called if cb is called with GNUNET_SYSERR as status. Will never
be | |
| * called in the same task as 'GNUNET_TESTBED_controller_start' | | * called in the same task as 'GNUNET_TESTBED_controller_start' | |
| * (synchronous errors will be signalled by returning NULL). This | | * (synchronous errors will be signalled by returning NULL). This | |
| * parameter cannot be NULL. | | * parameter cannot be NULL. | |
| * @param cls closure for above callbacks | | * @param cls closure for above callbacks | |
| * @return the controller process handle, NULL on errors | | * @return the controller process handle, NULL on errors | |
| */ | | */ | |
| struct GNUNET_TESTBED_ControllerProc * | | struct GNUNET_TESTBED_ControllerProc * | |
| GNUNET_TESTBED_controller_start (const char *trusted_ip, | | GNUNET_TESTBED_controller_start (const char *trusted_ip, | |
| struct GNUNET_TESTBED_Host *host, | | struct GNUNET_TESTBED_Host *host, | |
|
| const struct GNUNET_CONFIGURATION_Handle *
cfg, | | | |
| GNUNET_TESTBED_ControllerStatusCallback cb
, | | GNUNET_TESTBED_ControllerStatusCallback cb
, | |
| void *cls); | | void *cls); | |
| | | | |
| /** | | /** | |
| * Stop the controller process (also will terminate all peers and controlle
rs | | * Stop the controller process (also will terminate all peers and controlle
rs | |
| * dependent on this controller). This function blocks until the testbed h
as | | * dependent on this controller). This function blocks until the testbed h
as | |
| * been fully terminated (!). The controller status cb from | | * been fully terminated (!). The controller status cb from | |
| * GNUNET_TESTBED_controller_start() will not be called. | | * GNUNET_TESTBED_controller_start() will not be called. | |
| * | | * | |
| * @param cproc the controller process handle | | * @param cproc the controller process handle | |
| */ | | */ | |
| void | | void | |
| GNUNET_TESTBED_controller_stop (struct GNUNET_TESTBED_ControllerProc *cproc
); | | GNUNET_TESTBED_controller_stop (struct GNUNET_TESTBED_ControllerProc *cproc
); | |
| | | | |
| /** | | /** | |
|
| * Connect to a controller process using the given configuration at the | | * Connect to a controller process. The configuration to use for the conne | |
| * given host. | | ction | |
| | | * is retreived from the given host where a controller is started using | |
| | | * GNUNET_TESTBED_controller_start(). | |
| * | | * | |
|
| * @param cfg configuration to use | | | |
| * @param host host to run the controller on; This should be the same host
if | | * @param host host to run the controller on; This should be the same host
if | |
| * the controller was previously started with | | * the controller was previously started with | |
|
| * GNUNET_TESTBED_controller_start; NULL for localhost | | * GNUNET_TESTBED_controller_start() | |
| * @param host host where this controller is being run; | | | |
| * @param event_mask bit mask with set of events to call 'cc' for; | | * @param event_mask bit mask with set of events to call 'cc' for; | |
| * or-ed values of "1LL" shifted by the | | * or-ed values of "1LL" shifted by the | |
| * respective 'enum GNUNET_TESTBED_EventType' | | * respective 'enum GNUNET_TESTBED_EventType' | |
| * (i.e. "(1LL << GNUNET_TESTBED_ET_CONNECT) | ...") | | * (i.e. "(1LL << GNUNET_TESTBED_ET_CONNECT) | ...") | |
| * @param cc controller callback to invoke on events | | * @param cc controller callback to invoke on events | |
| * @param cc_cls closure for cc | | * @param cc_cls closure for cc | |
| * @return handle to the controller | | * @return handle to the controller | |
| */ | | */ | |
| struct GNUNET_TESTBED_Controller * | | struct GNUNET_TESTBED_Controller * | |
|
| GNUNET_TESTBED_controller_connect (const struct GNUNET_CONFIGURATION_Handle | | GNUNET_TESTBED_controller_connect (struct GNUNET_TESTBED_Host *host, | |
| *cfg, | | | |
| struct GNUNET_TESTBED_Host *host, | | | |
| uint64_t event_mask, | | uint64_t event_mask, | |
| GNUNET_TESTBED_ControllerCallback cc, | | GNUNET_TESTBED_ControllerCallback cc, | |
| void *cc_cls); | | void *cc_cls); | |
| | | | |
| /** | | /** | |
|
| * Configure shared services at a controller. Using this function, | | | |
| * you can specify that certain services (such as "resolver") | | | |
| * should not be run for each peer but instead be shared | | | |
| * across N peers on the specified host. This function | | | |
| * must be called before any peers are created at the host. | | | |
| * | | | |
| * @param controller controller to configure | | | |
| * @param service_name name of the service to share | | | |
| * @param num_peers number of peers that should share one instance | | | |
| * of the specified service (1 for no sharing is the default), | | | |
| * use 0 to disable the service | | | |
| */ | | | |
| void | | | |
| GNUNET_TESTBED_controller_configure_sharing (struct GNUNET_TESTBED_Controll | | | |
| er *controller, | | | |
| const char *service_name, | | | |
| uint32_t num_peers); | | | |
| | | | |
| /** | | | |
| * Stop the given controller (also will terminate all peers and | | * Stop the given controller (also will terminate all peers and | |
| * controllers dependent on this controller). This function | | * controllers dependent on this controller). This function | |
| * blocks until the testbed has been fully terminated (!). | | * blocks until the testbed has been fully terminated (!). | |
| * | | * | |
|
| * @param controller handle to controller to stop | | * @param c handle to controller to stop | |
| */ | | */ | |
| void | | void | |
|
| GNUNET_TESTBED_controller_disconnect (struct GNUNET_TESTBED_Controller *con
troller); | | GNUNET_TESTBED_controller_disconnect (struct GNUNET_TESTBED_Controller *c); | |
| | | | |
| /** | | /** | |
| * Opaque handle for host registration | | * Opaque handle for host registration | |
| */ | | */ | |
| struct GNUNET_TESTBED_HostRegistrationHandle; | | struct GNUNET_TESTBED_HostRegistrationHandle; | |
| | | | |
| /** | | /** | |
| * Callback which will be called to after a host registration succeeded or
failed | | * Callback which will be called to after a host registration succeeded or
failed | |
| * | | * | |
| * @param cls the closure | | * @param cls the closure | |
| | | | |
| skipping to change at line 590 | | skipping to change at line 570 | |
| * slave controller will then route it to the delegated controller. The | | * slave controller will then route it to the delegated controller. The | |
| * configuration of the delegated controller is given and is used to either | | * configuration of the delegated controller is given and is used to either | |
| * create the delegated controller or to connect to an existing controller.
Note | | * create the delegated controller or to connect to an existing controller.
Note | |
| * that while starting the delegated controller the configuration will be | | * that while starting the delegated controller the configuration will be | |
| * modified to accommodate available free ports. the 'is_subordinate' spec
ifies | | * modified to accommodate available free ports. the 'is_subordinate' spec
ifies | |
| * if the given delegated controller should be started and managed by the s
lave | | * if the given delegated controller should be started and managed by the s
lave | |
| * controller, or if the delegated controller already has a master and the
slave | | * controller, or if the delegated controller already has a master and the
slave | |
| * controller connects to it as a non master controller. The success or fai
lure | | * controller connects to it as a non master controller. The success or fai
lure | |
| * of this operation will be signalled through the | | * of this operation will be signalled through the | |
| * GNUNET_TESTBED_ControllerCallback() with an event of type | | * GNUNET_TESTBED_ControllerCallback() with an event of type | |
|
| * GNUNET_TESTBED_ET_OPERATION_FINISHED | | * #GNUNET_TESTBED_ET_OPERATION_FINISHED | |
| * | | * | |
| * @param op_cls the operation closure for the event which is generated to | | * @param op_cls the operation closure for the event which is generated to | |
| * signal success or failure of this operation | | * signal success or failure of this operation | |
| * @param master handle to the master controller who creates the associatio
n | | * @param master handle to the master controller who creates the associatio
n | |
| * @param delegated_host requests to which host should be delegated; cannot
be NULL | | * @param delegated_host requests to which host should be delegated; cannot
be NULL | |
| * @param slave_host which host is used to run the slave controller; use NU
LL to | | * @param slave_host which host is used to run the slave controller; use NU
LL to | |
| * make the master controller connect to the delegated host | | * make the master controller connect to the delegated host | |
|
| * @param slave_cfg configuration to use for the slave controller | | * @param is_subordinate #GNUNET_YES if the controller at delegated_host sh | |
| * @param is_subordinate GNUNET_YES if the controller at delegated_host sho | | ould | |
| uld | | * be started by the slave controller; #GNUNET_NO if the slave | |
| * be started by the slave controller; GNUNET_NO if the slave | | | |
| * controller has to connect to the already started delegated | | * controller has to connect to the already started delegated | |
| * controller via TCP/IP | | * controller via TCP/IP | |
| * @return the operation handle | | * @return the operation handle | |
| */ | | */ | |
| struct GNUNET_TESTBED_Operation * | | struct GNUNET_TESTBED_Operation * | |
| GNUNET_TESTBED_controller_link (void *op_cls, | | GNUNET_TESTBED_controller_link (void *op_cls, | |
| struct GNUNET_TESTBED_Controller *master, | | struct GNUNET_TESTBED_Controller *master, | |
| struct GNUNET_TESTBED_Host *delegated_host, | | struct GNUNET_TESTBED_Host *delegated_host, | |
| struct GNUNET_TESTBED_Host *slave_host, | | struct GNUNET_TESTBED_Host *slave_host, | |
|
| const struct GNUNET_CONFIGURATION_Handle | | | |
| *slave_cfg, | | | |
| int is_subordinate); | | int is_subordinate); | |
| | | | |
| /** | | /** | |
|
| * Same as the GNUNET_TESTBED_controller_link, however expects configuratio | | | |
| n in | | | |
| * serialized and compressed | | | |
| * | | | |
| * @param op_cls the operation closure for the event which is generated to | | | |
| * signal success or failure of this operation | | | |
| * @param master handle to the master controller who creates the associatio | | | |
| n | | | |
| * @param delegated_host requests to which host should be delegated; cannot | | | |
| be NULL | | | |
| * @param slave_host which host is used to run the slave controller; use NU | | | |
| LL to | | | |
| * make the master controller connect to the delegated host | | | |
| * @param sxcfg serialized and compressed configuration | | | |
| * @param sxcfg_size the size sxcfg | | | |
| * @param scfg_size the size of uncompressed serialized configuration | | | |
| * @param is_subordinate GNUNET_YES if the controller at delegated_host sho | | | |
| uld | | | |
| * be started by the slave controller; GNUNET_NO if the slave | | | |
| * controller has to connect to the already started delegated | | | |
| * controller via TCP/IP | | | |
| * @return the operation handle | | | |
| */ | | | |
| struct GNUNET_TESTBED_Operation * | | | |
| GNUNET_TESTBED_controller_link_2 (void *op_cls, | | | |
| struct GNUNET_TESTBED_Controller *master, | | | |
| struct GNUNET_TESTBED_Host *delegated_hos | | | |
| t, | | | |
| struct GNUNET_TESTBED_Host *slave_host, | | | |
| const char *sxcfg, | | | |
| size_t sxcfg_size, | | | |
| size_t scfg_size, | | | |
| int is_subordinate); | | | |
| | | | |
| /** | | | |
| * Function to acquire the configuration of a running slave controller. The | | * Function to acquire the configuration of a running slave controller. The | |
| * completion of the operation is signalled through the controller_cb from | | * completion of the operation is signalled through the controller_cb from | |
| * GNUNET_TESTBED_controller_connect(). If the operation is successful the | | * GNUNET_TESTBED_controller_connect(). If the operation is successful the | |
| * handle to the configuration is available in the generic pointer of | | * handle to the configuration is available in the generic pointer of | |
|
| * operation_finished field of struct GNUNET_TESTBED_EventInformation. | | * operation_finished field of `struct GNUNET_TESTBED_EventInformation`. | |
| * | | * | |
| * @param op_cls the closure for the operation | | * @param op_cls the closure for the operation | |
| * @param master the handle to master controller | | * @param master the handle to master controller | |
| * @param slave_host the host where the slave controller is running; the ha
ndle | | * @param slave_host the host where the slave controller is running; the ha
ndle | |
| * to the slave_host should remain valid until this operation is | | * to the slave_host should remain valid until this operation is | |
| * cancelled or marked as finished | | * cancelled or marked as finished | |
| * @return the operation handle; NULL if the slave_host is not registered a
t | | * @return the operation handle; NULL if the slave_host is not registered a
t | |
| * master | | * master | |
| */ | | */ | |
| struct GNUNET_TESTBED_Operation * | | struct GNUNET_TESTBED_Operation * | |
| | | | |
| skipping to change at line 688 | | skipping to change at line 636 | |
| * controller. If the given controller is not running on the target | | * controller. If the given controller is not running on the target | |
| * host, it should find or create a controller at the target host and | | * host, it should find or create a controller at the target host and | |
| * delegate creating the peer. Explicit delegation paths can be setup | | * delegate creating the peer. Explicit delegation paths can be setup | |
| * using 'GNUNET_TESTBED_controller_link'. If no explicit delegation | | * using 'GNUNET_TESTBED_controller_link'. If no explicit delegation | |
| * path exists, a direct link with a subordinate controller is setup | | * path exists, a direct link with a subordinate controller is setup | |
| * for the first delegated peer to a particular host; the subordinate | | * for the first delegated peer to a particular host; the subordinate | |
| * controller is then destroyed once the last peer that was delegated | | * controller is then destroyed once the last peer that was delegated | |
| * to the remote host is stopped. | | * to the remote host is stopped. | |
| * | | * | |
| * Creating the peer only creates the handle to manipulate and further | | * Creating the peer only creates the handle to manipulate and further | |
|
| * configure the peer; use "GNUNET_TESTBED_peer_start" and | | * configure the peer; use #GNUNET_TESTBED_peer_start and | |
| * "GNUNET_TESTBED_peer_stop" to actually start/stop the peer's | | * #GNUNET_TESTBED_peer_stop to actually start/stop the peer's | |
| * processes. | | * processes. | |
| * | | * | |
| * Note that the given configuration will be adjusted by the | | * Note that the given configuration will be adjusted by the | |
| * controller to avoid port/path conflicts with other peers. | | * controller to avoid port/path conflicts with other peers. | |
| * The "final" configuration can be obtained using | | * The "final" configuration can be obtained using | |
|
| * 'GNUNET_TESTBED_peer_get_information'. | | * #GNUNET_TESTBED_peer_get_information. | |
| * | | * | |
| * @param controller controller process to use | | * @param controller controller process to use | |
| * @param host host to run the peer on; cannot be NULL | | * @param host host to run the peer on; cannot be NULL | |
| * @param cfg Template configuration to use for the peer. Should exist unti
l | | * @param cfg Template configuration to use for the peer. Should exist unti
l | |
| * operation is cancelled or GNUNET_TESTBED_operation_done() is ca
lled | | * operation is cancelled or GNUNET_TESTBED_operation_done() is ca
lled | |
| * @param cb the callback to call when the peer has been created | | * @param cb the callback to call when the peer has been created | |
| * @param cls the closure to the above callback | | * @param cls the closure to the above callback | |
| * @return the operation handle | | * @return the operation handle | |
| */ | | */ | |
| struct GNUNET_TESTBED_Operation * | | struct GNUNET_TESTBED_Operation * | |
| | | | |
| skipping to change at line 725 | | skipping to change at line 673 | |
| * | | * | |
| * @param cls the closure from GNUNET_TESTBED_peer_start/stop() | | * @param cls the closure from GNUNET_TESTBED_peer_start/stop() | |
| * @param emsg NULL on success; otherwise an error description | | * @param emsg NULL on success; otherwise an error description | |
| */ | | */ | |
| typedef void (*GNUNET_TESTBED_PeerChurnCallback) (void *cls, | | typedef void (*GNUNET_TESTBED_PeerChurnCallback) (void *cls, | |
| const char *emsg); | | const char *emsg); | |
| | | | |
| /** | | /** | |
| * Start the given peer. | | * Start the given peer. | |
| * | | * | |
|
| * @param op_cls the closure for this operation; will be set in | | * @param op_cls the closure for this operation; will be set in the event | |
| * event->details.operation_finished.op_cls when this operation fa | | * information | |
| ils. | | | |
| * @param peer peer to start | | * @param peer peer to start | |
| * @param pcc function to call upon completion | | * @param pcc function to call upon completion | |
| * @param pcc_cls closure for 'pcc' | | * @param pcc_cls closure for 'pcc' | |
| * @return handle to the operation | | * @return handle to the operation | |
| */ | | */ | |
| struct GNUNET_TESTBED_Operation * | | struct GNUNET_TESTBED_Operation * | |
| GNUNET_TESTBED_peer_start (void *op_cls, | | GNUNET_TESTBED_peer_start (void *op_cls, | |
| struct GNUNET_TESTBED_Peer *peer, | | struct GNUNET_TESTBED_Peer *peer, | |
| GNUNET_TESTBED_PeerChurnCallback pcc, | | GNUNET_TESTBED_PeerChurnCallback pcc, | |
| void *pcc_cls); | | void *pcc_cls); | |
| | | | |
| /** | | /** | |
| * Stop the given peer. The handle remains valid (use | | * Stop the given peer. The handle remains valid (use | |
|
| * "GNUNET_TESTBED_peer_destroy" to fully clean up the | | * #GNUNET_TESTBED_peer_destroy to fully clean up the | |
| * state of the peer). | | * state of the peer). | |
| * | | * | |
|
| | | * @param op_cls the closure for this operation; will be set in the event | |
| | | * information | |
| * @param peer peer to stop | | * @param peer peer to stop | |
| * @param pcc function to call upon completion | | * @param pcc function to call upon completion | |
| * @param pcc_cls closure for 'pcc' | | * @param pcc_cls closure for 'pcc' | |
| * @return handle to the operation | | * @return handle to the operation | |
| */ | | */ | |
| struct GNUNET_TESTBED_Operation * | | struct GNUNET_TESTBED_Operation * | |
|
| GNUNET_TESTBED_peer_stop (struct GNUNET_TESTBED_Peer *peer, | | GNUNET_TESTBED_peer_stop (void *op_cls, | |
| | | struct GNUNET_TESTBED_Peer *peer, | |
| GNUNET_TESTBED_PeerChurnCallback pcc, | | GNUNET_TESTBED_PeerChurnCallback pcc, | |
| void *pcc_cls); | | void *pcc_cls); | |
| | | | |
| /** | | /** | |
| * Data returned from GNUNET_TESTBED_peer_get_information | | * Data returned from GNUNET_TESTBED_peer_get_information | |
| */ | | */ | |
| struct GNUNET_TESTBED_PeerInformation | | struct GNUNET_TESTBED_PeerInformation | |
| { | | { | |
| /** | | /** | |
| * Peer information type; captures which of the types | | * Peer information type; captures which of the types | |
| | | | |
| skipping to change at line 783 | | skipping to change at line 734 | |
| | | | |
| /** | | /** | |
| * The identity of the peer | | * The identity of the peer | |
| */ | | */ | |
| struct GNUNET_PeerIdentity *id; | | struct GNUNET_PeerIdentity *id; | |
| } result; | | } result; | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Callback to be called when the requested peer information is available | | * Callback to be called when the requested peer information is available | |
|
| | | * The peer information in the callback is valid until the operation 'op' i
s canceled. | |
| * | | * | |
| * @param cb_cls the closure from GNUNET_TETSBED_peer_get_information() | | * @param cb_cls the closure from GNUNET_TETSBED_peer_get_information() | |
| * @param op the operation this callback corresponds to | | * @param op the operation this callback corresponds to | |
| * @param pinfo the result; will be NULL if the operation has failed | | * @param pinfo the result; will be NULL if the operation has failed | |
| * @param emsg error message if the operation has failed; will be NULL if t
he | | * @param emsg error message if the operation has failed; will be NULL if t
he | |
| * operation is successfull | | * operation is successfull | |
| */ | | */ | |
| typedef void (*GNUNET_TESTBED_PeerInfoCallback) (void *cb_cls, | | typedef void (*GNUNET_TESTBED_PeerInfoCallback) (void *cb_cls, | |
| struct GNUNET_TESTBED_Oper
ation | | struct GNUNET_TESTBED_Oper
ation | |
| *op, | | *op, | |
| const struct | | const struct | |
| GNUNET_TESTBED_PeerInforma
tion | | GNUNET_TESTBED_PeerInforma
tion | |
| *pinfo, | | *pinfo, | |
| const char *emsg); | | const char *emsg); | |
| | | | |
| /** | | /** | |
| * Request information about a peer. The controller callback will not be ca
lled | | * Request information about a peer. The controller callback will not be ca
lled | |
|
| * with event type GNUNET_TESTBED_ET_OPERATION_FINISHED when result for thi
s | | * with event type #GNUNET_TESTBED_ET_OPERATION_FINISHED when result for th
is | |
| * operation is available. Instead, the GNUNET_TESTBED_PeerInfoCallback() w
ill | | * operation is available. Instead, the GNUNET_TESTBED_PeerInfoCallback() w
ill | |
| * be called. | | * be called. | |
|
| | | * The peer information in the callback is valid until the operation is can
celed. | |
| * | | * | |
| * @param peer peer to request information about | | * @param peer peer to request information about | |
| * @param pit desired information | | * @param pit desired information | |
| * @param cb the convenience callback to be called when results for this | | * @param cb the convenience callback to be called when results for this | |
| * operation are available | | * operation are available | |
|
| * @param cb_cls the closure for the above callback | | * @param cb_cls the closure for @a cb | |
| * @return handle to the operation | | * @return handle to the operation | |
| */ | | */ | |
| struct GNUNET_TESTBED_Operation * | | struct GNUNET_TESTBED_Operation * | |
| GNUNET_TESTBED_peer_get_information (struct GNUNET_TESTBED_Peer *peer, | | GNUNET_TESTBED_peer_get_information (struct GNUNET_TESTBED_Peer *peer, | |
| enum GNUNET_TESTBED_PeerInformationTyp
e | | enum GNUNET_TESTBED_PeerInformationTyp
e | |
| pit, | | pit, | |
| GNUNET_TESTBED_PeerInfoCallback cb, | | GNUNET_TESTBED_PeerInfoCallback cb, | |
| void *cb_cls); | | void *cb_cls); | |
| | | | |
| /** | | /** | |
|
| * Change peer configuration. Must only be called while the | | * Change @a peer configuration. Ports and paths cannot be changed this | |
| * peer is stopped. Ports and paths cannot be changed this | | | |
| * way. | | * way. | |
| * | | * | |
| * @param peer peer to change configuration for | | * @param peer peer to change configuration for | |
|
| * @param cfg new configuration (differences to existing | | * @param cfg new configuration | |
| * configuration only) | | | |
| * @return handle to the operation | | * @return handle to the operation | |
| */ | | */ | |
| struct GNUNET_TESTBED_Operation * | | struct GNUNET_TESTBED_Operation * | |
| GNUNET_TESTBED_peer_update_configuration (struct GNUNET_TESTBED_Peer *peer, | | GNUNET_TESTBED_peer_update_configuration (struct GNUNET_TESTBED_Peer *peer, | |
| const struct GNUNET_CONFIGURATION
_Handle *cfg); | | const struct GNUNET_CONFIGURATION
_Handle *cfg); | |
| | | | |
| /** | | /** | |
| * Destroy the given peer; the peer should have been | | * Destroy the given peer; the peer should have been | |
| * stopped first (if it was started). | | * stopped first (if it was started). | |
| * | | * | |
| * @param peer peer to stop | | * @param peer peer to stop | |
| * @return handle to the operation | | * @return handle to the operation | |
| */ | | */ | |
| struct GNUNET_TESTBED_Operation * | | struct GNUNET_TESTBED_Operation * | |
| GNUNET_TESTBED_peer_destroy (struct GNUNET_TESTBED_Peer *peer); | | GNUNET_TESTBED_peer_destroy (struct GNUNET_TESTBED_Peer *peer); | |
| | | | |
| /** | | /** | |
|
| | | * Start or stop given service at a peer. This should not be called to | |
| | | * start/stop the peer's ARM service. Use GNUNET_TESTBED_peer_start(), | |
| | | * GNUNET_TESTBED_peer_stop() for starting/stopping peer's ARM service. Su | |
| | | ccess | |
| | | * or failure of the generated operation is signalled through the controlle | |
| | | r | |
| | | * event callback and/or operation completion callback. | |
| | | * | |
| | | * @param op_cls the closure for the operation | |
| | | * @param peer the peer whose service is to be started/stopped | |
| | | * @param service_name the name of the service | |
| | | * @param cb the operation completion callback | |
| | | * @param cb_cls the closure for @a cb | |
| | | * @param start 1 to start the service; 0 to stop the service | |
| | | * @return an operation handle; NULL upon error (peer not running) | |
| | | */ | |
| | | struct GNUNET_TESTBED_Operation * | |
| | | GNUNET_TESTBED_peer_manage_service (void *op_cls, | |
| | | struct GNUNET_TESTBED_Peer *peer, | |
| | | const char *service_name, | |
| | | GNUNET_TESTBED_OperationCompletionCallb | |
| | | ack cb, | |
| | | void *cb_cls, | |
| | | unsigned int start); | |
| | | | |
| | | /** | |
| | | * Stops and destroys all peers. Is equivalent of calling | |
| | | * GNUNET_TESTBED_peer_stop() and GNUNET_TESTBED_peer_destroy() on all peer | |
| | | s, | |
| | | * except that the peer stop event and operation finished event correspondi | |
| | | ng to | |
| | | * the respective functions are not generated. This function should be cal | |
| | | led | |
| | | * when there are no other pending operations. If there are pending operat | |
| | | ions, | |
| | | * it will return NULL | |
| | | * | |
| | | * @param c the controller to send this message to | |
| | | * @param op_cls closure for the operation | |
| | | * @param cb the callback to call when all peers are stopped and destroyed | |
| | | * @param cb_cls the closure for the callback | |
| | | * @return operation handle on success; NULL if any pending operations are | |
| | | * present | |
| | | */ | |
| | | struct GNUNET_TESTBED_Operation * | |
| | | GNUNET_TESTBED_shutdown_peers (struct GNUNET_TESTBED_Controller *c, | |
| | | void *op_cls, | |
| | | GNUNET_TESTBED_OperationCompletionCallback c | |
| | | b, | |
| | | void *cb_cls); | |
| | | | |
| | | /** | |
| * Options for peer connections. | | * Options for peer connections. | |
| */ | | */ | |
| enum GNUNET_TESTBED_ConnectOption | | enum GNUNET_TESTBED_ConnectOption | |
| { | | { | |
| /** | | /** | |
| * No option (not valid as an argument). | | * No option (not valid as an argument). | |
| */ | | */ | |
| GNUNET_TESTBED_CO_NONE = 0, | | GNUNET_TESTBED_CO_NONE = 0, | |
| | | | |
| /** | | /** | |
| * Allow or disallow a connection between the specified peers. | | * Allow or disallow a connection between the specified peers. | |
|
| * Followed by GNUNET_NO (int) if a connection is disallowed | | * Followed by #GNUNET_NO (int) if a connection is disallowed | |
| * or GNUNET_YES if a connection is allowed. Note that the | | * or #GNUNET_YES if a connection is allowed. Note that the | |
| * default (all connections allowed or disallowed) is | | * default (all connections allowed or disallowed) is | |
| * specified in the configuration of the controller. | | * specified in the configuration of the controller. | |
| */ | | */ | |
| GNUNET_TESTBED_CO_ALLOW = 1, | | GNUNET_TESTBED_CO_ALLOW = 1, | |
| | | | |
| /** | | /** | |
| * FIXME: add (and implement) options to limit connection to | | * FIXME: add (and implement) options to limit connection to | |
| * particular transports, force simulation of particular latencies | | * particular transports, force simulation of particular latencies | |
| * or message loss rates, or set bandwidth limitations. | | * or message loss rates, or set bandwidth limitations. | |
| */ | | */ | |
| | | | |
| skipping to change at line 954 | | skipping to change at line 949 | |
| GNUNET_TESTBED_TOPOLOGY_ERDOS_RENYI, | | GNUNET_TESTBED_TOPOLOGY_ERDOS_RENYI, | |
| | | | |
| /** | | /** | |
| * Certain percentage of peers are unable to communicate directly | | * Certain percentage of peers are unable to communicate directly | |
| * replicating NAT conditions. Followed by the fraction of | | * replicating NAT conditions. Followed by the fraction of | |
| * NAT'ed peers (float). | | * NAT'ed peers (float). | |
| */ | | */ | |
| GNUNET_TESTBED_TOPOLOGY_INTERNAT, | | GNUNET_TESTBED_TOPOLOGY_INTERNAT, | |
| | | | |
| /** | | /** | |
|
| * Scale free topology. No options. | | * Scale free topology. It is generated according to the method describe | |
| | | d in | |
| | | * "Emergence of Scaling in Random Networks." Science 286, 509-512, 1999. | |
| | | * | |
| | | * This options takes two arguments in the following order: an uint16_t t | |
| | | o | |
| | | * determine the maximum number of edges a peer is permitted to have whil | |
| | | e | |
| | | * generating scale free topology, a good value for this argument is 70; | |
| | | and | |
| | | * an uint8_t to determine the number of edges to be established when add | |
| | | ing a | |
| | | * new node to the scale free network, a good value for this argument is | |
| | | 4. | |
| */ | | */ | |
| GNUNET_TESTBED_TOPOLOGY_SCALE_FREE, | | GNUNET_TESTBED_TOPOLOGY_SCALE_FREE, | |
| | | | |
| /** | | /** | |
| * Straight line topology. No options. | | * Straight line topology. No options. | |
| */ | | */ | |
| GNUNET_TESTBED_TOPOLOGY_LINE, | | GNUNET_TESTBED_TOPOLOGY_LINE, | |
| | | | |
| /** | | /** | |
| * Read a topology from a given file. Followed by the name of the file (
const char *). | | * Read a topology from a given file. Followed by the name of the file (
const char *). | |
| | | | |
| skipping to change at line 984 | | skipping to change at line 986 | |
| * The options should always end with this | | * The options should always end with this | |
| */ | | */ | |
| GNUNET_TESTBED_TOPOLOGY_OPTION_END, | | GNUNET_TESTBED_TOPOLOGY_OPTION_END, | |
| | | | |
| /* The following are not topologies but influence how the topology has to
be | | /* The following are not topologies but influence how the topology has to
be | |
| setup. These options should follow the topology specific options (if | | setup. These options should follow the topology specific options (if | |
| required by the chosen topology). Note that these should be given befo
re | | required by the chosen topology). Note that these should be given befo
re | |
| GNUNET_TESTBED_TOPOLOGY_OPTION_END */ | | GNUNET_TESTBED_TOPOLOGY_OPTION_END */ | |
| | | | |
| /** | | /** | |
|
| * Disable automatic retrying for failed overlay connections. The default | | * How many times should the failed overlay connect operations be retried | |
| is | | * before giving up. The default if this option is not specified is to r | |
| * to always retry failed overlay connections. This parameter takes no op | | etry | |
| tions. | | * 3 times. This option takes and unsigned integer as a parameter. Use | |
| | | this | |
| | | * option with parameter 0 to disable retrying of failed overlay connect | |
| | | * operations. | |
| */ | | */ | |
|
| GNUNET_TESTBED_TOPOLOGY_DISABLE_AUTO_RETRY | | GNUNET_TESTBED_TOPOLOGY_RETRY_CNT | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Configure overall network topology to have a particular shape. | | * Configure overall network topology to have a particular shape. | |
| * | | * | |
| * @param op_cls closure argument to give with the operation event | | * @param op_cls closure argument to give with the operation event | |
| * @param num_peers number of peers in 'peers' | | * @param num_peers number of peers in 'peers' | |
| * @param peers array of 'num_peers' with the peers to configure | | * @param peers array of 'num_peers' with the peers to configure | |
| * @param topo desired underlay topology to use | | * @param topo desired underlay topology to use | |
| * @param ap topology-specific options | | * @param ap topology-specific options | |
| | | | |
| skipping to change at line 1028 | | skipping to change at line 1033 | |
| */ | | */ | |
| struct GNUNET_TESTBED_Operation * | | struct GNUNET_TESTBED_Operation * | |
| GNUNET_TESTBED_underlay_configure_topology (void *op_cls, | | GNUNET_TESTBED_underlay_configure_topology (void *op_cls, | |
| unsigned int num_peers, | | unsigned int num_peers, | |
| struct GNUNET_TESTBED_Peer **pe
ers, | | struct GNUNET_TESTBED_Peer **pe
ers, | |
| enum GNUNET_TESTBED_TopologyOpt
ion topo, | | enum GNUNET_TESTBED_TopologyOpt
ion topo, | |
| ...); | | ...); | |
| | | | |
| /** | | /** | |
| * Both peers must have been started before calling this function. | | * Both peers must have been started before calling this function. | |
|
| * This function then obtains a HELLO from 'p1', gives it to 'p2' | | * This function then obtains a HELLO from @a p1, gives it to @a p2 | |
| * and asks 'p2' to connect to 'p1'. | | * and asks @a p2 to connect to @a p1. | |
| * | | * | |
| * @param op_cls closure argument to give with the operation event | | * @param op_cls closure argument to give with the operation event | |
| * @param cb the callback to call when this operation has finished | | * @param cb the callback to call when this operation has finished | |
|
| * @param cb_cls the closure for the above callback | | * @param cb_cls the closure for @a cb | |
| * @param p1 first peer | | * @param p1 first peer | |
| * @param p2 second peer | | * @param p2 second peer | |
| * @return handle to the operation, NULL if connecting these two | | * @return handle to the operation, NULL if connecting these two | |
| * peers is fundamentally not possible at this time (peers | | * peers is fundamentally not possible at this time (peers | |
| * not running or underlay disallows) | | * not running or underlay disallows) | |
| */ | | */ | |
| struct GNUNET_TESTBED_Operation * | | struct GNUNET_TESTBED_Operation * | |
| GNUNET_TESTBED_overlay_connect (void *op_cls, | | GNUNET_TESTBED_overlay_connect (void *op_cls, | |
| GNUNET_TESTBED_OperationCompletionCallback
cb, | | GNUNET_TESTBED_OperationCompletionCallback
cb, | |
| void *cb_cls, | | void *cb_cls, | |
| struct GNUNET_TESTBED_Peer *p1, | | struct GNUNET_TESTBED_Peer *p1, | |
| struct GNUNET_TESTBED_Peer *p2); | | struct GNUNET_TESTBED_Peer *p2); | |
| | | | |
| /** | | /** | |
|
| | | * Callbacks of this type are called when topology configuration is complet | |
| | | ed | |
| | | * | |
| | | * @param cls the operation closure given to | |
| | | * GNUNET_TESTBED_overlay_configure_topology_va() and | |
| | | * GNUNET_TESTBED_overlay_configure() calls | |
| | | * @param nsuccess the number of successful overlay connects | |
| | | * @param nfailures the number of overlay connects which failed | |
| | | */ | |
| | | typedef void (*GNUNET_TESTBED_TopologyCompletionCallback) (void *cls, | |
| | | unsigned int nsuc | |
| | | cess, | |
| | | unsigned int nfai | |
| | | lures); | |
| | | | |
| | | /** | |
| * All peers must have been started before calling this function. | | * All peers must have been started before calling this function. | |
| * This function then connects the given peers in the P2P overlay | | * This function then connects the given peers in the P2P overlay | |
| * using the given topology. | | * using the given topology. | |
| * | | * | |
|
| * @param op_cls closure argument to give with the operation event | | * @param op_cls closure argument to give with the peer connect operation e | |
| | | vents | |
| | | * generated through this function | |
| * @param num_peers number of peers in 'peers' | | * @param num_peers number of peers in 'peers' | |
| * @param peers array of 'num_peers' with the peers to configure | | * @param peers array of 'num_peers' with the peers to configure | |
| * @param max_connections the maximums number of overlay connections that w
ill | | * @param max_connections the maximums number of overlay connections that w
ill | |
| * be made to achieve the given topology | | * be made to achieve the given topology | |
|
| | | * @param comp_cb the completion callback to call when the topology generat | |
| | | ion | |
| | | * is completed | |
| | | * @param comp_cb_cls closure for the @a comp_cb | |
| * @param topo desired underlay topology to use | | * @param topo desired underlay topology to use | |
| * @param va topology-specific options | | * @param va topology-specific options | |
| * @return handle to the operation, NULL if connecting these | | * @return handle to the operation, NULL if connecting these | |
| * peers is fundamentally not possible at this time (peers | | * peers is fundamentally not possible at this time (peers | |
| * not running or underlay disallows) or if num_peers is less than
2 | | * not running or underlay disallows) or if num_peers is less than
2 | |
| */ | | */ | |
| struct GNUNET_TESTBED_Operation * | | struct GNUNET_TESTBED_Operation * | |
| GNUNET_TESTBED_overlay_configure_topology_va (void *op_cls, | | GNUNET_TESTBED_overlay_configure_topology_va (void *op_cls, | |
| unsigned int num_peers, | | unsigned int num_peers, | |
| struct GNUNET_TESTBED_Peer **
peers, | | struct GNUNET_TESTBED_Peer **
peers, | |
| unsigned int *max_connections
, | | unsigned int *max_connections
, | |
|
| | | GNUNET_TESTBED_TopologyComple | |
| | | tionCallback | |
| | | comp_cb, | |
| | | void *comp_cb_cls, | |
| enum GNUNET_TESTBED_TopologyO
ption topo, | | enum GNUNET_TESTBED_TopologyO
ption topo, | |
| va_list va); | | va_list va); | |
| | | | |
| /** | | /** | |
| * All peers must have been started before calling this function. | | * All peers must have been started before calling this function. | |
| * This function then connects the given peers in the P2P overlay | | * This function then connects the given peers in the P2P overlay | |
| * using the given topology. | | * using the given topology. | |
| * | | * | |
|
| * @param op_cls closure argument to give with the operation event | | * @param op_cls closure argument to give with the peer connect operation e | |
| | | vents | |
| | | * generated through this function | |
| * @param num_peers number of peers in 'peers' | | * @param num_peers number of peers in 'peers' | |
| * @param peers array of 'num_peers' with the peers to configure | | * @param peers array of 'num_peers' with the peers to configure | |
| * @param max_connections the maximums number of overlay connections that w
ill | | * @param max_connections the maximums number of overlay connections that w
ill | |
| * be made to achieve the given topology | | * be made to achieve the given topology | |
|
| | | * @param comp_cb the completion callback to call when the topology generat | |
| | | ion | |
| | | * is completed | |
| | | * @param comp_cb_cls closure for the above completion callback | |
| * @param topo desired underlay topology to use | | * @param topo desired underlay topology to use | |
| * @param ... topology-specific options | | * @param ... topology-specific options | |
| * @return handle to the operation, NULL if connecting these | | * @return handle to the operation, NULL if connecting these | |
| * peers is fundamentally not possible at this time (peers | | * peers is fundamentally not possible at this time (peers | |
| * not running or underlay disallows) or if num_peers is less than
2 | | * not running or underlay disallows) or if num_peers is less than
2 | |
| */ | | */ | |
| struct GNUNET_TESTBED_Operation * | | struct GNUNET_TESTBED_Operation * | |
| GNUNET_TESTBED_overlay_configure_topology (void *op_cls, | | GNUNET_TESTBED_overlay_configure_topology (void *op_cls, | |
| unsigned int num_peers, | | unsigned int num_peers, | |
| struct GNUNET_TESTBED_Peer **pee
rs, | | struct GNUNET_TESTBED_Peer **pee
rs, | |
| unsigned int *max_connections, | | unsigned int *max_connections, | |
|
| | | GNUNET_TESTBED_TopologyCompletio | |
| | | nCallback | |
| | | comp_cb, | |
| | | void *comp_cb_cls, | |
| enum GNUNET_TESTBED_TopologyOpti
on topo, | | enum GNUNET_TESTBED_TopologyOpti
on topo, | |
| ...); | | ...); | |
| | | | |
| /** | | /** | |
| * Ask the testbed controller to write the current overlay topology to | | * Ask the testbed controller to write the current overlay topology to | |
| * a file. Naturally, the file will only contain a snapshot as the | | * a file. Naturally, the file will only contain a snapshot as the | |
| * topology may evolve all the time. | | * topology may evolve all the time. | |
| * FIXME: needs continuation!? | | * FIXME: needs continuation!? | |
| * | | * | |
| * @param controller overlay controller to inspect | | * @param controller overlay controller to inspect | |
| | | | |
| skipping to change at line 1155 | | skipping to change at line 1187 | |
| void | | void | |
| *ca_result
, | | *ca_result
, | |
| const char | | const char | |
| *emsg ); | | *emsg ); | |
| | | | |
| /** | | /** | |
| * Connect to a service offered by the given peer. Will ensure that | | * Connect to a service offered by the given peer. Will ensure that | |
| * the request is queued to not overwhelm our ability to create and | | * the request is queued to not overwhelm our ability to create and | |
| * maintain connections with other systems. The actual service | | * maintain connections with other systems. The actual service | |
| * handle is then returned via the 'op_result' member in the event | | * handle is then returned via the 'op_result' member in the event | |
|
| * callback. The 'ca' callback is used to create the connection | | * callback. The @a ca callback is used to create the connection | |
| * when the time is right; the 'da' callback will be used to | | * when the time is right; the @a da callback will be used to | |
| * destroy the connection (upon 'GNUNET_TESTBED_operation_done'). | | * destroy the connection (upon #GNUNET_TESTBED_operation_done). | |
| * 'GNUNET_TESTBED_operation_cancel' can be used to abort this | | * #GNUNET_TESTBED_operation_done can be used to abort this | |
| * operation until the event callback has been called. | | * operation until the event callback has been called. | |
| * | | * | |
|
| * @param op_cls closure to pass in operation event | | * @param op_cls closure to pass in operation event // FIXME: didn't we say
we'd no longer use the global callback for these? -CG | |
| * @param peer peer that runs the service | | * @param peer peer that runs the service | |
| * @param service_name name of the service to connect to | | * @param service_name name of the service to connect to | |
|
| * @param cb the callback to call when this operation finishes | | * @param cb the callback to call when this operation is ready (that is, | |
| * @param cb_cls closure for the above callback | | * right after the connect adapter returns) | |
| | | * @param cb_cls closure for @a cb | |
| * @param ca helper function to establish the connection | | * @param ca helper function to establish the connection | |
| * @param da helper function to close the connection | | * @param da helper function to close the connection | |
|
| * @param cada_cls closure for ca and da | | * @param cada_cls closure for @a ca and @a da | |
| * @return handle for the operation | | * @return handle for the operation | |
| */ | | */ | |
| struct GNUNET_TESTBED_Operation * | | struct GNUNET_TESTBED_Operation * | |
| GNUNET_TESTBED_service_connect (void *op_cls, | | GNUNET_TESTBED_service_connect (void *op_cls, | |
| struct GNUNET_TESTBED_Peer *peer, | | struct GNUNET_TESTBED_Peer *peer, | |
| const char *service_name, | | const char *service_name, | |
| GNUNET_TESTBED_ServiceConnectCompletionCall
back cb, | | GNUNET_TESTBED_ServiceConnectCompletionCall
back cb, | |
| void *cb_cls, | | void *cb_cls, | |
| GNUNET_TESTBED_ConnectAdapter ca, | | GNUNET_TESTBED_ConnectAdapter ca, | |
| GNUNET_TESTBED_DisconnectAdapter da, | | GNUNET_TESTBED_DisconnectAdapter da, | |
| | | | |
| skipping to change at line 1229 | | skipping to change at line 1262 | |
| const char *name, | | const char *name, | |
| uint64_t value, | | uint64_t value, | |
| int is_persistent); | | int is_persistent); | |
| | | | |
| /** | | /** | |
| * Convenience method that iterates over all (running) peers | | * Convenience method that iterates over all (running) peers | |
| * and retrieves all statistics from each peer. | | * and retrieves all statistics from each peer. | |
| * | | * | |
| * @param num_peers number of peers to iterate over | | * @param num_peers number of peers to iterate over | |
| * @param peers array of peers to iterate over | | * @param peers array of peers to iterate over | |
|
| | | * @param subsystem limit to the specified subsystem, NULL for all subsyste | |
| | | ms | |
| | | * @param name name of the statistic value, NULL for all values | |
| * @param proc processing function for each statistic retrieved | | * @param proc processing function for each statistic retrieved | |
|
| * @param cont continuation to call once call is completed(?) | | * @param cont continuation to call once call is completed. The completion | |
| | | of this | |
| | | * operation is *ONLY* signalled through this callback -- no | |
| | | * GNUNET_TESTBED_ET_OPERATION_FINISHED is generated | |
| * @param cls closure to pass to proc and cont | | * @param cls closure to pass to proc and cont | |
| * @return operation handle to cancel the operation | | * @return operation handle to cancel the operation | |
| */ | | */ | |
| struct GNUNET_TESTBED_Operation * | | struct GNUNET_TESTBED_Operation * | |
| GNUNET_TESTBED_get_statistics (unsigned int num_peers, | | GNUNET_TESTBED_get_statistics (unsigned int num_peers, | |
| struct GNUNET_TESTBED_Peer **peers, | | struct GNUNET_TESTBED_Peer **peers, | |
|
| | | const char *subsystem, const char *name, | |
| GNUNET_TESTBED_StatisticsIterator proc, | | GNUNET_TESTBED_StatisticsIterator proc, | |
| GNUNET_TESTBED_OperationCompletionCallback c
ont, | | GNUNET_TESTBED_OperationCompletionCallback c
ont, | |
| void *cls); | | void *cls); | |
| | | | |
| /** | | /** | |
|
| | | * Handle for testbed run helper funtions | |
| | | */ | |
| | | struct GNUNET_TESTBED_RunHandle; | |
| | | | |
| | | /** | |
| * Signature of a main function for a testcase. | | * Signature of a main function for a testcase. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
|
| | | * @param h the run handle | |
| * @param num_peers number of peers in 'peers' | | * @param num_peers number of peers in 'peers' | |
|
| * @param peers handle to peers run in the testbed | | * @param peers handle to peers run in the testbed. NULL upon timeout (see | |
| | | * GNUNET_TESTBED_test_run()). | |
| | | * @param links_succeeded the number of overlay link connection attempts th | |
| | | at | |
| | | * succeeded | |
| | | * @param links_failed the number of overlay link connection attempts that | |
| | | * failed | |
| | | * @see GNUNET_TESTBED_test_run() | |
| */ | | */ | |
| typedef void (*GNUNET_TESTBED_TestMaster)(void *cls, | | typedef void (*GNUNET_TESTBED_TestMaster)(void *cls, | |
|
| | | struct GNUNET_TESTBED_RunHandle *
h, | |
| unsigned int num_peers, | | unsigned int num_peers, | |
|
| struct GNUNET_TESTBED_Peer **peer | | struct GNUNET_TESTBED_Peer **peer | |
| s); | | s, | |
| | | unsigned int links_succeeded, | |
| | | unsigned int links_failed); | |
| | | | |
| /** | | /** | |
| * Convenience method for running a testbed with | | * Convenience method for running a testbed with | |
| * a single call. Underlay and overlay topology | | * a single call. Underlay and overlay topology | |
| * are configured using the "UNDERLAY" and "OVERLAY" | | * are configured using the "UNDERLAY" and "OVERLAY" | |
| * options in the "[testbed]" section of the configuration\ | | * options in the "[testbed]" section of the configuration\ | |
| * (with possible options given in "UNDERLAY_XXX" and/or | | * (with possible options given in "UNDERLAY_XXX" and/or | |
| * "OVERLAY_XXX"). | | * "OVERLAY_XXX"). | |
| * | | * | |
|
| | | * The test_master callback will be called once the testbed setup is finish | |
| | | ed or | |
| | | * upon a timeout. This timeout is given through the configuration file by | |
| | | * setting the option "SETUP_TIMEOUT" in "[TESTBED]" section. | |
| | | * | |
| * The testbed is to be terminated using a call to | | * The testbed is to be terminated using a call to | |
| * "GNUNET_SCHEDULER_shutdown". | | * "GNUNET_SCHEDULER_shutdown". | |
| * | | * | |
| * @param host_filename name of the file with the 'hosts', NULL | | * @param host_filename name of the file with the 'hosts', NULL | |
| * to run everything on 'localhost' | | * to run everything on 'localhost' | |
| * @param cfg configuration to use (for testbed, controller and peers) | | * @param cfg configuration to use (for testbed, controller and peers) | |
| * @param num_peers number of peers to start; FIXME: maybe put that ALSO in
to | | * @param num_peers number of peers to start; FIXME: maybe put that ALSO in
to | |
| * cfg?; should be greater than 0 | | * cfg?; should be greater than 0 | |
| * @param event_mask bit mask with set of events to call 'cc' for; | | * @param event_mask bit mask with set of events to call 'cc' for; | |
| * or-ed values of "1LL" shifted by the | | * or-ed values of "1LL" shifted by the | |
| * respective 'enum GNUNET_TESTBED_EventType' | | * respective 'enum GNUNET_TESTBED_EventType' | |
| * (i.e. "(1LL << GNUNET_TESTBED_ET_CONNECT) || ...") | | * (i.e. "(1LL << GNUNET_TESTBED_ET_CONNECT) || ...") | |
| * @param cc controller callback to invoke on events; This callback is call
ed | | * @param cc controller callback to invoke on events; This callback is call
ed | |
| * for all peer start events even if GNUNET_TESTBED_ET_PEER_START is
n't | | * for all peer start events even if GNUNET_TESTBED_ET_PEER_START is
n't | |
| * set in the event_mask as this is the only way get access to the | | * set in the event_mask as this is the only way get access to the | |
| * handle of each peer | | * handle of each peer | |
| * @param cc_cls closure for cc | | * @param cc_cls closure for cc | |
|
| * @param test_master this callback will be called once the test is ready | | * @param test_master this callback will be called once the test is ready o | |
| | | r | |
| | | * upon timeout | |
| * @param test_master_cls closure for 'test_master'. | | * @param test_master_cls closure for 'test_master'. | |
| */ | | */ | |
| void | | void | |
| GNUNET_TESTBED_run (const char *host_filename, | | GNUNET_TESTBED_run (const char *host_filename, | |
| const struct GNUNET_CONFIGURATION_Handle *cfg, | | const struct GNUNET_CONFIGURATION_Handle *cfg, | |
| unsigned int num_peers, | | unsigned int num_peers, | |
| uint64_t event_mask, | | uint64_t event_mask, | |
| GNUNET_TESTBED_ControllerCallback cc, | | GNUNET_TESTBED_ControllerCallback cc, | |
| void *cc_cls, | | void *cc_cls, | |
| GNUNET_TESTBED_TestMaster test_master, | | GNUNET_TESTBED_TestMaster test_master, | |
| void *test_master_cls); | | void *test_master_cls); | |
| | | | |
| /** | | /** | |
| * Convenience method for running a "simple" test on the local system | | * Convenience method for running a "simple" test on the local system | |
| * with a single call from 'main'. Underlay and overlay topology are | | * with a single call from 'main'. Underlay and overlay topology are | |
| * configured using the "UNDERLAY" and "OVERLAY" options in the | | * configured using the "UNDERLAY" and "OVERLAY" options in the | |
|
| * "[testbed]" section of the configuration (with possible options | | * "[TESTBED]" section of the configuration (with possible options | |
| * given in "UNDERLAY_XXX" and/or "OVERLAY_XXX"). | | * given in "UNDERLAY_XXX" and/or "OVERLAY_XXX"). | |
| * | | * | |
|
| | | * The test_master callback will be called once the testbed setup is finish | |
| | | ed or | |
| | | * upon a timeout. This timeout is given through the configuration file by | |
| | | * setting the option "SETUP_TIMEOUT" in "[TESTBED]" section. | |
| | | * | |
| * The test is to be terminated using a call to | | * The test is to be terminated using a call to | |
| * "GNUNET_SCHEDULER_shutdown". If starting the test fails, | | * "GNUNET_SCHEDULER_shutdown". If starting the test fails, | |
| * the program is stopped without 'master' ever being run. | | * the program is stopped without 'master' ever being run. | |
| * | | * | |
| * NOTE: this function should be called from 'main', NOT from | | * NOTE: this function should be called from 'main', NOT from | |
| * within a GNUNET_SCHEDULER-loop. This function will initialze | | * within a GNUNET_SCHEDULER-loop. This function will initialze | |
| * the scheduler loop, the testbed and then pass control to | | * the scheduler loop, the testbed and then pass control to | |
| * 'master'. | | * 'master'. | |
| * | | * | |
| * @param testname name of the testcase (to configure logging, etc.) | | * @param testname name of the testcase (to configure logging, etc.) | |
| | | | |
| skipping to change at line 1318 | | skipping to change at line 1380 | |
| * (for testbed, controller and peers) | | * (for testbed, controller and peers) | |
| * @param num_peers number of peers to start; should be greter than 0 | | * @param num_peers number of peers to start; should be greter than 0 | |
| * @param event_mask bit mask with set of events to call 'cc' for; | | * @param event_mask bit mask with set of events to call 'cc' for; | |
| * or-ed values of "1LL" shifted by the | | * or-ed values of "1LL" shifted by the | |
| * respective 'enum GNUNET_TESTBED_EventType' | | * respective 'enum GNUNET_TESTBED_EventType' | |
| * (i.e. "(1LL << GNUNET_TESTBED_ET_CONNECT) || ...") | | * (i.e. "(1LL << GNUNET_TESTBED_ET_CONNECT) || ...") | |
| * @param cc controller callback to invoke on events; This callback is call
ed | | * @param cc controller callback to invoke on events; This callback is call
ed | |
| * for all peer start events even if GNUNET_TESTBED_ET_PEER_START is
n't | | * for all peer start events even if GNUNET_TESTBED_ET_PEER_START is
n't | |
| * set in the event_mask as this is the only way get access to the | | * set in the event_mask as this is the only way get access to the | |
| * handle of each peer | | * handle of each peer | |
|
| * @param cc_cls closure for cc | | * @param cc_cls closure for @a cc | |
| * @param test_master this callback will be called once the test is ready | | * @param test_master this callback will be called once the test is ready o | |
| * @param test_master_cls closure for 'test_master'. | | r | |
| * @param GNUNET_SYSERR on error, GNUNET_OK on success | | * upon timeout | |
| | | * @param test_master_cls closure for @a test_master. | |
| | | * @return #GNUNET_SYSERR on error, #GNUNET_OK on success | |
| */ | | */ | |
| int | | int | |
| GNUNET_TESTBED_test_run (const char *testname, | | GNUNET_TESTBED_test_run (const char *testname, | |
| const char *cfg_filename, | | const char *cfg_filename, | |
| unsigned int num_peers, | | unsigned int num_peers, | |
| uint64_t event_mask, | | uint64_t event_mask, | |
| GNUNET_TESTBED_ControllerCallback cc, | | GNUNET_TESTBED_ControllerCallback cc, | |
| void *cc_cls, | | void *cc_cls, | |
| GNUNET_TESTBED_TestMaster test_master, | | GNUNET_TESTBED_TestMaster test_master, | |
| void *test_master_cls); | | void *test_master_cls); | |
| | | | |
|
| | | /** | |
| | | * Obtain handle to the master controller from a testbed run. The handle | |
| | | * returned should not be disconnected. | |
| | | * | |
| | | * @param h the testbed run handle | |
| | | * @return handle to the master controller | |
| | | */ | |
| | | struct GNUNET_TESTBED_Controller * | |
| | | GNUNET_TESTBED_run_get_controller_handle (struct GNUNET_TESTBED_RunHandle * | |
| | | h); | |
| | | | |
| | | /** | |
| | | * Opaque handle for barrier | |
| | | */ | |
| | | struct GNUNET_TESTBED_Barrier; | |
| | | | |
| | | /** | |
| | | * Status of a barrier | |
| | | */ | |
| | | enum GNUNET_TESTBED_BarrierStatus | |
| | | { | |
| | | /** | |
| | | * Barrier initialised successfully | |
| | | */ | |
| | | GNUNET_TESTBED_BARRIERSTATUS_INITIALISED = 1, | |
| | | | |
| | | /** | |
| | | * Barrier is crossed | |
| | | */ | |
| | | GNUNET_TESTBED_BARRIERSTATUS_CROSSED, | |
| | | | |
| | | /** | |
| | | * Error status | |
| | | */ | |
| | | GNUNET_TESTBED_BARRIERSTATUS_ERROR, | |
| | | | |
| | | }; | |
| | | | |
| | | /** | |
| | | * Functions of this type are to be given as callback argument to | |
| | | * GNUNET_TESTBED_barrier_init(). The callback will be called when status | |
| | | * information is available for the barrier. | |
| | | * | |
| | | * @param cls the closure given to GNUNET_TESTBED_barrier_init() | |
| | | * @param name the name of the barrier | |
| | | * @param barrier the barrier handle | |
| | | * @param status status of the barrier; GNUNET_OK if the barrier is crossed | |
| | | ; | |
| | | * GNUNET_SYSERR upon error | |
| | | * @param emsg if the status were to be GNUNET_SYSERR, this parameter has t | |
| | | he | |
| | | * error messsage | |
| | | */ | |
| | | typedef void (*GNUNET_TESTBED_barrier_status_cb) (void *cls, | |
| | | const char *name, | |
| | | struct GNUNET_TESTBED_Bar | |
| | | rier | |
| | | *barrier, | |
| | | enum GNUNET_TESTBED_Barri | |
| | | erStatus status, | |
| | | const char *emsg); | |
| | | | |
| | | /** | |
| | | * Initialise a barrier and call the given callback when the required perce | |
| | | ntage | |
| | | * of peers (quorum) reach the barrier. | |
| | | * | |
| | | * @param controller the handle to the controller | |
| | | * @param name identification name of the barrier | |
| | | * @param quorum the percentage of peers that is required to reach the barr | |
| | | ier. | |
| | | * Peers signal reaching a barrier by calling | |
| | | * GNUNET_TESTBED_barrier_reached(). | |
| | | * @param cb the callback to call when the barrier is reached or upon error | |
| | | . | |
| | | * Cannot be NULL. | |
| | | * @param cls closure for the above callback | |
| | | * @return barrier handle | |
| | | */ | |
| | | struct GNUNET_TESTBED_Barrier * | |
| | | GNUNET_TESTBED_barrier_init (struct GNUNET_TESTBED_Controller *controller, | |
| | | const char *name, | |
| | | unsigned int quorum, | |
| | | GNUNET_TESTBED_barrier_status_cb cb, void *cls | |
| | | ); | |
| | | | |
| | | /** | |
| | | * Cancel a barrier. | |
| | | * | |
| | | * @param barrier the barrier handle | |
| | | */ | |
| | | void | |
| | | GNUNET_TESTBED_barrier_cancel (struct GNUNET_TESTBED_Barrier *barrier); | |
| | | | |
| | | /** | |
| | | * Opaque handle for barrier wait | |
| | | */ | |
| | | struct GNUNET_TESTBED_BarrierWaitHandle; | |
| | | | |
| | | /** | |
| | | * Functions of this type are to be given as acallback argumetn to | |
| | | * GNUNET_TESTBED_barrier_wait(). The callback will be called when the bar | |
| | | rier | |
| | | * corresponding given in GNUNET_TESTBED_barrier_wait() is crossed or cance | |
| | | lled. | |
| | | * | |
| | | * @param cls closure pointer given to GNUNET_TESTBED_barrier_wait() | |
| | | * @param name the barrier name | |
| | | * @param status GNUNET_SYSERR in case of error while waiting for the barri | |
| | | er; | |
| | | * GNUNET_OK if the barrier is crossed | |
| | | */ | |
| | | typedef void (*GNUNET_TESTBED_barrier_wait_cb) (void *cls, | |
| | | const char *name, | |
| | | int status); | |
| | | | |
| | | /** | |
| | | * Wait for a barrier to be crossed. This function should be called by the | |
| | | * peers which have been started by the testbed. If the peer is not starte | |
| | | d by | |
| | | * testbed this function may return error | |
| | | * | |
| | | * @param name the name of the barrier | |
| | | * @param cb the barrier wait callback | |
| | | * @param cls the closure for the above callback | |
| | | * @return barrier wait handle which can be used to cancel the waiting at | |
| | | * anytime before the callback is called. NULL upon error. | |
| | | */ | |
| | | struct GNUNET_TESTBED_BarrierWaitHandle * | |
| | | GNUNET_TESTBED_barrier_wait (const char *name, | |
| | | GNUNET_TESTBED_barrier_wait_cb cb, | |
| | | void *cls); | |
| | | | |
| | | /** | |
| | | * Cancel a barrier wait handle. Should not be called in or after the call | |
| | | back | |
| | | * given to GNUNET_TESTBED_barrier_wait() has been called. | |
| | | * | |
| | | * @param h the barrier wait handle | |
| | | */ | |
| | | void | |
| | | GNUNET_TESTBED_barrier_wait_cancel (struct GNUNET_TESTBED_BarrierWaitHandle | |
| | | *h); | |
| | | | |
| | | /** | |
| | | * Model for configuring underlay links of a peer | |
| | | * @ingroup underlay | |
| | | */ | |
| | | struct GNUNET_TESTBED_UnderlayLinkModel; | |
| | | | |
| | | /** | |
| | | * The type of GNUNET_TESTBED_UnderlayLinkModel | |
| | | * @ingroup underlay | |
| | | */ | |
| | | enum GNUNET_TESTBED_UnderlayLinkModelType | |
| | | { | |
| | | /** | |
| | | * The model is based on white listing of peers to which underlay connect | |
| | | ions | |
| | | * are permitted. Underlay connections to all other peers will not be | |
| | | * permitted. | |
| | | */ | |
| | | GNUNET_TESTBED_UNDERLAYLINKMODELTYPE_BLACKLIST, | |
| | | | |
| | | /** | |
| | | * The model is based on black listing of peers to which underlay connect | |
| | | ions | |
| | | * are not permitted. Underlay connections to all other peers will be | |
| | | * permitted | |
| | | */ | |
| | | GNUNET_TESTBED_UNDERLAYLINKMODELTYPE_WHITELIST | |
| | | }; | |
| | | | |
| | | /** | |
| | | * Create a GNUNET_TESTBED_UnderlayLinkModel for the given peer. A peer ca | |
| | | n | |
| | | * have ONLY ONE model and it can be either a blacklist or whitelist based | |
| | | one. | |
| | | * | |
| | | * @ingroup underlay | |
| | | * @param peer the peer for which the model has to be created | |
| | | * @param type the type of the model | |
| | | * @return the model | |
| | | */ | |
| | | struct GNUNET_TESTBED_UnderlayLinkModel * | |
| | | GNUNET_TESTBED_underlaylinkmodel_create (struct GNUNET_TESTBED_Peer *peer, | |
| | | enum GNUNET_TESTBED_UnderlayLinkMo | |
| | | delType type); | |
| | | | |
| | | /** | |
| | | * Add a peer to the given model. Underlay connections to the given peer w | |
| | | ill | |
| | | * be permitted if the model is whitelist based; otherwise they will not be | |
| | | * permitted. | |
| | | * | |
| | | * @ingroup underlay | |
| | | * @param model the model | |
| | | * @param peer the peer to add | |
| | | */ | |
| | | void | |
| | | GNUNET_TESTBED_underlaylinkmodel_add_peer (struct GNUNET_TESTBED_UnderlayLi | |
| | | nkModel *model, | |
| | | struct GNUNET_TESTBED_Peer *peer | |
| | | ); | |
| | | | |
| | | /** | |
| | | * Set the metrics for a link to the given peer in the underlay model. The | |
| | | link | |
| | | * SHOULD be permittable according to the given model. | |
| | | * | |
| | | * @ingroup underlay | |
| | | * @param model the model | |
| | | * @param peer the other end peer of the link | |
| | | * @param latency latency of the link in microseconds | |
| | | * @param loss data loss of the link expressed as a percentage | |
| | | * @param bandwidth bandwidth of the link in kilobytes per second [kB/s] | |
| | | */ | |
| | | void | |
| | | GNUNET_TESTBED_underlaylinkmodel_set_link (struct GNUNET_TESTBED_UnderlayLi | |
| | | nkModel *model, | |
| | | struct GNUNET_TESTBED_Peer *peer | |
| | | , | |
| | | uint32_t latency, | |
| | | uint32_t loss, | |
| | | uint32_t bandwidth); | |
| | | | |
| | | /** | |
| | | * Commit the model. The model is freed in this function(!). | |
| | | * | |
| | | * @ingroup underlay | |
| | | * @param model the model to commit | |
| | | */ | |
| | | void | |
| | | GNUNET_TESTBED_underlaylinkmodel_commit (struct GNUNET_TESTBED_UnderlayLink | |
| | | Model *model); | |
| | | | |
| | | /** | |
| | | * Free the resources of the model. Use this function only if the model ha | |
| | | s not | |
| | | * be committed and has to be unallocated. The peer can then have another | |
| | | model | |
| | | * created. | |
| | | * | |
| | | * @ingroup underlay | |
| | | * @param model the model to unallocate | |
| | | */ | |
| | | void | |
| | | GNUNET_TESTBED_underlaylinkmodel_free (struct GNUNET_TESTBED_UnderlayLinkMo | |
| | | del *model); | |
| | | | |
| #if 0 /* keep Emacsens' auto-indent happy */ | | #if 0 /* keep Emacsens' auto-indent happy */ | |
| { | | { | |
| #endif | | #endif | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| } | | } | |
| #endif | | #endif | |
| | | | |
| #endif | | #endif | |
| | | | |
End of changes. 73 change blocks. |
| 172 lines changed or deleted | | 524 lines changed or added | |
|
| gnunet_transport_plugin.h | | gnunet_transport_plugin.h | |
| | | | |
| skipping to change at line 38 | | skipping to change at line 38 | |
| * and is expected to return a NULL pointer. | | * and is expected to return a NULL pointer. | |
| * @author Christian Grothoff | | * @author Christian Grothoff | |
| */ | | */ | |
| #ifndef PLUGIN_TRANSPORT_H | | #ifndef PLUGIN_TRANSPORT_H | |
| #define PLUGIN_TRANSPORT_H | | #define PLUGIN_TRANSPORT_H | |
| | | | |
| #include "gnunet_configuration_lib.h" | | #include "gnunet_configuration_lib.h" | |
| #include "gnunet_scheduler_lib.h" | | #include "gnunet_scheduler_lib.h" | |
| #include "gnunet_statistics_service.h" | | #include "gnunet_statistics_service.h" | |
| #include "gnunet_transport_service.h" | | #include "gnunet_transport_service.h" | |
|
| | | #include "gnunet_ats_service.h" | |
| | | | |
| | | #define TRANSPORT_SESSION_INBOUND_STRING "<inbound>" | |
| | | | |
| /** | | /** | |
| * Opaque pointer that plugins can use to distinguish specific | | * Opaque pointer that plugins can use to distinguish specific | |
| * connections to a given peer. Typically used by stateful plugins to | | * connections to a given peer. Typically used by stateful plugins to | |
| * allow the service to refer to specific streams instead of a more | | * allow the service to refer to specific streams instead of a more | |
| * general notion of "some connection" to the given peer. This is | | * general notion of "some connection" to the given peer. This is | |
| * useful since sometimes (i.e. for inbound TCP connections) a | | * useful since sometimes (i.e. for inbound TCP connections) a | |
| * connection may not have an address that can be used for meaningful | | * connection may not have an address that can be used for meaningful | |
| * distinction between sessions to the same peer. | | * distinction between sessions to the same peer. | |
| * | | * | |
| | | | |
| skipping to change at line 59 | | skipping to change at line 62 | |
| * of the peer the session is for (which will be used for some error | | * of the peer the session is for (which will be used for some error | |
| * checking by the ATS code). | | * checking by the ATS code). | |
| */ | | */ | |
| struct Session; | | struct Session; | |
| | | | |
| /** | | /** | |
| * Every 'struct Session' must begin with this header. | | * Every 'struct Session' must begin with this header. | |
| */ | | */ | |
| struct SessionHeader | | struct SessionHeader | |
| { | | { | |
|
| | | /* empty, for now */ | |
| /** | | | |
| * Cached signature for PONG generation for the session. Do not use | | | |
| * in the plugin! | | | |
| */ | | | |
| struct GNUNET_CRYPTO_RsaSignature pong_signature; | | | |
| | | | |
| /** | | | |
| * Expiration time for signature. Do not use in the plugin! | | | |
| */ | | | |
| struct GNUNET_TIME_Absolute pong_sig_expires; | | | |
| | | | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Function that will be called whenever the plugin internally | | * Function that will be called whenever the plugin internally | |
| * cleans up a session pointer and hence the service needs to | | * cleans up a session pointer and hence the service needs to | |
| * discard all of those sessions as well. Plugins that do not | | * discard all of those sessions as well. Plugins that do not | |
| * use sessions can simply omit calling this function and always | | * use sessions can simply omit calling this function and always | |
| * use NULL wherever a session pointer is needed. This function | | * use NULL wherever a session pointer is needed. This function | |
| * should be called BEFORE a potential "TransmitContinuation" | | * should be called BEFORE a potential "TransmitContinuation" | |
| * from the "TransmitFunction". | | * from the "TransmitFunction". | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param peer which peer was the session for | | * @param peer which peer was the session for | |
|
| * @param session which session is being destoyed | | * @param session which session is being destroyed | |
| */ | | */ | |
|
| typedef void (*GNUNET_TRANSPORT_SessionEnd) (void *cls, | | typedef void | |
| const struct GNUNET_PeerIdenti | | (*GNUNET_TRANSPORT_SessionEnd) (void *cls, | |
| ty * | | const struct GNUNET_PeerIdentity *peer, | |
| peer, struct Session * session | | struct Session *session); | |
| ); | | | |
| | | /** | |
| | | * Function that will be called whenever the plugin internally | |
| | | * creates a new session and hence transport need to tell ATS. | |
| | | * This happens when we have a inbound connection we did not | |
| | | * initiate. | |
| | | * | |
| | | * @param cls closure | |
| | | * @param peer peer | |
| | | * @param plugin plugin | |
| | | * @param address address | |
| | | * @param address_len length of the @a address | |
| | | * @param session session | |
| | | * @param ats ATS information | |
| | | * @param ats_count number of entries in @a ats array | |
| | | */ | |
| | | typedef void | |
| | | (*GNUNET_TRANSPORT_SessionStart) (void *cls, | |
| | | const struct GNUNET_PeerIdentity *peer, | |
| | | const char *plugin, | |
| | | const void *address, | |
| | | uint16_t address_len, | |
| | | struct Session *session, | |
| | | const struct GNUNET_ATS_Information *ats, | |
| | | uint32_t ats_count); | |
| | | | |
| /** | | /** | |
| * Function called by the transport for each received message. | | * Function called by the transport for each received message. | |
| * This function should also be called with "NULL" for the | | * This function should also be called with "NULL" for the | |
| * message to signal that the other peer disconnected. | | * message to signal that the other peer disconnected. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param peer (claimed) identity of the other peer | | * @param peer (claimed) identity of the other peer | |
| * @param message the message, NULL if we only care about | | * @param message the message, NULL if we only care about | |
| * learning about the delay until we should receive again | | * learning about the delay until we should receive again | |
| * @param session identifier used for this session (NULL for plugins | | * @param session identifier used for this session (NULL for plugins | |
| * that do not offer bi-directional communication to the sen
der | | * that do not offer bi-directional communication to the sen
der | |
| * using the same "connection") | | * using the same "connection") | |
| * @param sender_address binary address of the sender (if we established th
e | | * @param sender_address binary address of the sender (if we established th
e | |
| * connection or are otherwise sure of it; should be NULL | | * connection or are otherwise sure of it; should be NULL | |
| * for inbound TCP/UDP connections since it it not clear | | * for inbound TCP/UDP connections since it it not clear | |
| * that we could establish ourselves a connection to that | | * that we could establish ourselves a connection to that | |
| * IP address and get the same system) | | * IP address and get the same system) | |
|
| * @param sender_address_len number of bytes in sender_address | | * @param sender_address_len number of bytes in @a sender_address | |
| * @return how long the plugin should wait until receiving more data | | * @return how long the plugin should wait until receiving more data; | |
| * (plugins that do not support this, can ignore the return value) | | * returning #GNUNET_TIME_UNIT_FOREVER_REL means that the | |
| */ | | * connection should be closed | |
| typedef struct | | */ | |
| GNUNET_TIME_Relative (*GNUNET_TRANSPORT_PluginReceiveCallback) (void *c | | typedef struct GNUNET_TIME_Relative | |
| ls, | | (*GNUNET_TRANSPORT_PluginReceiveCallback) (void *cls, | |
| const s | | const struct GNUNET_PeerIdentity | |
| truct | | *peer, | |
| GNUNET_ | | const struct GNUNET_MessageHeade | |
| PeerIdentity | | r *message, | |
| * peer, | | struct Session *session, | |
| const s | | const char *sender_address, | |
| truct | | uint16_t sender_address_len); | |
| GNUNET_ | | | |
| MessageHeader | | | |
| * messa | | | |
| ge, | | | |
| const s | | | |
| truct | | | |
| GNUNET_ | | | |
| ATS_Information | | | |
| * ats, | | | |
| uint32_ | | | |
| t | | | |
| ats_cou | | | |
| nt, | | | |
| struct | | | |
| Session | | | |
| * | | | |
| session | | | |
| , | | | |
| const c | | | |
| har | | | |
| *sender | | | |
| _address, | | | |
| uint16_ | | | |
| t | | | |
| sender_ | | | |
| address_len); | | | |
| | | | |
| /** | | /** | |
| * Function that will be called to figure if an address is an loopback, | | * Function that will be called to figure if an address is an loopback, | |
| * LAN, WAN etc. address | | * LAN, WAN etc. address | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param addr binary address | | * @param addr binary address | |
|
| * @param addrlen length of the address | | * @param addrlen length of the @a addr | |
| * @return ATS Information containing the network type | | * @return ATS Information containing the network type | |
| */ | | */ | |
| typedef struct GNUNET_ATS_Information | | typedef struct GNUNET_ATS_Information | |
| (*GNUNET_TRANSPORT_AddressToType) (void *cls, | | (*GNUNET_TRANSPORT_AddressToType) (void *cls, | |
| const struct sockaddr *addr, | | const struct sockaddr *addr, | |
| size_t addrlen); | | size_t addrlen); | |
| | | | |
| /** | | /** | |
|
| | | * Function called when quality properties of an address change. | |
| | | * | |
| | | * @param cls closure | |
| | | * @param peer peer | |
| | | * @param address address | |
| | | * @param address_len length of the @a address | |
| | | * @param session session | |
| | | * @param ats ATS information | |
| | | * @param ats_count number entries in the @a ats array | |
| | | */ | |
| | | typedef void | |
| | | (*GNUNET_TRANSPORT_UpdateAddressMetrics) (void *cls, | |
| | | const struct GNUNET_PeerIdentity * | |
| | | peer, | |
| | | const void *address, | |
| | | uint16_t address_len, | |
| | | struct Session *session, | |
| | | const struct GNUNET_ATS_Informatio | |
| | | n *ats, | |
| | | uint32_t ats_count); | |
| | | | |
| | | /** | |
| * Function that will be called for each address the transport | | * Function that will be called for each address the transport | |
| * is aware that it might be reachable under. | | * is aware that it might be reachable under. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
|
| * @param add_remove should the address added (YES) or removed (NO) from th
e | | * @param add_remove should the address added (#GNUNET_YES) or removed (#GN
UNET_NO) from the | |
| * set of valid addresses? | | * set of valid addresses? | |
| * @param addr one of the addresses of the host | | * @param addr one of the addresses of the host | |
| * the specific address format depends on the transport | | * the specific address format depends on the transport | |
|
| * @param addrlen length of the address | | * @param addrlen length of the @a addr | |
| * @param dest_plugin plugin to use this address with | | * @param dest_plugin plugin to use this address with | |
| */ | | */ | |
|
| typedef void (*GNUNET_TRANSPORT_AddressNotification) (void *cls, int add_re | | typedef void | |
| move, | | (*GNUNET_TRANSPORT_AddressNotification) (void *cls, | |
| const void *addr, | | int add_remove, | |
| size_t addrlen, | | const void *addr, | |
| const char *dest_plug | | size_t addrlen, | |
| in); | | const char *dest_plugin); | |
| | | | |
| /** | | /** | |
| * Function that will be called whenever the plugin receives data over | | * Function that will be called whenever the plugin receives data over | |
| * the network and wants to determine how long it should wait until | | * the network and wants to determine how long it should wait until | |
| * the next time it reads from the given peer. Note that some plugins | | * the next time it reads from the given peer. Note that some plugins | |
| * (such as UDP) may not be able to wait (for a particular peer), so | | * (such as UDP) may not be able to wait (for a particular peer), so | |
| * the waiting part is optional. Plugins that can wait should call | | * the waiting part is optional. Plugins that can wait should call | |
| * this function, sleep the given amount of time, and call it again | | * this function, sleep the given amount of time, and call it again | |
| * (with zero bytes read) UNTIL it returns zero and only then read. | | * (with zero bytes read) UNTIL it returns zero and only then read. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param peer which peer did we read data from | | * @param peer which peer did we read data from | |
| * @param amount_recved number of bytes read (can be zero) | | * @param amount_recved number of bytes read (can be zero) | |
| * @return how long to wait until reading more from this peer | | * @return how long to wait until reading more from this peer | |
|
| * (to enforce inbound quotas) | | * (to enforce inbound quotas); returning #GNUNET_TIME_UNIT_FOREVER | |
| | | _REL | |
| | | * means that the connection should be closed | |
| */ | | */ | |
|
| typedef struct GNUNET_TIME_Relative (*GNUNET_TRANSPORT_TrafficReport) (void | | typedef struct GNUNET_TIME_Relative | |
| *cls | | (*GNUNET_TRANSPORT_TrafficReport) (void *cls, | |
| , | | const struct GNUNET_PeerIdentity *peer, | |
| cons | | size_t amount_recved); | |
| t | | | |
| stru | | | |
| ct | | | |
| GNUN | | | |
| ET_PeerIdentity | | | |
| * pe | | | |
| er, | | | |
| size | | | |
| _t | | | |
| amou | | | |
| nt_recved); | | | |
| | | | |
| /** | | /** | |
| * Function that returns a HELLO message. | | * Function that returns a HELLO message. | |
| */ | | */ | |
| typedef const struct GNUNET_MessageHeader * | | typedef const struct GNUNET_MessageHeader * | |
|
| (*GNUNET_TRANSPORT_GetHelloCallback) (void); | | (*GNUNET_TRANSPORT_GetHelloCallback) (void); | |
| | | | |
| /** | | /** | |
| * The transport service will pass a pointer to a struct | | * The transport service will pass a pointer to a struct | |
| * of this type as the first and only argument to the | | * of this type as the first and only argument to the | |
| * entry point of each transport plugin. | | * entry point of each transport plugin. | |
| */ | | */ | |
| struct GNUNET_TRANSPORT_PluginEnvironment | | struct GNUNET_TRANSPORT_PluginEnvironment | |
| { | | { | |
| /** | | /** | |
| * Configuration to use. | | * Configuration to use. | |
| | | | |
| skipping to change at line 249 | | skipping to change at line 274 | |
| */ | | */ | |
| GNUNET_TRANSPORT_AddressNotification notify_address; | | GNUNET_TRANSPORT_AddressNotification notify_address; | |
| | | | |
| /** | | /** | |
| * Function that must be called by the plugin when a non-NULL | | * Function that must be called by the plugin when a non-NULL | |
| * session handle stops being valid (is destroyed). | | * session handle stops being valid (is destroyed). | |
| */ | | */ | |
| GNUNET_TRANSPORT_SessionEnd session_end; | | GNUNET_TRANSPORT_SessionEnd session_end; | |
| | | | |
| /** | | /** | |
|
| | | * Function called by the plugin when a new (incoming) session was create | |
| | | d | |
| | | * not explicitly created using the the get_session function | |
| | | */ | |
| | | GNUNET_TRANSPORT_SessionStart session_start; | |
| | | | |
| | | /** | |
| * Function that will be called to figure if an address is an loopback, | | * Function that will be called to figure if an address is an loopback, | |
| * LAN, WAN etc. address | | * LAN, WAN etc. address | |
| */ | | */ | |
| GNUNET_TRANSPORT_AddressToType get_address_type; | | GNUNET_TRANSPORT_AddressToType get_address_type; | |
| | | | |
| /** | | /** | |
|
| | | * Function that will be called to figure if an address is an loopback, | |
| | | * LAN, WAN etc. address | |
| | | */ | |
| | | GNUNET_TRANSPORT_UpdateAddressMetrics update_address_metrics; | |
| | | | |
| | | /** | |
| * What is the maximum number of connections that this transport | | * What is the maximum number of connections that this transport | |
| * should allow? Transports that do not have sessions (such as | | * should allow? Transports that do not have sessions (such as | |
| * UDP) can ignore this value. | | * UDP) can ignore this value. | |
| */ | | */ | |
| uint32_t max_connections; | | uint32_t max_connections; | |
| | | | |
| }; | | }; | |
| | | | |
| /** | | /** | |
|
| * Function called by the GNUNET_TRANSPORT_TransmitFunction | | * Function called by the #GNUNET_TRANSPORT_TransmitFunction | |
| * upon "completion". In the case that a peer disconnects, | | * upon "completion". In the case that a peer disconnects, | |
| * this function must be called for each pending request | | * this function must be called for each pending request | |
| * (with a 'failure' indication) AFTER notifying the service | | * (with a 'failure' indication) AFTER notifying the service | |
| * about the disconnect event (so that the service won't try | | * about the disconnect event (so that the service won't try | |
| * to transmit more messages, believing the connection still | | * to transmit more messages, believing the connection still | |
| * exists...). | | * exists...). | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param target who was the recipient of the message? | | * @param target who was the recipient of the message? | |
|
| * @param result GNUNET_OK on success | | * @param result #GNUNET_OK on success | |
| * GNUNET_SYSERR if the target disconnected; | | * #GNUNET_SYSERR if the target disconnected; | |
| * disconnect will ALSO be signalled using | | * disconnect will ALSO be signalled using | |
| * the ReceiveCallback. | | * the ReceiveCallback. | |
| * @param size_payload bytes of payload from transport service in message | | * @param size_payload bytes of payload from transport service in message | |
| * @param size_on_wire bytes required on wire for transmission, | | * @param size_on_wire bytes required on wire for transmission, | |
|
| * 0 if result == GNUNET_SYSERR | | * 0 if result == #GNUNET_SYSERR | |
| */ | | */ | |
|
| typedef void (*GNUNET_TRANSPORT_TransmitContinuation) (void *cls, | | typedef void | |
| const struct | | (*GNUNET_TRANSPORT_TransmitContinuation) (void *cls, | |
| GNUNET_PeerIdentity | | const struct GNUNET_PeerIdentity | |
| * | | *target, | |
| target, | | int result, | |
| int result, | | size_t size_payload, | |
| size_t size_payload, | | size_t size_on_wire); | |
| size_t size_on_wire) | | | |
| ; | | | |
| | | | |
| /** | | /** | |
| * The new send function with just the session and no address | | * The new send function with just the session and no address | |
| * | | * | |
| * Function that can be used by the transport service to transmit | | * Function that can be used by the transport service to transmit | |
| * a message using the plugin. Note that in the case of a | | * a message using the plugin. Note that in the case of a | |
| * peer disconnecting, the continuation MUST be called | | * peer disconnecting, the continuation MUST be called | |
| * prior to the disconnect notification itself. This function | | * prior to the disconnect notification itself. This function | |
| * will be called with this peer's HELLO message to initiate | | * will be called with this peer's HELLO message to initiate | |
| * a fresh connection to another peer. | | * a fresh connection to another peer. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param session which session must be used | | * @param session which session must be used | |
| * @param msgbuf the message to transmit | | * @param msgbuf the message to transmit | |
|
| * @param msgbuf_size number of bytes in 'msgbuf' | | * @param msgbuf_size number of bytes in @a msgbuf | |
| * @param priority how important is the message (most plugins will | | * @param priority how important is the message (most plugins will | |
| * ignore message priority and just FIFO) | | * ignore message priority and just FIFO) | |
|
| * @param timeout how long to wait at most for the transmission (does not | | * @param to how long to wait at most for the transmission (does not | |
| * require plugins to discard the message after the timeout, | | * require plugins to discard the message after the timeout, | |
| * just advisory for the desired delay; most plugins will ig
nore | | * just advisory for the desired delay; most plugins will ig
nore | |
| * this as well) | | * this as well) | |
| * @param cont continuation to call once the message has | | * @param cont continuation to call once the message has | |
| * been transmitted (or if the transport is ready | | * been transmitted (or if the transport is ready | |
| * for the next transmission call; or if the | | * for the next transmission call; or if the | |
| * peer disconnected...); can be NULL | | * peer disconnected...); can be NULL | |
|
| * @param cont_cls closure for cont | | * @param cont_cls closure for @a cont | |
| * @return number of bytes used (on the physical network, with overheads); | | * @return number of bytes used (on the physical network, with overheads); | |
| * -1 on hard errors (i.e. address invalid); 0 is a legal value | | * -1 on hard errors (i.e. address invalid); 0 is a legal value | |
| * and does NOT mean that the message was not transmitted (DV) | | * and does NOT mean that the message was not transmitted (DV) | |
| */ | | */ | |
|
| typedef ssize_t (*GNUNET_TRANSPORT_TransmitFunction) (void *cls, | | typedef ssize_t | |
| struct Session *sessio | | (*GNUNET_TRANSPORT_TransmitFunction) (void *cls, | |
| n, | | struct Session *session, | |
| const char *msgbuf, si | | const char *msgbuf, | |
| ze_t msgbuf_size, | | size_t msgbuf_size, | |
| unsigned int priority, | | unsigned int priority, | |
| struct GNUNET_TIME_Rel | | struct GNUNET_TIME_Relative to, | |
| ative to, | | GNUNET_TRANSPORT_TransmitContinuation | |
| GNUNET_TRANSPORT_Trans | | cont, | |
| mitContinuation cont, | | void *cont_cls); | |
| void *cont_cls); | | | |
| | | /** | |
| | | * Function that can be called to force a disconnect from the | |
| | | * specified neighbour for the given session only. . This should | |
| | | * also cancel all previously scheduled transmissions for this | |
| | | * session. Obviously the transmission may have been partially | |
| | | * completed already, which is OK. The plugin is supposed to close | |
| | | * the connection (if applicable). | |
| | | * | |
| | | * @param cls closure with the `struct Plugin` | |
| | | * @param session session to destroy | |
| | | * @return #GNUNET_OK on success | |
| | | */ | |
| | | typedef int | |
| | | (*GNUNET_TRANSPORT_DisconnectSessionFunction) (void *cls, | |
| | | struct Session *session); | |
| | | | |
| | | /** | |
| | | * Function that is called to get the keepalive factor. | |
| | | * GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT is divided by this number to | |
| | | * calculate the interval between keepalive packets. | |
| | | * | |
| | | * @param cls closure with the `struct Plugin` | |
| | | * @return keepalive factor | |
| | | */ | |
| | | typedef unsigned int | |
| | | (*GNUNET_TRANSPORT_QueryKeepaliveFactorFunction) (void *cls); | |
| | | | |
| /** | | /** | |
| * Function that can be called to force a disconnect from the | | * Function that can be called to force a disconnect from the | |
| * specified neighbour. This should also cancel all previously | | * specified neighbour. This should also cancel all previously | |
| * scheduled transmissions. Obviously the transmission may have been | | * scheduled transmissions. Obviously the transmission may have been | |
| * partially completed already, which is OK. The plugin is supposed | | * partially completed already, which is OK. The plugin is supposed | |
| * to close the connection (if applicable) and no longer call the | | * to close the connection (if applicable) and no longer call the | |
| * transmit continuation(s). | | * transmit continuation(s). | |
| * | | * | |
|
| * Finally, plugin MUST NOT call the services's receive function to | | | |
| * notify the service that the connection to the specified target was | | | |
| * closed after a getting this call. | | | |
| * | | | |
| * @param cls closure | | * @param cls closure | |
| * @param target peer for which the last transmission is | | * @param target peer for which the last transmission is | |
| * to be cancelled | | * to be cancelled | |
| */ | | */ | |
|
| typedef void (*GNUNET_TRANSPORT_DisconnectFunction) (void *cls, | | typedef void | |
| const struct | | (*GNUNET_TRANSPORT_DisconnectPeerFunction) (void *cls, | |
| GNUNET_PeerIdentity * | | const struct GNUNET_PeerIdentit | |
| target); | | y *target); | |
| | | | |
| /** | | /** | |
| * Function called by the pretty printer for the resolved address for | | * Function called by the pretty printer for the resolved address for | |
| * each human-readable address obtained. | | * each human-readable address obtained. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
|
| * @param hostname one of the names for the host, NULL | | * @param address one of the names for the host, NULL | |
| * on the last call to the callback | | * on the last call to the callback | |
| */ | | */ | |
|
| typedef void (*GNUNET_TRANSPORT_AddressStringCallback) (void *cls, | | typedef void | |
| const char *address | | (*GNUNET_TRANSPORT_AddressStringCallback) (void *cls, | |
| ); | | const char *address); | |
| | | | |
| /** | | /** | |
| * Convert the transports address to a nice, human-readable | | * Convert the transports address to a nice, human-readable | |
| * format. | | * format. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
|
| * @param name name of the transport that generated the address | | * @param type name of the transport that generated the address | |
| * @param addr one of the addresses of the host, NULL for the last address | | * @param addr one of the addresses of the host, NULL for the last address | |
| * the specific address format depends on the transport | | * the specific address format depends on the transport | |
|
| * @param addrlen length of the address | | * @param addrlen length of the @a addr | |
| * @param numeric should (IP) addresses be displayed in numeric form? | | * @param numeric should (IP) addresses be displayed in numeric form? | |
| * @param timeout after how long should we give up? | | * @param timeout after how long should we give up? | |
| * @param asc function to call on each string | | * @param asc function to call on each string | |
|
| * @param asc_cls closure for asc | | * @param asc_cls closure for @a asc | |
| */ | | */ | |
|
| typedef void (*GNUNET_TRANSPORT_AddressPrettyPrinter) (void *cls, | | typedef void | |
| const char *type, | | (*GNUNET_TRANSPORT_AddressPrettyPrinter) (void *cls, | |
| const void *addr, | | const char *type, | |
| size_t addrlen, | | const void *addr, | |
| int numeric, | | size_t addrlen, | |
| struct | | int numeric, | |
| GNUNET_TIME_Relative | | struct GNUNET_TIME_Relative timeo | |
| timeout, | | ut, | |
| GNUNET_TRANSPORT_Add | | GNUNET_TRANSPORT_AddressStringCal | |
| ressStringCallback | | lback asc, | |
| asc, void *asc_cls); | | void *asc_cls); | |
| | | | |
| /** | | /** | |
| * Another peer has suggested an address for this peer and transport | | * Another peer has suggested an address for this peer and transport | |
| * plugin. Check that this could be a valid address. This function | | * plugin. Check that this could be a valid address. This function | |
| * is not expected to 'validate' the address in the sense of trying to | | * is not expected to 'validate' the address in the sense of trying to | |
| * connect to it but simply to see if the binary format is technically | | * connect to it but simply to see if the binary format is technically | |
| * legal for establishing a connection to this peer (and make sure that | | * legal for establishing a connection to this peer (and make sure that | |
| * the address really corresponds to our network connection/settings | | * the address really corresponds to our network connection/settings | |
| * and not some potential man-in-the-middle). | | * and not some potential man-in-the-middle). | |
| * | | * | |
| * @param addr pointer to the address | | * @param addr pointer to the address | |
|
| * @param addrlen length of addr | | * @param addrlen length of @a addr | |
| * @return GNUNET_OK if this is a plausible address for this peer | | * @return #GNUNET_OK if this is a plausible address for this peer | |
| * and transport, GNUNET_SYSERR if not | | * and transport, #GNUNET_SYSERR if not | |
| */ | | */ | |
| typedef int (*GNUNET_TRANSPORT_CheckAddress) (void *cls, const void *addr, | | typedef int | |
| size_t addrlen); | | (*GNUNET_TRANSPORT_CheckAddress) (void *cls, | |
| | | const void *addr, | |
| | | size_t addrlen); | |
| | | | |
| /** | | /** | |
| * Create a new session to transmit data to the target | | * Create a new session to transmit data to the target | |
| * This session will used to send data to this peer and the plugin will | | * This session will used to send data to this peer and the plugin will | |
| * notify us by calling the env->session_end function | | * notify us by calling the env->session_end function | |
| * | | * | |
| * @param cls the plugin | | * @param cls the plugin | |
|
| * @param target the neighbour id | | * @param address the hello address | |
| * @param addr pointer to the address | | | |
| * @param addrlen length of addr | | | |
| * @return the session if the address is valid, NULL otherwise | | * @return the session if the address is valid, NULL otherwise | |
| */ | | */ | |
|
| typedef struct Session * (*GNUNET_TRANSPORT_CreateSession) (void *cls, | | typedef struct Session * | |
| const struct GNUNET_HELLO_Address *address); | | (*GNUNET_TRANSPORT_CreateSession) (void *cls, | |
| | | const struct GNUNET_HELLO_Address *addre | |
| | | ss); | |
| | | | |
| | | /** | |
| | | * Function that will be called whenever the transport service wants to | |
| | | * notify the plugin that a session is still active and in use and | |
| | | * therefore the session timeout for this session has to be updated | |
| | | * | |
| | | * @param cls closure | |
| | | * @param peer which peer was the session for | |
| | | * @param session which session is being updated | |
| | | */ | |
| | | typedef void | |
| | | (*GNUNET_TRANSPORT_UpdateSessionTimeout) (void *cls, | |
| | | const struct GNUNET_PeerIdentity | |
| | | *peer, | |
| | | struct Session *session); | |
| | | | |
| /** | | /** | |
| * Function called for a quick conversion of the binary address to | | * Function called for a quick conversion of the binary address to | |
| * a numeric address. Note that the caller must not free the | | * a numeric address. Note that the caller must not free the | |
| * address and that the next call to this function is allowed | | * address and that the next call to this function is allowed | |
| * to override the address again. | | * to override the address again. | |
| * | | * | |
| * @param cls closure | | * @param cls closure | |
| * @param addr binary address | | * @param addr binary address | |
|
| * @param addr_len length of the address | | * @param addr_len length of the @a addr | |
| * @return string representing the same address | | * @return string representing the same address | |
| */ | | */ | |
|
| typedef const char *(*GNUNET_TRANSPORT_AddressToString) (void *cls, | | typedef const char * | |
| const void *addr, | | (*GNUNET_TRANSPORT_AddressToString) (void *cls, | |
| size_t addrlen); | | const void *addr, | |
| | | size_t addrlen); | |
| | | | |
| /** | | /** | |
| * Function called to convert a string address to | | * Function called to convert a string address to | |
| * a binary address. | | * a binary address. | |
| * | | * | |
|
| * @param cls closure ('struct Plugin*') | | * @param cls closure (`struct Plugin*`) | |
| * @param addr string address | | * @param addr string address | |
|
| * @param addrlen length of the address including \0 termination | | * @param addrlen length of the @a addr including \0 termination | |
| * @param buf location to store the buffer | | * @param buf location to store the buffer | |
|
| * If the function returns GNUNET_SYSERR, its contents are undefined
. | | * If the function returns #GNUNET_SYSERR, its contents are undefine
d. | |
| * @param added length of created address | | * @param added length of created address | |
|
| * @return GNUNET_OK on success, GNUNET_SYSERR on failure | | * @return #GNUNET_OK on success, #GNUNET_SYSERR on failure | |
| */ | | */ | |
|
| typedef int (*GNUNET_TRANSPORT_StringToAddress) (void *cls, | | typedef int | |
| const char *addr, | | (*GNUNET_TRANSPORT_StringToAddress) (void *cls, | |
| uint16_t addrlen, | | const char *addr, | |
| void **buf, | | uint16_t addrlen, | |
| size_t *added); | | void **buf, | |
| | | size_t *added); | |
| | | | |
| | | /** | |
| | | * Function to obtain the network type for a session | |
| | | * | |
| | | * @param cls closure ('struct Plugin*') | |
| | | * @param session the session | |
| | | * @return the network type | |
| | | */ | |
| | | typedef enum GNUNET_ATS_Network_Type | |
| | | (*GNUNET_TRANSPORT_GetNetworkType) (void *cls, | |
| | | struct Session *session); | |
| | | | |
| /** | | /** | |
| * Each plugin is required to return a pointer to a struct of this | | * Each plugin is required to return a pointer to a struct of this | |
| * type as the return value from its entry point. | | * type as the return value from its entry point. | |
| */ | | */ | |
| struct GNUNET_TRANSPORT_PluginFunctions | | struct GNUNET_TRANSPORT_PluginFunctions | |
| { | | { | |
| | | | |
| /** | | /** | |
| * Closure for all of the callbacks. | | * Closure for all of the callbacks. | |
| | | | |
| skipping to change at line 474 | | skipping to change at line 562 | |
| * continuation with success or error before notifying us about the | | * continuation with success or error before notifying us about the | |
| * target having disconnected. | | * target having disconnected. | |
| */ | | */ | |
| GNUNET_TRANSPORT_TransmitFunction send; | | GNUNET_TRANSPORT_TransmitFunction send; | |
| | | | |
| /** | | /** | |
| * Function that can be used to force the plugin to disconnect from | | * Function that can be used to force the plugin to disconnect from | |
| * the given peer and cancel all previous transmissions (and their | | * the given peer and cancel all previous transmissions (and their | |
| * continuations). | | * continuations). | |
| */ | | */ | |
|
| GNUNET_TRANSPORT_DisconnectFunction disconnect; | | GNUNET_TRANSPORT_DisconnectPeerFunction disconnect_peer; | |
| | | | |
| | | /** | |
| | | * Function that can be used to force the plugin to disconnect from | |
| | | * the given peer and cancel all previous transmissions (and their | |
| | | * continuations). | |
| | | */ | |
| | | GNUNET_TRANSPORT_DisconnectSessionFunction disconnect_session; | |
| | | | |
| | | /** | |
| | | * Function that will be called whenever the transport service wants to | |
| | | * notify the plugin that a session is still active and in use and | |
| | | * therefore the session timeout for this session has to be updated | |
| | | */ | |
| | | GNUNET_TRANSPORT_UpdateSessionTimeout update_session_timeout; | |
| | | | |
| | | /** | |
| | | * Function that is used to query keepalive factor. | |
| | | * GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT is divided by this number to | |
| | | * calculate the interval between keepalive packets. | |
| | | */ | |
| | | GNUNET_TRANSPORT_QueryKeepaliveFactorFunction query_keepalive_factor; | |
| | | | |
| /** | | /** | |
| * Function to pretty-print addresses. NOTE: this function is not | | * Function to pretty-print addresses. NOTE: this function is not | |
| * yet used by transport-service, but will be used in the future | | * yet used by transport-service, but will be used in the future | |
| * once the transport-API has been completed. | | * once the transport-API has been completed. | |
| */ | | */ | |
| GNUNET_TRANSPORT_AddressPrettyPrinter address_pretty_printer; | | GNUNET_TRANSPORT_AddressPrettyPrinter address_pretty_printer; | |
| | | | |
| /** | | /** | |
| * Function that will be called to check if a binary address | | * Function that will be called to check if a binary address | |
| | | | |
| skipping to change at line 511 | | skipping to change at line 620 | |
| * Function that will be called to convert a string address | | * Function that will be called to convert a string address | |
| * to binary (numeric conversion only). | | * to binary (numeric conversion only). | |
| */ | | */ | |
| GNUNET_TRANSPORT_StringToAddress string_to_address; | | GNUNET_TRANSPORT_StringToAddress string_to_address; | |
| | | | |
| /** | | /** | |
| * Function that will be called tell the plugin to create a session | | * Function that will be called tell the plugin to create a session | |
| * object | | * object | |
| */ | | */ | |
| GNUNET_TRANSPORT_CreateSession get_session; | | GNUNET_TRANSPORT_CreateSession get_session; | |
|
| | | | |
| | | /** | |
| | | * Function to obtain the network type for a session | |
| | | */ | |
| | | GNUNET_TRANSPORT_GetNetworkType get_network; | |
| }; | | }; | |
| | | | |
| #endif | | #endif | |
| | | | |
End of changes. 43 change blocks. |
| 162 lines changed or deleted | | 254 lines changed or added | |
|
| gnunet_tun_lib.h | | gnunet_tun_lib.h | |
| /* | | /* | |
| This file is part of GNUnet. | | This file is part of GNUnet. | |
|
| (C) 2010, 2011, 2012 Christian Grothoff | | (C) 2010-2013 Christian Grothoff | |
| | | | |
| GNUnet is free software; you can redistribute it and/or modify | | GNUnet is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published | | it under the terms of the GNU General Public License as published | |
| by the Free Software Foundation; either version 3, or (at your | | by the Free Software Foundation; either version 3, or (at your | |
| option) any later version. | | option) any later version. | |
| | | | |
| GNUnet is distributed in the hope that it will be useful, but | | GNUnet is distributed in the hope that it will be useful, but | |
| WITHOUT ANY WARRANTY; without even the implied warranty of | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| General Public License for more details. | | General Public License for more details. | |
| | | | |
| skipping to change at line 47 | | skipping to change at line 47 | |
| #define ETH_P_IPV4 0x0800 | | #define ETH_P_IPV4 0x0800 | |
| #endif | | #endif | |
| | | | |
| #ifndef ETH_P_IPV6 | | #ifndef ETH_P_IPV6 | |
| /** | | /** | |
| * Number for IPv6 | | * Number for IPv6 | |
| */ | | */ | |
| #define ETH_P_IPV6 0x86DD | | #define ETH_P_IPV6 0x86DD | |
| #endif | | #endif | |
| | | | |
|
| | | /** | |
| | | * Maximum regex string length for use with #GNUNET_TUN_ipv4toregexsearch. | |
| | | * | |
| | | * 8 bytes for IPv4, 4 bytes for port, 1 byte for "4", 2 bytes for "-", | |
| | | * one byte for 0-termination. | |
| | | */ | |
| | | #define GNUNET_TUN_IPV4_REGEXLEN 16 | |
| | | | |
| | | /** | |
| | | * Maximum regex string length for use with #GNUNET_TUN_ipv6toregexsearch | |
| | | * | |
| | | * 32 bytes for IPv4, 4 bytes for port, 1 byte for "4", 2 bytes for "-", | |
| | | * one byte for 0-termination. | |
| | | */ | |
| | | #define GNUNET_TUN_IPV6_REGEXLEN 40 | |
| | | | |
| GNUNET_NETWORK_STRUCT_BEGIN | | GNUNET_NETWORK_STRUCT_BEGIN | |
| | | | |
| /** | | /** | |
| * Header from Linux TUN interface. | | * Header from Linux TUN interface. | |
| */ | | */ | |
| struct GNUNET_TUN_Layer2PacketHeader | | struct GNUNET_TUN_Layer2PacketHeader | |
| { | | { | |
| /** | | /** | |
| * Some flags (unused). | | * Some flags (unused). | |
| */ | | */ | |
| | | | |
| skipping to change at line 169 | | skipping to change at line 185 | |
| * Destination of the packet. | | * Destination of the packet. | |
| */ | | */ | |
| struct in6_addr destination_address GNUNET_PACKED; | | struct in6_addr destination_address GNUNET_PACKED; | |
| } GNUNET_GCC_STRUCT_LAYOUT; | | } GNUNET_GCC_STRUCT_LAYOUT; | |
| | | | |
| /** | | /** | |
| * TCP packet header. | | * TCP packet header. | |
| */ | | */ | |
| struct GNUNET_TUN_TcpHeader | | struct GNUNET_TUN_TcpHeader | |
| { | | { | |
|
| | | /** | |
| | | * Source port (in NBO). | |
| | | */ | |
| uint16_t source_port GNUNET_PACKED; | | uint16_t source_port GNUNET_PACKED; | |
|
| | | | |
| | | /** | |
| | | * Destination port (in NBO). | |
| | | */ | |
| uint16_t destination_port GNUNET_PACKED; | | uint16_t destination_port GNUNET_PACKED; | |
| | | | |
| /** | | /** | |
| * Sequence number. | | * Sequence number. | |
| */ | | */ | |
| uint32_t seq GNUNET_PACKED; | | uint32_t seq GNUNET_PACKED; | |
| | | | |
| /** | | /** | |
| * Acknowledgement number. | | * Acknowledgement number. | |
| */ | | */ | |
| | | | |
| skipping to change at line 229 | | skipping to change at line 252 | |
| * Urgent pointer. | | * Urgent pointer. | |
| */ | | */ | |
| uint16_t urgent_pointer GNUNET_PACKED; | | uint16_t urgent_pointer GNUNET_PACKED; | |
| } GNUNET_GCC_STRUCT_LAYOUT; | | } GNUNET_GCC_STRUCT_LAYOUT; | |
| | | | |
| /** | | /** | |
| * UDP packet header. | | * UDP packet header. | |
| */ | | */ | |
| struct GNUNET_TUN_UdpHeader | | struct GNUNET_TUN_UdpHeader | |
| { | | { | |
|
| | | /** | |
| | | * Source port (in NBO). | |
| | | */ | |
| uint16_t source_port GNUNET_PACKED; | | uint16_t source_port GNUNET_PACKED; | |
|
| | | | |
| | | /** | |
| | | * Destination port (in NBO). | |
| | | */ | |
| uint16_t destination_port GNUNET_PACKED; | | uint16_t destination_port GNUNET_PACKED; | |
|
| | | | |
| | | /** | |
| | | * Number of bytes of payload. | |
| | | */ | |
| uint16_t len GNUNET_PACKED; | | uint16_t len GNUNET_PACKED; | |
|
| | | | |
| | | /** | |
| | | * Checksum. | |
| | | */ | |
| uint16_t crc GNUNET_PACKED; | | uint16_t crc GNUNET_PACKED; | |
| }; | | }; | |
| | | | |
| /** | | /** | |
|
| | | * A few common DNS classes (ok, only one is common, but I list a | |
| | | * couple more to make it clear what we're talking about here). | |
| | | */ | |
| | | #define GNUNET_TUN_DNS_CLASS_INTERNET 1 | |
| | | #define GNUNET_TUN_DNS_CLASS_CHAOS 3 | |
| | | #define GNUNET_TUN_DNS_CLASS_HESIOD 4 | |
| | | | |
| | | #define GNUNET_TUN_DNS_OPCODE_QUERY 0 | |
| | | #define GNUNET_TUN_DNS_OPCODE_INVERSE_QUERY 1 | |
| | | #define GNUNET_TUN_DNS_OPCODE_STATUS 2 | |
| | | | |
| | | /** | |
| | | * RFC 1035 codes. | |
| | | */ | |
| | | #define GNUNET_TUN_DNS_RETURN_CODE_NO_ERROR 0 | |
| | | #define GNUNET_TUN_DNS_RETURN_CODE_FORMAT_ERROR 1 | |
| | | #define GNUNET_TUN_DNS_RETURN_CODE_SERVER_FAILURE 2 | |
| | | #define GNUNET_TUN_DNS_RETURN_CODE_NAME_ERROR 3 | |
| | | #define GNUNET_TUN_DNS_RETURN_CODE_NOT_IMPLEMENTED 4 | |
| | | #define GNUNET_TUN_DNS_RETURN_CODE_REFUSED 5 | |
| | | | |
| | | /** | |
| | | * RFC 2136 codes | |
| | | */ | |
| | | #define GNUNET_TUN_DNS_RETURN_CODE_YXDOMAIN 6 | |
| | | #define GNUNET_TUN_DNS_RETURN_CODE_YXRRSET 7 | |
| | | #define GNUNET_TUN_DNS_RETURN_CODE_NXRRSET 8 | |
| | | #define GNUNET_TUN_DNS_RETURN_CODE_NOT_AUTH 9 | |
| | | #define GNUNET_TUN_DNS_RETURN_CODE_NOT_ZONE 10 | |
| | | | |
| | | /** | |
| | | * DNS flags (largely RFC 1035 / RFC 2136). | |
| | | */ | |
| | | struct GNUNET_TUN_DnsFlags | |
| | | { | |
| | | #if __BYTE_ORDER == __LITTLE_ENDIAN | |
| | | /** | |
| | | * Set to 1 if recursion is desired (client -> server) | |
| | | */ | |
| | | unsigned int recursion_desired : 1 GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * Set to 1 if message is truncated | |
| | | */ | |
| | | unsigned int message_truncated : 1 GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * Set to 1 if this is an authoritative answer | |
| | | */ | |
| | | unsigned int authoritative_answer : 1 GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * See GNUNET_TUN_DNS_OPCODE_ defines. | |
| | | */ | |
| | | unsigned int opcode : 4 GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * query:0, response:1 | |
| | | */ | |
| | | unsigned int query_or_response : 1 GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * See GNUNET_TUN_DNS_RETURN_CODE_ defines. | |
| | | */ | |
| | | unsigned int return_code : 4 GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * See RFC 4035. | |
| | | */ | |
| | | unsigned int checking_disabled : 1 GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * Response has been cryptographically verified, RFC 4035. | |
| | | */ | |
| | | unsigned int authenticated_data : 1 GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * Always zero. | |
| | | */ | |
| | | unsigned int zero : 1 GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * Set to 1 if recursion is available (server -> client) | |
| | | */ | |
| | | unsigned int recursion_available : 1 GNUNET_PACKED; | |
| | | #elif __BYTE_ORDER == __BIG_ENDIAN | |
| | | | |
| | | /** | |
| | | * query:0, response:1 | |
| | | */ | |
| | | unsigned int query_or_response : 1 GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * See GNUNET_TUN_DNS_OPCODE_ defines. | |
| | | */ | |
| | | unsigned int opcode : 4 GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * Set to 1 if this is an authoritative answer | |
| | | */ | |
| | | unsigned int authoritative_answer : 1 GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * Set to 1 if message is truncated | |
| | | */ | |
| | | unsigned int message_truncated : 1 GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * Set to 1 if recursion is desired (client -> server) | |
| | | */ | |
| | | unsigned int recursion_desired : 1 GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * Set to 1 if recursion is available (server -> client) | |
| | | */ | |
| | | unsigned int recursion_available : 1 GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * Always zero. | |
| | | */ | |
| | | unsigned int zero : 1 GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * Response has been cryptographically verified, RFC 4035. | |
| | | */ | |
| | | unsigned int authenticated_data : 1 GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * See RFC 4035. | |
| | | */ | |
| | | unsigned int checking_disabled : 1 GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * See GNUNET_TUN_DNS_RETURN_CODE_ defines. | |
| | | */ | |
| | | unsigned int return_code : 4 GNUNET_PACKED; | |
| | | #else | |
| | | #error byteorder undefined | |
| | | #endif | |
| | | | |
| | | } GNUNET_GCC_STRUCT_LAYOUT; | |
| | | | |
| | | /** | |
| * DNS header. | | * DNS header. | |
| */ | | */ | |
| struct GNUNET_TUN_DnsHeader | | struct GNUNET_TUN_DnsHeader | |
| { | | { | |
|
| | | /** | |
| | | * Unique identifier for the request/response. | |
| | | */ | |
| uint16_t id GNUNET_PACKED; | | uint16_t id GNUNET_PACKED; | |
|
| uint16_t flags GNUNET_PACKED; | | | |
| uint16_t qdcount GNUNET_PACKED; | | /** | |
| uint16_t ancount GNUNET_PACKED; | | * Flags. | |
| uint16_t nscount GNUNET_PACKED; | | */ | |
| uint16_t arcount GNUNET_PACKED; | | struct GNUNET_TUN_DnsFlags flags; | |
| | | | |
| | | /** | |
| | | * Number of queries. | |
| | | */ | |
| | | uint16_t query_count GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * Number of answers. | |
| | | */ | |
| | | uint16_t answer_rcount GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * Number of authoritative answers. | |
| | | */ | |
| | | uint16_t authority_rcount GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * Number of additional records. | |
| | | */ | |
| | | uint16_t additional_rcount GNUNET_PACKED; | |
| | | }; | |
| | | | |
| | | /** | |
| | | * Payload of DNS SOA record (header). | |
| | | */ | |
| | | struct GNUNET_TUN_DnsSoaRecord | |
| | | { | |
| | | /** | |
| | | * The version number of the original copy of the zone. (NBO) | |
| | | */ | |
| | | uint32_t serial GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * Time interval before the zone should be refreshed. (NBO) | |
| | | */ | |
| | | uint32_t refresh GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * Time interval that should elapse before a failed refresh should | |
| | | * be retried. (NBO) | |
| | | */ | |
| | | uint32_t retry GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * Time value that specifies the upper limit on the time interval | |
| | | * that can elapse before the zone is no longer authoritative. (NBO) | |
| | | */ | |
| | | uint32_t expire GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * The bit minimum TTL field that should be exported with any RR | |
| | | * from this zone. (NBO) | |
| | | */ | |
| | | uint32_t minimum GNUNET_PACKED; | |
| | | }; | |
| | | | |
| | | /** | |
| | | * Payload of DNS SRV record (header). | |
| | | */ | |
| | | struct GNUNET_TUN_DnsSrvRecord | |
| | | { | |
| | | | |
| | | /** | |
| | | * Preference for this entry (lower value is higher preference). Clients | |
| | | * will contact hosts from the lowest-priority group first and fall back | |
| | | * to higher priorities if the low-priority entries are unavailable. (NBO | |
| | | ) | |
| | | */ | |
| | | uint16_t prio GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * Relative weight for records with the same priority. Clients will use | |
| | | * the hosts of the same (lowest) priority with a probability proportiona | |
| | | l | |
| | | * to the weight given. (NBO) | |
| | | */ | |
| | | uint16_t weight GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * TCP or UDP port of the service. (NBO) | |
| | | */ | |
| | | uint16_t port GNUNET_PACKED; | |
| | | | |
| | | /* followed by 'target' name */ | |
| | | }; | |
| | | | |
| | | /** | |
| | | * Payload of DNS CERT record. | |
| | | */ | |
| | | struct GNUNET_TUN_DnsCertRecord | |
| | | { | |
| | | | |
| | | /** | |
| | | * Certificate type | |
| | | */ | |
| | | uint16_t cert_type; | |
| | | | |
| | | /** | |
| | | * Certificate KeyTag | |
| | | */ | |
| | | uint16_t cert_tag; | |
| | | | |
| | | /** | |
| | | * Algorithm | |
| | | */ | |
| | | uint8_t algorithm; | |
| | | | |
| | | /* Followed by the certificate */ | |
| | | }; | |
| | | | |
| | | /** | |
| | | * Payload of DNSSEC TLSA record. | |
| | | * http://datatracker.ietf.org/doc/draft-ietf-dane-protocol/ | |
| | | */ | |
| | | struct GNUNET_TUN_DnsTlsaRecord | |
| | | { | |
| | | | |
| | | /** | |
| | | * Certificate usage | |
| | | * 0: CA cert | |
| | | * 1: Entity cert | |
| | | * 2: Trust anchor | |
| | | * 3: domain-issued cert | |
| | | */ | |
| | | uint8_t usage; | |
| | | | |
| | | /** | |
| | | * Selector | |
| | | * What part will be matched against the cert | |
| | | * presented by server | |
| | | * 0: Full cert (in binary) | |
| | | * 1: Full cert (in DER) | |
| | | */ | |
| | | uint8_t selector; | |
| | | | |
| | | /** | |
| | | * Matching type (of selected content) | |
| | | * 0: exact match | |
| | | * 1: SHA-256 hash | |
| | | * 2: SHA-512 hash | |
| | | */ | |
| | | uint8_t matching_type; | |
| | | | |
| | | /** | |
| | | * followed by certificate association data | |
| | | * The "certificate association data" to be matched. | |
| | | * These bytes are either raw data (that is, the full certificate or | |
| | | * its SubjectPublicKeyInfo, depending on the selector) for matching | |
| | | * type 0, or the hash of the raw data for matching types 1 and 2. | |
| | | * The data refers to the certificate in the association, not to the | |
| | | * TLS ASN.1 Certificate object. | |
| | | * | |
| | | * The data is represented as a string of hex chars | |
| | | */ | |
| | | }; | |
| | | | |
| | | /** | |
| | | * Payload of GNS VPN record | |
| | | */ | |
| | | struct GNUNET_TUN_GnsVpnRecord | |
| | | { | |
| | | /** | |
| | | * The peer to contact | |
| | | */ | |
| | | struct GNUNET_PeerIdentity peer; | |
| | | | |
| | | /** | |
| | | * The protocol to use | |
| | | */ | |
| | | uint16_t proto; | |
| | | | |
| | | /* followed by the servicename */ | |
| | | }; | |
| | | | |
| | | /** | |
| | | * DNS query prefix. | |
| | | */ | |
| | | struct GNUNET_TUN_DnsQueryLine | |
| | | { | |
| | | /** | |
| | | * Desired type (GNUNET_DNSPARSER_TYPE_XXX). (NBO) | |
| | | */ | |
| | | uint16_t type GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * Desired class (usually GNUNET_TUN_DNS_CLASS_INTERNET). (NBO) | |
| | | */ | |
| | | uint16_t dns_traffic_class GNUNET_PACKED; | |
| | | }; | |
| | | | |
| | | /** | |
| | | * General DNS record prefix. | |
| | | */ | |
| | | struct GNUNET_TUN_DnsRecordLine | |
| | | { | |
| | | /** | |
| | | * Record type (GNUNET_DNSPARSER_TYPE_XXX). (NBO) | |
| | | */ | |
| | | uint16_t type GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * Record class (usually GNUNET_TUN_DNS_CLASS_INTERNET). (NBO) | |
| | | */ | |
| | | uint16_t dns_traffic_class GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * Expiration for the record (in seconds). (NBO) | |
| | | */ | |
| | | uint32_t ttl GNUNET_PACKED; | |
| | | | |
| | | /** | |
| | | * Number of bytes of data that follow. (NBO) | |
| | | */ | |
| | | uint16_t data_len GNUNET_PACKED; | |
| }; | | }; | |
| | | | |
| #define GNUNET_TUN_ICMPTYPE_ECHO_REPLY 0 | | #define GNUNET_TUN_ICMPTYPE_ECHO_REPLY 0 | |
| #define GNUNET_TUN_ICMPTYPE_DESTINATION_UNREACHABLE 3 | | #define GNUNET_TUN_ICMPTYPE_DESTINATION_UNREACHABLE 3 | |
| #define GNUNET_TUN_ICMPTYPE_SOURCE_QUENCH 4 | | #define GNUNET_TUN_ICMPTYPE_SOURCE_QUENCH 4 | |
| #define GNUNET_TUN_ICMPTYPE_REDIRECT_MESSAGE 5 | | #define GNUNET_TUN_ICMPTYPE_REDIRECT_MESSAGE 5 | |
| #define GNUNET_TUN_ICMPTYPE_ECHO_REQUEST 8 | | #define GNUNET_TUN_ICMPTYPE_ECHO_REQUEST 8 | |
| #define GNUNET_TUN_ICMPTYPE_ROUTER_ADVERTISEMENT 9 | | #define GNUNET_TUN_ICMPTYPE_ROUTER_ADVERTISEMENT 9 | |
| #define GNUNET_TUN_ICMPTYPE_ROUTER_SOLICITATION 10 | | #define GNUNET_TUN_ICMPTYPE_ROUTER_SOLICITATION 10 | |
| #define GNUNET_TUN_ICMPTYPE_TIME_EXCEEDED 11 | | #define GNUNET_TUN_ICMPTYPE_TIME_EXCEEDED 11 | |
| | | | |
| skipping to change at line 267 | | skipping to change at line 663 | |
| #define GNUNET_TUN_ICMPTYPE6_DESTINATION_UNREACHABLE 1 | | #define GNUNET_TUN_ICMPTYPE6_DESTINATION_UNREACHABLE 1 | |
| #define GNUNET_TUN_ICMPTYPE6_PACKET_TOO_BIG 2 | | #define GNUNET_TUN_ICMPTYPE6_PACKET_TOO_BIG 2 | |
| #define GNUNET_TUN_ICMPTYPE6_TIME_EXCEEDED 3 | | #define GNUNET_TUN_ICMPTYPE6_TIME_EXCEEDED 3 | |
| #define GNUNET_TUN_ICMPTYPE6_PARAMETER_PROBLEM 4 | | #define GNUNET_TUN_ICMPTYPE6_PARAMETER_PROBLEM 4 | |
| #define GNUNET_TUN_ICMPTYPE6_ECHO_REQUEST 128 | | #define GNUNET_TUN_ICMPTYPE6_ECHO_REQUEST 128 | |
| #define GNUNET_TUN_ICMPTYPE6_ECHO_REPLY 129 | | #define GNUNET_TUN_ICMPTYPE6_ECHO_REPLY 129 | |
| | | | |
| /** | | /** | |
| * ICMP header. | | * ICMP header. | |
| */ | | */ | |
|
| struct GNUNET_TUN_IcmpHeader { | | struct GNUNET_TUN_IcmpHeader | |
| | | { | |
| uint8_t type; | | uint8_t type; | |
| uint8_t code; | | uint8_t code; | |
| uint16_t crc GNUNET_PACKED; | | uint16_t crc GNUNET_PACKED; | |
| | | | |
|
| union { | | union | |
| | | { | |
| /** | | /** | |
| * ICMP Echo (request/reply) | | * ICMP Echo (request/reply) | |
| */ | | */ | |
|
| struct { | | struct | |
| | | { | |
| uint16_t identifier GNUNET_PACKED; | | uint16_t identifier GNUNET_PACKED; | |
| uint16_t sequence_number GNUNET_PACKED; | | uint16_t sequence_number GNUNET_PACKED; | |
| } echo; | | } echo; | |
| | | | |
| /** | | /** | |
| * ICMP Destination Unreachable (RFC 1191) | | * ICMP Destination Unreachable (RFC 1191) | |
| */ | | */ | |
|
| struct ih_pmtu { | | struct ih_pmtu | |
| | | { | |
| uint16_t empty GNUNET_PACKED; | | uint16_t empty GNUNET_PACKED; | |
| uint16_t next_hop_mtu GNUNET_PACKED; | | uint16_t next_hop_mtu GNUNET_PACKED; | |
| /* followed by original IP header + first 8 bytes of original IP data
gram */ | | /* followed by original IP header + first 8 bytes of original IP data
gram */ | |
| } destination_unreachable; | | } destination_unreachable; | |
| | | | |
| /** | | /** | |
| * ICMP Redirect | | * ICMP Redirect | |
| */ | | */ | |
| struct in_addr redirect_gateway_address GNUNET_PACKED; | | struct in_addr redirect_gateway_address GNUNET_PACKED; | |
| | | | |
| | | | |
| skipping to change at line 344 | | skipping to change at line 744 | |
| uint16_t payload_length, | | uint16_t payload_length, | |
| const struct in6_addr *src, | | const struct in6_addr *src, | |
| const struct in6_addr *dst); | | const struct in6_addr *dst); | |
| | | | |
| /** | | /** | |
| * Calculate IPv4 TCP checksum. | | * Calculate IPv4 TCP checksum. | |
| * | | * | |
| * @param ip ipv4 header fully initialized | | * @param ip ipv4 header fully initialized | |
| * @param tcp TCP header (initialized except for CRC) | | * @param tcp TCP header (initialized except for CRC) | |
| * @param payload the TCP payload | | * @param payload the TCP payload | |
|
| * @param payload_length number of bytes of TCP payload | | * @param payload_length number of bytes of TCP @a payload | |
| */ | | */ | |
| void | | void | |
| GNUNET_TUN_calculate_tcp4_checksum (const struct GNUNET_TUN_IPv4Header *ip, | | GNUNET_TUN_calculate_tcp4_checksum (const struct GNUNET_TUN_IPv4Header *ip, | |
| struct GNUNET_TUN_TcpHeader *tcp, | | struct GNUNET_TUN_TcpHeader *tcp, | |
| const void *payload, | | const void *payload, | |
| uint16_t payload_length); | | uint16_t payload_length); | |
| | | | |
| /** | | /** | |
| * Calculate IPv6 TCP checksum. | | * Calculate IPv6 TCP checksum. | |
| * | | * | |
| | | | |
| skipping to change at line 372 | | skipping to change at line 772 | |
| struct GNUNET_TUN_TcpHeader *tcp, | | struct GNUNET_TUN_TcpHeader *tcp, | |
| const void *payload, | | const void *payload, | |
| uint16_t payload_length); | | uint16_t payload_length); | |
| | | | |
| /** | | /** | |
| * Calculate IPv4 UDP checksum. | | * Calculate IPv4 UDP checksum. | |
| * | | * | |
| * @param ip ipv4 header fully initialized | | * @param ip ipv4 header fully initialized | |
| * @param udp UDP header (initialized except for CRC) | | * @param udp UDP header (initialized except for CRC) | |
| * @param payload the UDP payload | | * @param payload the UDP payload | |
|
| * @param payload_length number of bytes of UDP payload | | * @param payload_length number of bytes of UDP @a payload | |
| */ | | */ | |
| void | | void | |
| GNUNET_TUN_calculate_udp4_checksum (const struct GNUNET_TUN_IPv4Header *ip, | | GNUNET_TUN_calculate_udp4_checksum (const struct GNUNET_TUN_IPv4Header *ip, | |
| struct GNUNET_TUN_UdpHeader *udp, | | struct GNUNET_TUN_UdpHeader *udp, | |
| const void *payload, | | const void *payload, | |
| uint16_t payload_length); | | uint16_t payload_length); | |
| | | | |
| /** | | /** | |
| * Calculate IPv6 UDP checksum. | | * Calculate IPv6 UDP checksum. | |
| * | | * | |
| * @param ip ipv6 header fully initialized | | * @param ip ipv6 header fully initialized | |
| * @param udp UDP header (initialized except for CRC) | | * @param udp UDP header (initialized except for CRC) | |
| * @param payload the UDP payload | | * @param payload the UDP payload | |
|
| * @param payload_length number of bytes of UDP payload | | * @param payload_length number of bytes of @a payload | |
| */ | | */ | |
| void | | void | |
| GNUNET_TUN_calculate_udp6_checksum (const struct GNUNET_TUN_IPv6Header *ip, | | GNUNET_TUN_calculate_udp6_checksum (const struct GNUNET_TUN_IPv6Header *ip, | |
| struct GNUNET_TUN_UdpHeader *udp, | | struct GNUNET_TUN_UdpHeader *udp, | |
| const void *payload, | | const void *payload, | |
| uint16_t payload_length); | | uint16_t payload_length); | |
| | | | |
| /** | | /** | |
| * Calculate ICMP checksum. | | * Calculate ICMP checksum. | |
| * | | * | |
| * @param icmp IMCP header (initialized except for CRC) | | * @param icmp IMCP header (initialized except for CRC) | |
| * @param payload the ICMP payload | | * @param payload the ICMP payload | |
|
| * @param payload_length number of bytes of ICMP payload | | * @param payload_length number of bytes of @a payload | |
| */ | | */ | |
| void | | void | |
| GNUNET_TUN_calculate_icmp_checksum (struct GNUNET_TUN_IcmpHeader *icmp, | | GNUNET_TUN_calculate_icmp_checksum (struct GNUNET_TUN_IcmpHeader *icmp, | |
| const void *payload, | | const void *payload, | |
| uint16_t payload_length); | | uint16_t payload_length); | |
| | | | |
|
| | | /** | |
| | | * Create a regex in @a rxstr from the given @a ip and @a port. | |
| | | * | |
| | | * @param ip IPv4 representation. | |
| | | * @param port destination port | |
| | | * @param rxstr generated regex, must be at least #GNUNET_TUN_IPV4_REGEXLEN | |
| | | * bytes long. | |
| | | */ | |
| | | void | |
| | | GNUNET_TUN_ipv4toregexsearch (const struct in_addr *ip, | |
| | | uint16_t port, | |
| | | char *rxstr); | |
| | | | |
| | | /** | |
| | | * Create a regex in @a rxstr from the given @a ipv6 and @a port. | |
| | | * | |
| | | * @param ipv6 IPv6 representation. | |
| | | * @param port destination port | |
| | | * @param rxstr generated regex, must be at least #GNUNET_TUN_IPV6_REGEXLEN | |
| | | * bytes long. | |
| | | */ | |
| | | void | |
| | | GNUNET_TUN_ipv6toregexsearch (const struct in6_addr *ipv6, | |
| | | uint16_t port, | |
| | | char *rxstr); | |
| | | | |
| | | /** | |
| | | * Convert an exit policy to a regular expression. The exit policy | |
| | | * specifies a set of subnets this peer is willing to serve as an | |
| | | * exit for; the resulting regular expression will match the | |
| | | * IPv6 address strings as returned by #GNUNET_TUN_ipv6toregexsearch. | |
| | | * | |
| | | * @param policy exit policy specification | |
| | | * @return regular expression, NULL on error | |
| | | */ | |
| | | char * | |
| | | GNUNET_TUN_ipv6policy2regex (const char *policy); | |
| | | | |
| | | /** | |
| | | * Convert an exit policy to a regular expression. The exit policy | |
| | | * specifies a set of subnets this peer is willing to serve as an | |
| | | * exit for; the resulting regular expression will match the | |
| | | * IPv4 address strings as returned by #GNUNET_TUN_ipv4toregexsearch. | |
| | | * | |
| | | * @param policy exit policy specification | |
| | | * @return regular expression, NULL on error | |
| | | */ | |
| | | char * | |
| | | GNUNET_TUN_ipv4policy2regex (const char *policy); | |
| | | | |
| | | /** | |
| | | * Hash the service name of a hosted service to the | |
| | | * hash code that is used to identify the service on | |
| | | * the network. | |
| | | * | |
| | | * @param service_name a string | |
| | | * @param hc corresponding hash | |
| | | */ | |
| | | void | |
| | | GNUNET_TUN_service_name_to_hash (const char *service_name, | |
| | | struct GNUNET_HashCode *hc); | |
| | | | |
| #endif | | #endif | |
| | | | |
End of changes. 20 change blocks. |
| 14 lines changed or deleted | | 478 lines changed or added | |
|
| plibc.h | | plibc.h | |
| | | | |
| skipping to change at line 25 | | skipping to change at line 25 | |
| You should have received a copy of the GNU Lesser General Public | | You should have received a copy of the GNU Lesser General Public | |
| License along with this library; if not, write to the Free Softwa
re | | License along with this library; if not, write to the Free Softwa
re | |
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1
307 USA | | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1
307 USA | |
| */ | | */ | |
| | | | |
| /** | | /** | |
| * @file include/plibc.h | | * @file include/plibc.h | |
| * @brief PlibC header | | * @brief PlibC header | |
| * @attention This file is usually not installed under Unix, | | * @attention This file is usually not installed under Unix, | |
| * so ship it with your application | | * so ship it with your application | |
|
| * @version $Revision: 84 $ | | * @version $Revision$ | |
| */ | | */ | |
| | | | |
| #ifndef _PLIBC_H_ | | #ifndef _PLIBC_H_ | |
| #define _PLIBC_H_ | | #define _PLIBC_H_ | |
| | | | |
| #ifndef SIGALRM | | #ifndef SIGALRM | |
| #define SIGALRM 14 | | #define SIGALRM 14 | |
| #endif | | #endif | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| | | | |
| skipping to change at line 73 | | skipping to change at line 73 | |
| | | | |
| #define __BYTE_ORDER BYTE_ORDER | | #define __BYTE_ORDER BYTE_ORDER | |
| #define __BIG_ENDIAN BIG_ENDIAN | | #define __BIG_ENDIAN BIG_ENDIAN | |
| | | | |
| /* Conflicts with our definitions */ | | /* Conflicts with our definitions */ | |
| #define __G_WIN32_H__ | | #define __G_WIN32_H__ | |
| | | | |
| /* Convert LARGE_INTEGER to double */ | | /* Convert LARGE_INTEGER to double */ | |
| #define Li2Double(x) ((double)((x).HighPart) * 4.294967296E9 + \ | | #define Li2Double(x) ((double)((x).HighPart) * 4.294967296E9 + \ | |
| (double)((x).LowPart)) | | (double)((x).LowPart)) | |
|
| #ifndef __MINGW64__ | | #ifndef HAVE_DECL__STATI64 | |
| struct stat64 | | struct _stati64 | |
| { | | { | |
| _dev_t st_dev; | | _dev_t st_dev; | |
| _ino_t st_ino; | | _ino_t st_ino; | |
| _mode_t st_mode; | | _mode_t st_mode; | |
| short st_nlink; | | short st_nlink; | |
| short st_uid; | | short st_uid; | |
| short st_gid; | | short st_gid; | |
| _dev_t st_rdev; | | _dev_t st_rdev; | |
| __int64 st_size; | | __int64 st_size; | |
|
| __time64_t st_atime; | | time_t st_atime; | |
| __time64_t st_mtime; | | time_t st_mtime; | |
| __time64_t st_ctime; | | time_t st_ctime; | |
| }; | | }; | |
| #endif | | #endif | |
| typedef unsigned int sa_family_t; | | typedef unsigned int sa_family_t; | |
| | | | |
| struct sockaddr_un { | | struct sockaddr_un { | |
| short sun_family; /*AF_UNIX*/ | | short sun_family; /*AF_UNIX*/ | |
| char sun_path[108]; /*path name */ | | char sun_path[108]; /*path name */ | |
| }; | | }; | |
| | | | |
| #ifndef pid_t | | #ifndef pid_t | |
| | | | |
| skipping to change at line 118 | | skipping to change at line 118 | |
| #ifndef MSG_DONTWAIT | | #ifndef MSG_DONTWAIT | |
| #define MSG_DONTWAIT 0 | | #define MSG_DONTWAIT 0 | |
| #endif | | #endif | |
| | | | |
| enum | | enum | |
| { | | { | |
| _SC_PAGESIZE = 30, | | _SC_PAGESIZE = 30, | |
| _SC_PAGE_SIZE = 30 | | _SC_PAGE_SIZE = 30 | |
| }; | | }; | |
| | | | |
|
| | | #if !defined(EACCESS) | |
| | | # define EACCESS EACCES | |
| | | #endif | |
| | | | |
| /* Thanks to the Cygwin project */ | | /* Thanks to the Cygwin project */ | |
|
| #define ENOCSI 43 /* No CSI structure available */ | | #if !defined(ENOCSI) | |
| #define EL2HLT 44 /* Level 2 halted */ | | # define ENOCSI 43 /* No CSI structure available */ | |
| #ifndef EDEADLK | | #endif | |
| #define EDEADLK 45 /* Deadlock condition */ | | #if !defined(EL2HLT) | |
| #endif | | # define EL2HLT 44 /* Level 2 halted */ | |
| #ifndef ENOLCK | | #endif | |
| #define ENOLCK 46 /* No record locks available */ | | #if !defined(EDEADLK) | |
| #endif | | # define EDEADLK 45 /* Deadlock condition */ | |
| #define EBADE 50 /* Invalid exchange */ | | #endif | |
| #define EBADR 51 /* Invalid request descriptor */ | | #if !defined(ENOLCK) | |
| #define EXFULL 52 /* Exchange full */ | | # define ENOLCK 46 /* No record locks available */ | |
| #define ENOANO 53 /* No anode */ | | #endif | |
| #define EBADRQC 54 /* Invalid request code */ | | #if !defined(EBADE) | |
| #define EBADSLT 55 /* Invalid slot */ | | # define EBADE 50 /* Invalid exchange */ | |
| #ifndef EDEADLOCK | | #endif | |
| #define EDEADLOCK EDEADLK /* File locking deadlock error */ | | #if !defined(EBADR) | |
| #endif | | # define EBADR 51 /* Invalid request descriptor */ | |
| #define EBFONT 57 /* Bad font file fmt */ | | #endif | |
| #define ENOSTR 60 /* Device not a stream */ | | #if !defined(EXFULL) | |
| #define ENODATA 61 /* No data (for no delay io) */ | | # define EXFULL 52 /* Exchange full */ | |
| #define ETIME 62 /* Timer expired */ | | #endif | |
| #define ENOSR 63 /* Out of streams resources */ | | #if !defined(ENOANO) | |
| #define ENONET 64 /* Machine is not on the network */ | | # define ENOANO 53 /* No anode */ | |
| #define ENOPKG 65 /* Package not installed */ | | #endif | |
| #define EREMOTE 66 /* The object is remote */ | | #if !defined(EBADRQC) | |
| #define ENOLINK 67 /* The link has been severed */ | | # define EBADRQC 54 /* Invalid request code */ | |
| #define EADV 68 /* Advertise error */ | | #endif | |
| #define ESRMNT 69 /* Srmount error */ | | #if !defined(EBADSLT) | |
| #define ECOMM 70 /* Communication error on send */ | | # define EBADSLT 55 /* Invalid slot */ | |
| #define EPROTO 71 /* Protocol error */ | | #endif | |
| #define EMULTIHOP 74 /* Multihop attempted */ | | #if !defined(EDEADLOCK) | |
| #define ELBIN 75 /* Inode is remote (not really error) */ | | # define EDEADLOCK EDEADLK /* File locking deadlock error */ | |
| #define EDOTDOT 76 /* Cross mount point (not really error) */ | | #endif | |
| #define EBADMSG 77 /* Trying to read unreadable message */ | | #if !defined(EBFONT) | |
| #define ENOTUNIQ 80 /* Given log. name not unique */ | | # define EBFONT 57 /* Bad font file fmt */ | |
| #define EBADFD 81 /* f.d. invalid for this operation */ | | #endif | |
| #define EREMCHG 82 /* Remote address changed */ | | #if !defined(ENOSTR) | |
| #define ELIBACC 83 /* Can't access a needed shared lib */ | | # define ENOSTR 60 /* Device not a stream */ | |
| #define ELIBBAD 84 /* Accessing a corrupted shared lib */ | | #endif | |
| #define ELIBSCN 85 /* .lib section in a.out corrupted */ | | #if !defined(ENODATA) | |
| #define ELIBMAX 86 /* Attempting to link in too many libs */ | | # define ENODATA 61 /* No data (for no delay io) */ | |
| #define ELIBEXEC 87 /* Attempting to exec a shared library */ | | #endif | |
| #ifndef ENOSYS | | #if !defined(ETIME) | |
| #define ENOSYS 88 /* Function not implemented */ | | # define ETIME 62 /* Timer expired */ | |
| #endif | | #endif | |
| #define ENMFILE 89 /* No more files */ | | #if !defined(ENOSR) | |
| #ifndef ENOTEMPTY | | # define ENOSR 63 /* Out of streams resources */ | |
| #define ENOTEMPTY 90 /* Directory not empty */ | | #endif | |
| #endif | | #if !defined(ENONET) | |
| #ifndef ENAMETOOLONG | | # define ENONET 64 /* Machine is not on the network */ | |
| #define ENAMETOOLONG 91 /* File or path name too long */ | | #endif | |
| #endif | | #if !defined(ENOPKG) | |
| #define ELOOP 92 /* Too many symbolic links */ | | # define ENOPKG 65 /* Package not installed */ | |
| #define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ | | #endif | |
| #define EPFNOSUPPORT 96 /* Protocol family not supported */ | | #if !defined(EREMOTE) | |
| #define ECONNRESET 104 /* Connection reset by peer */ | | # define EREMOTE 66 /* The object is remote */ | |
| #define ENOBUFS 105 /* No buffer space available */ | | #endif | |
| #define EAFNOSUPPORT 106 /* Address family not supported by protocol family | | #if !defined(ENOLINK) | |
| */ | | # define ENOLINK 67 /* The link has been severed */ | |
| #define EPROTOTYPE 107 /* Protocol wrong type for socket */ | | #endif | |
| #define ENOTSOCK 108 /* Socket operation on non-socket */ | | #if !defined(EADV) | |
| #define ENOPROTOOPT 109 /* Protocol not available */ | | # define EADV 68 /* Advertise error */ | |
| #define ESHUTDOWN 110 /* Can't send after socket shutdown */ | | #endif | |
| #define ECONNREFUSED 111 /* Connection refused */ | | #if !defined(ESRMNT) | |
| #define EADDRINUSE 112 /* Address already in use */ | | # define ESRMNT 69 /* Srmount error */ | |
| #define ECONNABORTED 113 /* Connection aborted */ | | #endif | |
| #define ENETUNREACH 114 /* Network is unreachable */ | | #if !defined(ECOMM) | |
| #define ENETDOWN 115 /* Network interface is not configured */ | | # define ECOMM 70 /* Communication error on send */ | |
| #ifndef ETIMEDOUT | | #endif | |
| #define ETIMEDOUT 116 /* Connection timed out */ | | #if !defined(EMULTIHOP) | |
| #endif | | # define EMULTIHOP 74 /* Multihop attempted */ | |
| #define EHOSTDOWN 117 /* Host is down */ | | #endif | |
| #define EHOSTUNREACH 118 /* Host is unreachable */ | | #if !defined(ELBIN) | |
| #define EINPROGRESS 119 /* Connection already in progress */ | | # define ELBIN 75 /* Inode is remote (not really error) */ | |
| #define EALREADY 120 /* Socket already connected */ | | #endif | |
| #define EDESTADDRREQ 121 /* Destination address required */ | | #if !defined(EDOTDOT) | |
| #define EMSGSIZE 122 /* Message too long */ | | # define EDOTDOT 76 /* Cross mount point (not really error) */ | |
| #define EPROTONOSUPPORT 123 /* Unknown protocol */ | | #endif | |
| #define ESOCKTNOSUPPORT 124 /* Socket type not supported */ | | #if !defined(EBADMSG) | |
| #define EADDRNOTAVAIL 125 /* Address not available */ | | # define EBADMSG 77 /* Trying to read unreadable message */ | |
| #define ENETRESET 126 /* Connection aborted by network */ | | #endif | |
| #define EISCONN 127 /* Socket is already connected */ | | #if !defined(ENOTUNIQ) | |
| #define ENOTCONN 128 /* Socket is not connected */ | | # define ENOTUNIQ 80 /* Given log. name not unique */ | |
| #define ETOOMANYREFS 129 /* Too many references: cannot splice */ | | #endif | |
| #define EPROCLIM 130 /* Too many processes */ | | #if !defined(EBADFD) | |
| #define EUSERS 131 /* Too many users */ | | # define EBADFD 81 /* f.d. invalid for this operation */ | |
| #define EDQUOT 132 /* Disk quota exceeded */ | | #endif | |
| #define ESTALE 133 /* Unknown error */ | | #if !defined(EREMCHG) | |
| #ifndef ENOTSUP | | # define EREMCHG 82 /* Remote address changed */ | |
| #define ENOTSUP 134 /* Not supported */ | | #endif | |
| #endif | | #if !defined(ELIBACC) | |
| #define ENOMEDIUM 135 /* No medium (in tape drive) */ | | # define ELIBACC 83 /* Can't access a needed shared lib */ | |
| #define ENOSHARE 136 /* No such host or network path */ | | #endif | |
| #define ECASECLASH 137 /* Filename exists with different case */ | | #if !defined(ELIBBAD) | |
| #define EWOULDBLOCK EAGAIN /* Operation would block */ | | # define ELIBBAD 84 /* Accessing a corrupted shared lib */ | |
| #define EOVERFLOW 139 /* Value too large for defined data type */ | | #endif | |
| | | #if !defined(ELIBSCN) | |
| | | # define ELIBSCN 85 /* .lib section in a.out corrupted */ | |
| | | #endif | |
| | | #if !defined(ELIBMAX) | |
| | | # define ELIBMAX 86 /* Attempting to link in too many libs */ | |
| | | #endif | |
| | | #if !defined(ELIBEXEC) | |
| | | # define ELIBEXEC 87 /* Attempting to exec a shared library */ | |
| | | #endif | |
| | | #if !defined(ENOSYS) | |
| | | # define ENOSYS 88 /* Function not implemented */ | |
| | | #endif | |
| | | #if !defined(ENMFILE) | |
| | | # define ENMFILE 89 /* No more files */ | |
| | | #endif | |
| | | #if !defined(ENOTEMPTY) | |
| | | # define ENOTEMPTY 90 /* Directory not empty */ | |
| | | #endif | |
| | | #if !defined(ENAMETOOLONG) | |
| | | # define ENAMETOOLONG 91 /* File or path name too long */ | |
| | | #endif | |
| | | #if !defined(EPFNOSUPPORT) | |
| | | # define EPFNOSUPPORT 96 /* Protocol family not supported */ | |
| | | #endif | |
| | | #if !defined(ENOSHARE) | |
| | | # define ENOSHARE 97 /* No such host or network path */ | |
| | | #endif | |
| | | #if !defined(ENOMEDIUM) | |
| | | # define ENOMEDIUM 98 /* No medium (in tape drive) */ | |
| | | #endif | |
| | | #if !defined(ESHUTDOWN) | |
| | | # define ESHUTDOWN 99 /* Can't send after socket shutdown */ | |
| | | #endif | |
| | | #if !defined(EADDRINUSE) | |
| | | # define EADDRINUSE 100 /* Address already in use */ | |
| | | #endif | |
| | | #if !defined(EADDRNOTAVAIL) | |
| | | # define EADDRNOTAVAIL 101 /* Address not available */ | |
| | | #endif | |
| | | #if !defined(EAFNOSUPPORT) | |
| | | # define EAFNOSUPPORT 102 /* Address family not supported by protocol fami | |
| | | ly */ | |
| | | #endif | |
| | | #if !defined(EALREADY) | |
| | | # define EALREADY 103 /* Socket already connected */ | |
| | | #endif | |
| | | #if !defined(ECANCELED) | |
| | | # define ECANCELED 105 /* Connection cancelled */ | |
| | | #endif | |
| | | #if !defined(ECONNABORTED) | |
| | | # define ECONNABORTED 106 /* Connection aborted */ | |
| | | #endif | |
| | | #if !defined(ECONNREFUSED) | |
| | | # define ECONNREFUSED 107 /* Connection refused */ | |
| | | #endif | |
| | | #if !defined(ECONNRESET) | |
| | | # define ECONNRESET 108 /* Connection reset by peer */ | |
| | | #endif | |
| | | #if !defined(EDESTADDRREQ) | |
| | | # define EDESTADDRREQ 109 /* Destination address required */ | |
| | | #endif | |
| | | #if !defined(EHOSTUNREACH) | |
| | | # define EHOSTUNREACH 110 /* Host is unreachable */ | |
| | | #endif | |
| | | #if !defined(ECONNABORTED) | |
| | | # define ECONNABORTED 111 /* Connection aborted */ | |
| | | #endif | |
| | | #if !defined(EINPROGRESS) | |
| | | # define EINPROGRESS 112 /* Connection already in progress */ | |
| | | #endif | |
| | | #if !defined(EISCONN) | |
| | | # define EISCONN 113 /* Socket is already connected */ | |
| | | #endif | |
| | | #if !defined(ELOOP) | |
| | | # define ELOOP 114 /* Too many symbolic links */ | |
| | | #endif | |
| | | #if !defined(EMSGSIZE) | |
| | | # define EMSGSIZE 115 /* Message too long */ | |
| | | #endif | |
| | | #if !defined(ENETDOWN) | |
| | | # define ENETDOWN 116 /* Network interface is not configured */ | |
| | | #endif | |
| | | #if !defined(ENETRESET) | |
| | | # define ENETRESET 117 /* Connection aborted by network */ | |
| | | #endif | |
| | | #if !defined(ENETUNREACH) | |
| | | # define ENETUNREACH 118 /* Network is unreachable */ | |
| | | #endif | |
| | | #if !defined(ENOBUFS) | |
| | | # define ENOBUFS 119 /* No buffer space available */ | |
| | | #endif | |
| | | #if !defined(EHOSTDOWN) | |
| | | # define EHOSTDOWN 120 /* Host is down */ | |
| | | #endif | |
| | | #if !defined(EPROCLIM) | |
| | | # define EPROCLIM 121 /* Too many processes */ | |
| | | #endif | |
| | | #if !defined(EDQUOT) | |
| | | # define EDQUOT 122 /* Disk quota exceeded */ | |
| | | #endif | |
| | | #if !defined(ENOPROTOOPT) | |
| | | # define ENOPROTOOPT 123 /* Protocol not available */ | |
| | | #endif | |
| | | #if !defined(ESOCKTNOSUPPORT) | |
| | | # define ESOCKTNOSUPPORT 124 /* Socket type not supported */ | |
| | | #endif | |
| | | #if !defined(ESTALE) | |
| | | # define ESTALE 125 /* Unknown error */ | |
| | | #endif | |
| | | #if !defined(ENOTCONN) | |
| | | # define ENOTCONN 126 /* Socket is not connected */ | |
| | | #endif | |
| | | #if !defined(ETOOMANYREFS) | |
| | | # define ETOOMANYREFS 127 /* Too many references: cannot splice */ | |
| | | #endif | |
| | | #if !defined(ENOTSOCK) | |
| | | # define ENOTSOCK 128 /* Socket operation on non-socket */ | |
| | | #endif | |
| | | #if !defined(ENOTSUP) | |
| | | # define ENOTSUP 129 /* Not supported */ | |
| | | #endif | |
| | | #if !defined(EOPNOTSUPP) | |
| | | # define EOPNOTSUPP 130 /* Operation not supported on transport endp | |
| | | oint */ | |
| | | #endif | |
| | | #if !defined(EUSERS) | |
| | | # define EUSERS 131 /* Too many users */ | |
| | | #endif | |
| | | #if !defined(EOVERFLOW) | |
| | | # define EOVERFLOW 132 /* Value too large for defined data type */ | |
| | | #endif | |
| | | #if !defined(EOWNERDEAD) | |
| | | # define EOWNERDEAD 133 /* Unknown error */ | |
| | | #endif | |
| | | #if !defined(EPROTO) | |
| | | # define EPROTO 134 /* Protocol error */ | |
| | | #endif | |
| | | #if !defined(EPROTONOSUPPORT) | |
| | | # define EPROTONOSUPPORT 135 /* Unknown protocol */ | |
| | | #endif | |
| | | #if !defined(EPROTOTYPE) | |
| | | # define EPROTOTYPE 136 /* Protocol wrong type for socket */ | |
| | | #endif | |
| | | #if !defined(ECASECLASH) | |
| | | # define ECASECLASH 137 /* Filename exists with different case */ | |
| | | #endif | |
| | | #if !defined(ETIMEDOUT) | |
| | | /* Make sure it's the same as WSATIMEDOUT */ | |
| | | # define ETIMEDOUT 138 /* Connection timed out */ | |
| | | #endif | |
| | | #if !defined(EWOULDBLOCK) || EWOULDBLOCK == 140 | |
| | | # undef EWOULDBLOCK /* MinGW-w64 defines it as 140, but we want it as EAGA | |
| | | IN */ | |
| | | # define EWOULDBLOCK EAGAIN /* Operation would block */ | |
| | | #endif | |
| | | | |
| #undef HOST_NOT_FOUND | | #undef HOST_NOT_FOUND | |
| #define HOST_NOT_FOUND 1 | | #define HOST_NOT_FOUND 1 | |
| #undef TRY_AGAIN | | #undef TRY_AGAIN | |
| #define TRY_AGAIN 2 | | #define TRY_AGAIN 2 | |
| #undef NO_RECOVERY | | #undef NO_RECOVERY | |
| #define NO_RECOVERY 3 | | #define NO_RECOVERY 3 | |
| #undef NO_ADDRESS | | #undef NO_ADDRESS | |
| #define NO_ADDRESS 4 | | #define NO_ADDRESS 4 | |
| | | | |
| | | | |
| skipping to change at line 250 | | skipping to change at line 407 | |
| long f_blocks; /* total data blocks in file system */ | | long f_blocks; /* total data blocks in file system */ | |
| long f_bfree; /* free blocks in fs */ | | long f_bfree; /* free blocks in fs */ | |
| long f_bavail; /* free blocks avail to non-superuser */ | | long f_bavail; /* free blocks avail to non-superuser */ | |
| long f_files; /* total file nodes in file system */ | | long f_files; /* total file nodes in file system */ | |
| long f_ffree; /* free file nodes in fs */ | | long f_ffree; /* free file nodes in fs */ | |
| long f_fsid; /* file system id */ | | long f_fsid; /* file system id */ | |
| long f_namelen; /* maximum length of filenames */ | | long f_namelen; /* maximum length of filenames */ | |
| long f_spare[6]; /* spare for later */ | | long f_spare[6]; /* spare for later */ | |
| }; | | }; | |
| | | | |
|
| extern const struct in6_addr in6addr_any; /* :: */ | | | |
| extern const struct in6_addr in6addr_loopback; /* ::1 */ | | | |
| | | | |
| /* Taken from the Wine project <http://www.winehq.org> | | /* Taken from the Wine project <http://www.winehq.org> | |
| /wine/include/winternl.h */ | | /wine/include/winternl.h */ | |
| enum SYSTEM_INFORMATION_CLASS | | enum SYSTEM_INFORMATION_CLASS | |
| { | | { | |
| SystemBasicInformation = 0, | | SystemBasicInformation = 0, | |
| Unknown1, | | Unknown1, | |
| SystemPerformanceInformation = 2, | | SystemPerformanceInformation = 2, | |
| SystemTimeOfDayInformation = 3, /* was SystemTimeInformation */ | | SystemTimeOfDayInformation = 3, /* was SystemTimeInformation */ | |
| Unknown4, | | Unknown4, | |
| SystemProcessInformation = 5, | | SystemProcessInformation = 5, | |
| | | | |
| skipping to change at line 366 | | skipping to change at line 520 | |
| int plibc_conv_to_win_path(const char *pszUnix, char *pszWindows); | | int plibc_conv_to_win_path(const char *pszUnix, char *pszWindows); | |
| int plibc_conv_to_win_pathw(const wchar_t *pszUnix, wchar_t *pwszWindows); | | int plibc_conv_to_win_pathw(const wchar_t *pszUnix, wchar_t *pwszWindows); | |
| | | | |
| int plibc_conv_to_win_pathwconv(const char *pszUnix, wchar_t *pwszWindows); | | int plibc_conv_to_win_pathwconv(const char *pszUnix, wchar_t *pwszWindows); | |
| int plibc_conv_to_win_pathwconv_ex(const char *pszUnix, wchar_t *pszWindows
, int derefLinks); | | int plibc_conv_to_win_pathwconv_ex(const char *pszUnix, wchar_t *pszWindows
, int derefLinks); | |
| | | | |
| unsigned plibc_get_handle_count(); | | unsigned plibc_get_handle_count(); | |
| | | | |
| typedef void (*TPanicProc) (int, char *); | | typedef void (*TPanicProc) (int, char *); | |
| void plibc_set_panic_proc(TPanicProc proc); | | void plibc_set_panic_proc(TPanicProc proc); | |
|
| | | void plibc_set_stat_size_size(int iLength); | |
| | | void plibc_set_stat_time_size(int iLength); | |
| | | | |
| int flock(int fd, int operation); | | int flock(int fd, int operation); | |
| int fsync(int fildes); | | int fsync(int fildes); | |
| int inet_pton(int af, const char *src, void *dst); | | int inet_pton(int af, const char *src, void *dst); | |
| int inet_pton4(const char *src, u_char *dst, int pton); | | int inet_pton4(const char *src, u_char *dst, int pton); | |
| #if USE_IPV6 | | #if USE_IPV6 | |
| int inet_pton6(const char *src, u_char *dst); | | int inet_pton6(const char *src, u_char *dst); | |
| #endif | | #endif | |
|
| int truncate(const char *fname, int distance); | | | |
| int statfs(const char *path, struct statfs *buf); | | int statfs(const char *path, struct statfs *buf); | |
| const char *hstrerror(int err); | | const char *hstrerror(int err); | |
| int mkstemp(char *tmplate); | | int mkstemp(char *tmplate); | |
| char *strptime (const char *buf, const char *format, struct tm *tm); | | char *strptime (const char *buf, const char *format, struct tm *tm); | |
| const char *inet_ntop(int af, const void *src, char *dst, size_t size); | | const char *inet_ntop(int af, const void *src, char *dst, size_t size); | |
|
| | | #ifndef gmtime_r | |
| struct tm *gmtime_r(const time_t *clock, struct tm *result); | | struct tm *gmtime_r(const time_t *clock, struct tm *result); | |
|
| | | #endif | |
| | | | |
| int plibc_init(char *pszOrg, char *pszApp); | | int plibc_init(char *pszOrg, char *pszApp); | |
| int plibc_init_utf8(char *pszOrg, char *pszApp, int utf8_mode); | | int plibc_init_utf8(char *pszOrg, char *pszApp, int utf8_mode); | |
| void plibc_shutdown(); | | void plibc_shutdown(); | |
| int plibc_initialized(); | | int plibc_initialized(); | |
| | | | |
| void _SetErrnoFromWinError(long lWinError, char *pszCaller, int iLine); | | void _SetErrnoFromWinError(long lWinError, char *pszCaller, int iLine); | |
| void SetErrnoFromWinsockError(long lWinError); | | void SetErrnoFromWinsockError(long lWinError); | |
| void SetHErrnoFromWinError(long lWinError); | | void SetHErrnoFromWinError(long lWinError); | |
| void SetErrnoFromHRESULT(HRESULT hRes); | | void SetErrnoFromHRESULT(HRESULT hRes); | |
| | | | |
| skipping to change at line 408 | | skipping to change at line 565 | |
| #ifdef ENABLE_NLS | | #ifdef ENABLE_NLS | |
| char *_win_bindtextdomain(const char *domainname, const char *dirname); | | char *_win_bindtextdomain(const char *domainname, const char *dirname); | |
| #endif | | #endif | |
| int _win_chdir(const char *path); | | int _win_chdir(const char *path); | |
| int _win_close(int fd); | | int _win_close(int fd); | |
| int _win_creat(const char *path, mode_t mode); | | int _win_creat(const char *path, mode_t mode); | |
| char *_win_ctime(const time_t *clock); | | char *_win_ctime(const time_t *clock); | |
| char *_win_ctime_r(const time_t *clock, char *buf); | | char *_win_ctime_r(const time_t *clock, char *buf); | |
| int _win_fstat(int handle, struct stat *buffer); | | int _win_fstat(int handle, struct stat *buffer); | |
| int _win_ftruncate(int fildes, off_t length); | | int _win_ftruncate(int fildes, off_t length); | |
|
| void _win_gettimeofday(struct timeval *tp, void *tzp); | | int _win_truncate(const char *fname, int distance); | |
| int _win_kill(pid_t pid, int sig); | | int _win_kill(pid_t pid, int sig); | |
| int _win_pipe(int *phandles); | | int _win_pipe(int *phandles); | |
|
| | | intptr_t _win_mkfifo(const char *path, mode_t mode); | |
| int _win_rmdir(const char *path); | | int _win_rmdir(const char *path); | |
| int _win_access( const char *path, int mode ); | | int _win_access( const char *path, int mode ); | |
| int _win_chmod(const char *filename, int pmode); | | int _win_chmod(const char *filename, int pmode); | |
| char *realpath(const char *file_name, char *resolved_name); | | char *realpath(const char *file_name, char *resolved_name); | |
| long _win_random(void); | | long _win_random(void); | |
| void _win_srandom(unsigned int seed); | | void _win_srandom(unsigned int seed); | |
| int _win_remove(const char *path); | | int _win_remove(const char *path); | |
| int _win_rename(const char *oldname, const char *newname); | | int _win_rename(const char *oldname, const char *newname); | |
| int _win_stat(const char *path, struct stat *buffer); | | int _win_stat(const char *path, struct stat *buffer); | |
|
| int _win_stat64(const char *path, struct stat64 *buffer); | | int _win_stati64(const char *path, struct _stati64 *buffer); | |
| long _win_sysconf(int name); | | long _win_sysconf(int name); | |
| int _win_unlink(const char *filename); | | int _win_unlink(const char *filename); | |
| int _win_write(int fildes, const void *buf, size_t nbyte); | | int _win_write(int fildes, const void *buf, size_t nbyte); | |
| int _win_read(int fildes, void *buf, size_t nbyte); | | int _win_read(int fildes, void *buf, size_t nbyte); | |
| size_t _win_fwrite(const void *buffer, size_t size, size_t count, FILE *str
eam); | | size_t _win_fwrite(const void *buffer, size_t size, size_t count, FILE *str
eam); | |
| size_t _win_fread( void *buffer, size_t size, size_t count, FILE *stream ); | | size_t _win_fread( void *buffer, size_t size, size_t count, FILE *stream ); | |
| int _win_symlink(const char *path1, const char *path2); | | int _win_symlink(const char *path1, const char *path2); | |
| void *_win_mmap(void *start, size_t len, int access, int flags, int fd, | | void *_win_mmap(void *start, size_t len, int access, int flags, int fd, | |
| unsigned long long offset); | | unsigned long long offset); | |
| int _win_msync(void *start, size_t length, int flags); | | int _win_msync(void *start, size_t length, int flags); | |
| int _win_munmap(void *start, size_t length); | | int _win_munmap(void *start, size_t length); | |
| int _win_lstat(const char *path, struct stat *buf); | | int _win_lstat(const char *path, struct stat *buf); | |
|
| int _win_lstat64(const char *path, struct stat64 *buf); | | int _win_lstati64(const char *path, struct _stati64 *buf); | |
| int _win_readlink(const char *path, char *buf, size_t bufsize); | | int _win_readlink(const char *path, char *buf, size_t bufsize); | |
| int _win_accept(int s, struct sockaddr *addr, int *addrlen); | | int _win_accept(int s, struct sockaddr *addr, int *addrlen); | |
| | | | |
|
| int _win_printf(const char *format,...); | | | |
| int _win_wprintf(const wchar_t *format, ...); | | | |
| | | | |
| int _win_fprintf(FILE *f,const char *format,...); | | | |
| int _win_fwprintf(FILE *f,const wchar_t *format, ...); | | | |
| | | | |
| int _win_vprintf(const char *format, va_list ap); | | | |
| int _win_vfwprintf(FILE *stream, const wchar_t *format, va_list arg_ptr); | | | |
| | | | |
| int _win_vfprintf(FILE *stream, const char *format, va_list arg_ptr); | | | |
| int _win_vwprintf(const wchar_t *format, va_list ap); | | | |
| | | | |
| int _win_vsprintf(char *dest,const char *format, va_list arg_ptr); | | | |
| int _win_vswprintf(wchar_t *dest, const wchar_t *format, va_list arg_ptr); | | | |
| | | | |
| int _win_vsnprintf(char* str, size_t size, const char *format, va_list arg_ | | | |
| ptr); | | | |
| int _win_vsnwprintf(wchar_t* wstr, size_t size, const wchar_t *format, va_l | | | |
| ist arg_ptr); | | | |
| | | | |
| int _win_snprintf(char *str,size_t size,const char *format,...); | | | |
| int _win_snwprintf(wchar_t *str, size_t size, const wchar_t *format, ...); | | | |
| | | | |
| int _win_sprintf(char *dest,const char *format,...); | | | |
| int _win_swprintf(wchar_t *dest, const wchar_t *format, ...); | | | |
| | | | |
| int _win_vsscanf(const char* str, const char* format, va_list arg_ptr); | | | |
| int _win_vswscanf(const wchar_t* wstr, const wchar_t* format, va_list arg_p | | | |
| tr); | | | |
| | | | |
| int _win_sscanf(const char *str, const char *format, ...); | | | |
| int _win_swscanf(const wchar_t *wstr, const wchar_t *format, ...); | | | |
| | | | |
| int _win_vfscanf(FILE *stream, const char *format, va_list arg_ptr); | | | |
| int _win_vfwscanf(FILE *stream, const wchar_t *format, va_list arg_ptr); | | | |
| | | | |
| int _win_vscanf(const char *format, va_list arg_ptr); | | | |
| int _win_vwscanf(const wchar_t *format, va_list arg_ptr); | | | |
| | | | |
| int _win_scanf(const char *format, ...); | | | |
| int _win_wscanf(const wchar_t *format, ...); | | | |
| | | | |
| int _win_fscanf(FILE *stream, const char *format, ...); | | | |
| int _win_fwscanf(FILE *stream, const wchar_t *format, ...); | | | |
| | | | |
| pid_t _win_waitpid(pid_t pid, int *stat_loc, int options); | | pid_t _win_waitpid(pid_t pid, int *stat_loc, int options); | |
| int _win_bind(int s, const struct sockaddr *name, int namelen); | | int _win_bind(int s, const struct sockaddr *name, int namelen); | |
| int _win_connect(int s,const struct sockaddr *name, int namelen); | | int _win_connect(int s,const struct sockaddr *name, int namelen); | |
| int _win_getpeername(int s, struct sockaddr *name, | | int _win_getpeername(int s, struct sockaddr *name, | |
| int *namelen); | | int *namelen); | |
| int _win_getsockname(int s, struct sockaddr *name, | | int _win_getsockname(int s, struct sockaddr *name, | |
| int *namelen); | | int *namelen); | |
| int _win_getsockopt(int s, int level, int optname, char *optval, | | int _win_getsockopt(int s, int level, int optname, char *optval, | |
| int *optlen); | | int *optlen); | |
| int _win_listen(int s, int backlog); | | int _win_listen(int s, int backlog); | |
| | | | |
| skipping to change at line 501 | | skipping to change at line 617 | |
| struct sockaddr *from, int *fromlen); | | struct sockaddr *from, int *fromlen); | |
| int _win_select(int max_fd, fd_set * rfds, fd_set * wfds, fd_set * efds, | | int _win_select(int max_fd, fd_set * rfds, fd_set * wfds, fd_set * efds, | |
| const struct timeval *tv); | | const struct timeval *tv); | |
| int _win_send(int s, const char *buf, int len, int flags); | | int _win_send(int s, const char *buf, int len, int flags); | |
| int _win_sendto(int s, const char *buf, int len, int flags, | | int _win_sendto(int s, const char *buf, int len, int flags, | |
| const struct sockaddr *to, int tolen); | | const struct sockaddr *to, int tolen); | |
| int _win_setsockopt(int s, int level, int optname, const void *optval, | | int _win_setsockopt(int s, int level, int optname, const void *optval, | |
| int optlen); | | int optlen); | |
| int _win_shutdown(int s, int how); | | int _win_shutdown(int s, int how); | |
| int _win_socket(int af, int type, int protocol); | | int _win_socket(int af, int type, int protocol); | |
|
| | | int _win_socketpair(int af, int type, int protocol, int socket_vector[2]); | |
| struct hostent *_win_gethostbyaddr(const char *addr, int len, int type); | | struct hostent *_win_gethostbyaddr(const char *addr, int len, int type); | |
| struct hostent *_win_gethostbyname(const char *name); | | struct hostent *_win_gethostbyname(const char *name); | |
| struct hostent *gethostbyname2(const char *name, int af); | | struct hostent *gethostbyname2(const char *name, int af); | |
| char *_win_strerror(int errnum); | | char *_win_strerror(int errnum); | |
| int IsWinNT(); | | int IsWinNT(); | |
| char *index(const char *s, int c); | | char *index(const char *s, int c); | |
|
| | | char *_win_strtok_r (char *ptr, const char *sep, char **end); | |
| | | | |
| #if !HAVE_STRNDUP | | #if !HAVE_STRNDUP | |
| char *strndup (const char *s, size_t n); | | char *strndup (const char *s, size_t n); | |
| #endif | | #endif | |
|
| #if !HAVE_STRNLEN | | #if !HAVE_STRNLEN && (!defined(__MINGW64_VERSION_MAJOR) || !defined(_INC_ST
RING)) | |
| size_t strnlen (const char *str, size_t maxlen); | | size_t strnlen (const char *str, size_t maxlen); | |
| #endif | | #endif | |
| char *stpcpy(char *dest, const char *src); | | char *stpcpy(char *dest, const char *src); | |
| char *strcasestr(const char *haystack_start, const char *needle_start); | | char *strcasestr(const char *haystack_start, const char *needle_start); | |
|
| #ifndef __MINGW64__ | | #ifndef __MINGW64_VERSION_MAJOR | |
| #define strcasecmp(a, b) stricmp(a, b) | | #define strcasecmp(a, b) stricmp(a, b) | |
|
| #define wcscasecmp(a, b) wcsicmp(a, b) | | | |
| #define strncasecmp(a, b, c) strnicmp(a, b, c) | | #define strncasecmp(a, b, c) strnicmp(a, b, c) | |
|
| | | #endif | |
| | | #ifndef wcscasecmp | |
| | | #define wcscasecmp(a, b) wcsicmp(a, b) | |
| | | #endif | |
| | | #ifndef wcsncasecmp | |
| #define wcsncasecmp(a, b, c) wcsnicmp(a, b, c) | | #define wcsncasecmp(a, b, c) wcsnicmp(a, b, c) | |
| #endif | | #endif | |
|
| | | #ifndef strtok_r /* winpthreads defines it in pthread.h */ | |
| | | #define strtok_r _win_strtok_r | |
| | | #endif | |
| #endif /* WINDOWS */ | | #endif /* WINDOWS */ | |
| | | | |
| #ifndef WINDOWS | | #ifndef WINDOWS | |
| #define DIR_SEPARATOR '/' | | #define DIR_SEPARATOR '/' | |
| #define DIR_SEPARATOR_STR "/" | | #define DIR_SEPARATOR_STR "/" | |
| #define PATH_SEPARATOR ':' | | #define PATH_SEPARATOR ':' | |
| #define PATH_SEPARATOR_STR ":" | | #define PATH_SEPARATOR_STR ":" | |
| #define NEWLINE "\n" | | #define NEWLINE "\n" | |
| | | | |
| #ifdef ENABLE_NLS | | #ifdef ENABLE_NLS | |
| #define BINDTEXTDOMAIN(d, n) bindtextdomain(d, n) | | #define BINDTEXTDOMAIN(d, n) bindtextdomain(d, n) | |
| #endif | | #endif | |
| #define CREAT(p, m) creat(p, m) | | #define CREAT(p, m) creat(p, m) | |
| #define PLIBC_CTIME(c) ctime(c) | | #define PLIBC_CTIME(c) ctime(c) | |
| #define CTIME_R(c, b) ctime_r(c, b) | | #define CTIME_R(c, b) ctime_r(c, b) | |
| #undef FOPEN | | #undef FOPEN | |
| #define FOPEN(f, m) fopen(f, m) | | #define FOPEN(f, m) fopen(f, m) | |
| #define FCLOSE(f) fclose(f) | | #define FCLOSE(f) fclose(f) | |
| #define FTRUNCATE(f, l) ftruncate(f, l) | | #define FTRUNCATE(f, l) ftruncate(f, l) | |
|
| | | #define TRUNCATE(f, l) truncate(f, l) | |
| #define OPENDIR(d) opendir(d) | | #define OPENDIR(d) opendir(d) | |
| #define CLOSEDIR(d) closedir(d) | | #define CLOSEDIR(d) closedir(d) | |
| #define READDIR(d) readdir(d) | | #define READDIR(d) readdir(d) | |
| #define OPEN open | | #define OPEN open | |
| #define CHDIR(d) chdir(d) | | #define CHDIR(d) chdir(d) | |
| #define CLOSE(f) close(f) | | #define CLOSE(f) close(f) | |
| #define LSEEK(f, o, w) lseek(f, o, w) | | #define LSEEK(f, o, w) lseek(f, o, w) | |
| #define RMDIR(f) rmdir(f) | | #define RMDIR(f) rmdir(f) | |
| #define ACCESS(p, m) access(p, m) | | #define ACCESS(p, m) access(p, m) | |
| #define CHMOD(f, p) chmod(f, p) | | #define CHMOD(f, p) chmod(f, p) | |
| | | | |
| skipping to change at line 605 | | skipping to change at line 731 | |
| #define GETSOCKOPT(s, l, o, v, p) getsockopt(s, l, o, v, p) | | #define GETSOCKOPT(s, l, o, v, p) getsockopt(s, l, o, v, p) | |
| #define LISTEN(s, b) listen(s, b) | | #define LISTEN(s, b) listen(s, b) | |
| #define RECV(s, b, l, f) recv(s, b, l, f) | | #define RECV(s, b, l, f) recv(s, b, l, f) | |
| #define RECVFROM(s, b, l, f, r, o) recvfrom(s, b, l, f, r, o) | | #define RECVFROM(s, b, l, f, r, o) recvfrom(s, b, l, f, r, o) | |
| #define SELECT(n, r, w, e, t) select(n, r, w, e, t) | | #define SELECT(n, r, w, e, t) select(n, r, w, e, t) | |
| #define SEND(s, b, l, f) send(s, b, l, f) | | #define SEND(s, b, l, f) send(s, b, l, f) | |
| #define SENDTO(s, b, l, f, o, n) sendto(s, b, l, f, o, n) | | #define SENDTO(s, b, l, f, o, n) sendto(s, b, l, f, o, n) | |
| #define SETSOCKOPT(s, l, o, v, n) setsockopt(s, l, o, v, n) | | #define SETSOCKOPT(s, l, o, v, n) setsockopt(s, l, o, v, n) | |
| #define SHUTDOWN(s, h) shutdown(s, h) | | #define SHUTDOWN(s, h) shutdown(s, h) | |
| #define SOCKET(a, t, p) socket(a, t, p) | | #define SOCKET(a, t, p) socket(a, t, p) | |
|
| #define GETHOSTBYADDR(a, l, t) gethostbyname(a, l, t) | | #define SOCKETPAIR(a, t, p, v) socketpair(a, t, p, v) | |
| | | #define GETHOSTBYADDR(a, l, t) gethostbyaddr(a, l, t) | |
| #define GETHOSTBYNAME(n) gethostbyname(n) | | #define GETHOSTBYNAME(n) gethostbyname(n) | |
| #define GETTIMEOFDAY(t, n) gettimeofday(t, n) | | #define GETTIMEOFDAY(t, n) gettimeofday(t, n) | |
| #define INSQUE(e, p) insque(e, p) | | #define INSQUE(e, p) insque(e, p) | |
| #define REMQUE(e) remque(e) | | #define REMQUE(e) remque(e) | |
| #define HSEARCH(i, a) hsearch(i, a) | | #define HSEARCH(i, a) hsearch(i, a) | |
| #define HCREATE(n) hcreate(n) | | #define HCREATE(n) hcreate(n) | |
| #define HDESTROY() hdestroy() | | #define HDESTROY() hdestroy() | |
| #define HSEARCH_R(i, a, r, h) hsearch_r(i, a, r, h) | | #define HSEARCH_R(i, a, r, h) hsearch_r(i, a, r, h) | |
| #define HCREATE_R(n, h) hcreate_r(n, h) | | #define HCREATE_R(n, h) hcreate_r(n, h) | |
| #define HDESTROY_R(h) hdestroy_r(h) | | #define HDESTROY_R(h) hdestroy_r(h) | |
| #define TSEARCH(k, r, c) tsearch(k, r, c) | | #define TSEARCH(k, r, c) tsearch(k, r, c) | |
| #define TFIND(k, r, c) tfind(k, r, c) | | #define TFIND(k, r, c) tfind(k, r, c) | |
| #define TDELETE(k, r, c) tdelete(k, r, c) | | #define TDELETE(k, r, c) tdelete(k, r, c) | |
| #define TWALK(r, a) twalk(r, a) | | #define TWALK(r, a) twalk(r, a) | |
| #define TDESTROY(r, f) tdestroy(r, f) | | #define TDESTROY(r, f) tdestroy(r, f) | |
| #define LFIND(k, b, n, s, c) lfind(k, b, n, s, c) | | #define LFIND(k, b, n, s, c) lfind(k, b, n, s, c) | |
| #define LSEARCH(k, b, n, s, c) lsearch(k, b, n, s, c) | | #define LSEARCH(k, b, n, s, c) lsearch(k, b, n, s, c) | |
|
| | | #define STRUCT_STAT64 struct stat64 | |
| #else | | #else | |
| #define DIR_SEPARATOR '\\' | | #define DIR_SEPARATOR '\\' | |
| #define DIR_SEPARATOR_STR "\\" | | #define DIR_SEPARATOR_STR "\\" | |
| #define PATH_SEPARATOR ';' | | #define PATH_SEPARATOR ';' | |
| #define PATH_SEPARATOR_STR ";" | | #define PATH_SEPARATOR_STR ";" | |
| #define NEWLINE "\r\n" | | #define NEWLINE "\r\n" | |
| | | | |
| #ifdef ENABLE_NLS | | #ifdef ENABLE_NLS | |
| #define BINDTEXTDOMAIN(d, n) _win_bindtextdomain(d, n) | | #define BINDTEXTDOMAIN(d, n) _win_bindtextdomain(d, n) | |
| #endif | | #endif | |
| #define CREAT(p, m) _win_creat(p, m) | | #define CREAT(p, m) _win_creat(p, m) | |
| #define PLIBC_CTIME(c) _win_ctime(c) | | #define PLIBC_CTIME(c) _win_ctime(c) | |
| #define CTIME_R(c, b) _win_ctime_r(c, b) | | #define CTIME_R(c, b) _win_ctime_r(c, b) | |
| #define FOPEN(f, m) _win_fopen(f, m) | | #define FOPEN(f, m) _win_fopen(f, m) | |
| #define FCLOSE(f) _win_fclose(f) | | #define FCLOSE(f) _win_fclose(f) | |
| #define FTRUNCATE(f, l) _win_ftruncate(f, l) | | #define FTRUNCATE(f, l) _win_ftruncate(f, l) | |
|
| | | #define TRUNCATE(f, l) _win_truncate(f, l) | |
| #define OPENDIR(d) _win_opendir(d) | | #define OPENDIR(d) _win_opendir(d) | |
| #define CLOSEDIR(d) _win_closedir(d) | | #define CLOSEDIR(d) _win_closedir(d) | |
| #define READDIR(d) _win_readdir(d) | | #define READDIR(d) _win_readdir(d) | |
| #define OPEN _win_open | | #define OPEN _win_open | |
| #define CHDIR(d) _win_chdir(d) | | #define CHDIR(d) _win_chdir(d) | |
| #define CLOSE(f) _win_close(f) | | #define CLOSE(f) _win_close(f) | |
| #define PLIBC_KILL(p, s) _win_kill(p, s) | | #define PLIBC_KILL(p, s) _win_kill(p, s) | |
|
| #define LSEEK(f, o, w) _win_lseek(f, o, w) | | #define LSEEK(f, o, w) lseek(f, o, w) | |
| #define FSTAT(h, b) _win_fstat(h, b) | | #define FSTAT(h, b) _win_fstat(h, b) | |
| #define RMDIR(f) _win_rmdir(f) | | #define RMDIR(f) _win_rmdir(f) | |
| #define ACCESS(p, m) _win_access(p, m) | | #define ACCESS(p, m) _win_access(p, m) | |
| #define CHMOD(f, p) _win_chmod(f, p) | | #define CHMOD(f, p) _win_chmod(f, p) | |
| #define PIPE(h) _win_pipe(h) | | #define PIPE(h) _win_pipe(h) | |
| #define RANDOM() _win_random() | | #define RANDOM() _win_random() | |
| #define SRANDOM(s) _win_srandom(s) | | #define SRANDOM(s) _win_srandom(s) | |
| #define REMOVE(p) _win_remove(p) | | #define REMOVE(p) _win_remove(p) | |
| #define RENAME(o, n) _win_rename(o, n) | | #define RENAME(o, n) _win_rename(o, n) | |
| #define STAT(p, b) _win_stat(p, b) | | #define STAT(p, b) _win_stat(p, b) | |
|
| #define STAT64(p, b) _win_stat64(p, b) | | #define STAT64(p, b) _win_stati64(p, b) | |
| #define SYSCONF(n) _win_sysconf(n) | | #define SYSCONF(n) _win_sysconf(n) | |
| #define UNLINK(f) _win_unlink(f) | | #define UNLINK(f) _win_unlink(f) | |
| #define WRITE(f, b, n) _win_write(f, b, n) | | #define WRITE(f, b, n) _win_write(f, b, n) | |
| #define READ(f, b, n) _win_read(f, b, n) | | #define READ(f, b, n) _win_read(f, b, n) | |
| #define GN_FREAD(b, s, c, f) _win_fread(b, s, c, f) | | #define GN_FREAD(b, s, c, f) _win_fread(b, s, c, f) | |
| #define GN_FWRITE(b, s, c, f) _win_fwrite(b, s, c, f) | | #define GN_FWRITE(b, s, c, f) _win_fwrite(b, s, c, f) | |
| #define SYMLINK(a, b) _win_symlink(a, b) | | #define SYMLINK(a, b) _win_symlink(a, b) | |
| #define MMAP(s, l, p, f, d, o) _win_mmap(s, l, p, f, d, o) | | #define MMAP(s, l, p, f, d, o) _win_mmap(s, l, p, f, d, o) | |
| #define MKFIFO(p, m) _win_mkfifo(p, m) | | #define MKFIFO(p, m) _win_mkfifo(p, m) | |
| #define MSYNC(s, l, f) _win_msync(s, l, f) | | #define MSYNC(s, l, f) _win_msync(s, l, f) | |
| #define MUNMAP(s, l) _win_munmap(s, l) | | #define MUNMAP(s, l) _win_munmap(s, l) | |
| #define STRERROR(i) _win_strerror(i) | | #define STRERROR(i) _win_strerror(i) | |
| #define READLINK(p, b, s) _win_readlink(p, b, s) | | #define READLINK(p, b, s) _win_readlink(p, b, s) | |
| #define LSTAT(p, b) _win_lstat(p, b) | | #define LSTAT(p, b) _win_lstat(p, b) | |
|
| #define LSTAT64(p, b) _win_lstat64(p, b) | | #define LSTAT64(p, b) _win_lstati64(p, b) | |
| #define PRINTF(f, ...) _win_printf(f , __VA_ARGS__) | | #define PRINTF printf | |
| #define FPRINTF(fil, fmt, ...) _win_fprintf(fil, fmt, __VA_ARGS__) | | #define FPRINTF fprintf | |
| #define VPRINTF(f, a) _win_vprintf(f, a) | | #define VPRINTF(f, a) vprintf(f, a) | |
| #define VFPRINTF(s, f, a) _win_vfprintf(s, f, a) | | #define VFPRINTF(s, f, a) vfprintf(s, f, a) | |
| #define VSPRINTF(d, f, a) _win_vsprintf(d, f, a) | | #define VSPRINTF(d, f, a) vsprintf(d, f, a) | |
| #define VSNPRINTF(str, size, fmt, a) _win_vsnprintf(str, size, fmt, a) | | #define VSNPRINTF(str, size, fmt, a) vsnprintf(str, size, fmt, a) | |
| #define _REAL_SNPRINTF(str, size, fmt, ...) _win_snprintf(str, size, fmt, | | #define _REAL_SNPRINTF snprintf | |
| __VA_ARGS__) | | #define SPRINTF sprintf | |
| #define SPRINTF(d, f, ...) _win_sprintf(d, f, __VA_ARGS__) | | #define VSSCANF(s, f, a) vsscanf(s, f, a) | |
| #define VSSCANF(s, f, a) _win_vsscanf(s, f, a) | | #define SSCANF sscanf | |
| #define SSCANF(s, f, ...) _win_sscanf(s, f, __VA_ARGS__) | | #define VFSCANF(s, f, a) vfscanf(s, f, a) | |
| #define VFSCANF(s, f, a) _win_vfscanf(s, f, a) | | #define VSCANF(f, a) vscanf(f, a) | |
| #define VSCANF(f, a) _win_vscanf(f, a) | | #define SCANF scanf | |
| #define SCANF(f, ...) _win_scanf(f, __VA_ARGS__) | | #define FSCANF fscanf | |
| #define FSCANF(s, f, ...) _win_fscanf(s, f, __VA_ARGS__) | | | |
| #define WAITPID(p, s, o) _win_waitpid(p, s, o) | | #define WAITPID(p, s, o) _win_waitpid(p, s, o) | |
| #define ACCEPT(s, a, l) _win_accept(s, a, l) | | #define ACCEPT(s, a, l) _win_accept(s, a, l) | |
| #define BIND(s, n, l) _win_bind(s, n, l) | | #define BIND(s, n, l) _win_bind(s, n, l) | |
| #define CONNECT(s, n, l) _win_connect(s, n, l) | | #define CONNECT(s, n, l) _win_connect(s, n, l) | |
| #define GETPEERNAME(s, n, l) _win_getpeername(s, n, l) | | #define GETPEERNAME(s, n, l) _win_getpeername(s, n, l) | |
| #define GETSOCKNAME(s, n, l) _win_getsockname(s, n, l) | | #define GETSOCKNAME(s, n, l) _win_getsockname(s, n, l) | |
| #define GETSOCKOPT(s, l, o, v, p) _win_getsockopt(s, l, o, v, p) | | #define GETSOCKOPT(s, l, o, v, p) _win_getsockopt(s, l, o, v, p) | |
| #define LISTEN(s, b) _win_listen(s, b) | | #define LISTEN(s, b) _win_listen(s, b) | |
| #define RECV(s, b, l, f) _win_recv(s, b, l, f) | | #define RECV(s, b, l, f) _win_recv(s, b, l, f) | |
| #define RECVFROM(s, b, l, f, r, o) _win_recvfrom(s, b, l, f, r, o) | | #define RECVFROM(s, b, l, f, r, o) _win_recvfrom(s, b, l, f, r, o) | |
| #define SELECT(n, r, w, e, t) _win_select(n, r, w, e, t) | | #define SELECT(n, r, w, e, t) _win_select(n, r, w, e, t) | |
| #define SEND(s, b, l, f) _win_send(s, b, l, f) | | #define SEND(s, b, l, f) _win_send(s, b, l, f) | |
| #define SENDTO(s, b, l, f, o, n) _win_sendto(s, b, l, f, o, n) | | #define SENDTO(s, b, l, f, o, n) _win_sendto(s, b, l, f, o, n) | |
| #define SETSOCKOPT(s, l, o, v, n) _win_setsockopt(s, l, o, v, n) | | #define SETSOCKOPT(s, l, o, v, n) _win_setsockopt(s, l, o, v, n) | |
| #define SHUTDOWN(s, h) _win_shutdown(s, h) | | #define SHUTDOWN(s, h) _win_shutdown(s, h) | |
| #define SOCKET(a, t, p) _win_socket(a, t, p) | | #define SOCKET(a, t, p) _win_socket(a, t, p) | |
|
| #define GETHOSTBYADDR(a, l, t) _win_gethostbyname(a, l, t) | | #define SOCKETPAIR(a, t, p, v) _win_socketpair(a, t, p, v) | |
| | | #define GETHOSTBYADDR(a, l, t) _win_gethostbyaddr(a, l, t) | |
| #define GETHOSTBYNAME(n) _win_gethostbyname(n) | | #define GETHOSTBYNAME(n) _win_gethostbyname(n) | |
|
| #define GETTIMEOFDAY(t, n) _win_gettimeofday(t, n) | | #define GETTIMEOFDAY(t, n) gettimeofday(t, n) | |
| #define INSQUE(e, p) _win_insque(e, p) | | #define INSQUE(e, p) _win_insque(e, p) | |
| #define REMQUE(e) _win_remque(e) | | #define REMQUE(e) _win_remque(e) | |
| #define HSEARCH(i, a) _win_hsearch(i, a) | | #define HSEARCH(i, a) _win_hsearch(i, a) | |
| #define HCREATE(n) _win_hcreate(n) | | #define HCREATE(n) _win_hcreate(n) | |
| #define HDESTROY() _win_hdestroy() | | #define HDESTROY() _win_hdestroy() | |
| #define HSEARCH_R(i, a, r, h) _win_hsearch_r(i, a, r, h) | | #define HSEARCH_R(i, a, r, h) _win_hsearch_r(i, a, r, h) | |
| #define HCREATE_R(n, h) _win_hcreate_r(n, h) | | #define HCREATE_R(n, h) _win_hcreate_r(n, h) | |
| #define HDESTROY_R(h) _win_hdestroy_r(h) | | #define HDESTROY_R(h) _win_hdestroy_r(h) | |
| #define TSEARCH(k, r, c) _win_tsearch(k, r, c) | | #define TSEARCH(k, r, c) _win_tsearch(k, r, c) | |
| #define TFIND(k, r, c) _win_tfind(k, r, c) | | #define TFIND(k, r, c) _win_tfind(k, r, c) | |
| #define TDELETE(k, r, c) _win_tdelete(k, r, c) | | #define TDELETE(k, r, c) _win_tdelete(k, r, c) | |
| #define TWALK(r, a) _win_twalk(r, a) | | #define TWALK(r, a) _win_twalk(r, a) | |
| #define TDESTROY(r, f) _win_tdestroy(r, f) | | #define TDESTROY(r, f) _win_tdestroy(r, f) | |
| #define LFIND(k, b, n, s, c) _win_lfind(k, b, n, s, c) | | #define LFIND(k, b, n, s, c) _win_lfind(k, b, n, s, c) | |
| #define LSEARCH(k, b, n, s, c) _win_lsearch(k, b, n, s, c) | | #define LSEARCH(k, b, n, s, c) _win_lsearch(k, b, n, s, c) | |
|
| | | #define STRUCT_STAT64 struct _stati64 | |
| #endif | | #endif | |
| | | | |
| /* search.h */ | | /* search.h */ | |
| | | | |
| /* Prototype structure for a linked-list data structure. | | /* Prototype structure for a linked-list data structure. | |
| This is the type used by the `insque' and `remque' functions. */ | | This is the type used by the `insque' and `remque' functions. */ | |
| | | | |
| struct PLIBC_SEARCH_QELEM | | struct PLIBC_SEARCH_QELEM | |
| { | | { | |
| struct qelem *q_forw; | | struct qelem *q_forw; | |
| | | | |
End of changes. 32 change blocks. |
| 178 lines changed or deleted | | 307 lines changed or added | |
|