cleanup: merge packet_id_alloc_outgoing() into packet_id_write()
PATCH 2/3 cleanup: merge packet_id_alloc_outgoing() into packet_id_write()
From: Steffan Karger <[email protected]...>
The functions packet_id_alloc_outgoing() and packet_id_write() were always called in tandem. Instead of forcing the caller to allocate a packet_id_net to do so, merge the two functions. This simplifies the API and reduces the chance on mistakes in the future.
This patch was cherry-picked from 5d747770 (release/2.3), with the unit tests removed because release/2.2 does not have unit tests.
Signed-off-by Steffan Karger <[email protected]...>
--- crypto.c | 12 +++--------- packet_id.c | 24 +++++++++++++++++++++--- packet_id.h | 34 +++++++++++++--------------------- 3 files changed, 37 insertions(+), 33 deletions(-)
crypto.c +3 -9
@@ -119,23 +119,19 @@ openvpn_encrypt (struct buffer *buf, struct buffer work,/* Put packet ID in plaintext buffer or IV, depending on cipher mode */ if (opt->packet_id) { -struct packet_id_net pin; -packet_id_alloc_outgoing (&opt->packet_id->send, &pin,BOOL_CAST (opt->flags &CO_PACKET_ID_LONG_FORM )); -ASSERT (packet_id_write (&pin, buf,BOOL_CAST (opt->flags &CO_PACKET_ID_LONG_FORM ), true)); +ASSERT (packet_id_write (&opt->packet_id->send, buf,BOOL_CAST (opt->flags &CO_PACKET_ID_LONG_FORM ), true)); } }else if (mode ==EVP_CIPH_CFB_MODE || mode ==EVP_CIPH_OFB_MODE ) { -struct packet_id_net pin;struct buffer b;ASSERT (opt->flags &CO_USE_IV );/* IV and packet-ID required */ ASSERT (opt->packet_id);/* for this mode. */ -packet_id_alloc_outgoing (&opt->packet_id->send, &pin, true);memset (iv_buf,0 , iv_size);buf_set_write (&b, iv_buf, iv_size); -ASSERT (packet_id_write (&pin, &b, true, false)); +ASSERT (packet_id_write (&opt->packet_id->send, &b, true, false)); }else /* We only support CBC, CFB, or OFB modes right now */ {
@@ -193,9 +189,7 @@ openvpn_encrypt (struct buffer *buf, struct buffer work, {if (opt->packet_id) { -struct packet_id_net pin; -packet_id_alloc_outgoing (&opt->packet_id->send, &pin,BOOL_CAST (opt->flags &CO_PACKET_ID_LONG_FORM )); -ASSERT (packet_id_write (&pin, buf,BOOL_CAST (opt->flags &CO_PACKET_ID_LONG_FORM ), true)); +ASSERT (packet_id_write (&opt->packet_id->send, buf,BOOL_CAST (opt->flags &CO_PACKET_ID_LONG_FORM ), true)); } work = *buf; }
packet_id.c +21 -3
@@ -248,12 +248,30 @@ packet_id_read (struct packet_id_net *pin, struct buffer *buf, bool long_form)return true; } +static void +packet_id_send_update (struct packet_id_send *p,bool long_form) +{ +if (!p->time) + { + p->time = now; + } + p->id++; +if (!p->id) + { +ASSERT (long_form); + p->time = now; + p->id =1 ; + } +} +bool -packet_id_write (const struct packet_id_net *pin,struct buffer *buf,bool long_form,bool prepend) +packet_id_write (struct packet_id_send *p,struct buffer *buf,bool long_form, +bool prepend) { -packet_id_type net_id =htonpid (pin->id); -net_time_t net_time =htontime (pin->time); +packet_id_send_update (p, long_form); +const packet_id_type net_id =htonpid (p->id); +const net_time_t net_time =htontime (p->time);if (prepend) {if (long_form)
packet_id.h +13 -21
@@ -249,7 +249,19 @@ const char *packet_id_persist_print (const struct packet_id_persist *p, struct g*/ bool packet_id_read (struct packet_id_net *pin,struct buffer *buf,bool long_form); -bool packet_id_write (const struct packet_id_net *pin,struct buffer *buf,bool long_form,bool prepend); + +/** +* Write a packet ID to buf, and update the packet ID state. +* +* @param p Packet ID state. +* @param buf Buffer to write the packet ID too +* @param long_form If true, also update and write time_t to buf +* @param prepend If true, prepend to buffer, otherwise apppend. +* +* @return true if successful, false otherwise. +*/ +bool packet_id_write (struct packet_id_send *p,struct buffer *buf, +bool long_form,bool prepend);/* * Inline functions.
@@ -291,26 +303,6 @@ packet_id_close_to_wrapping (const struct packet_id_send *p)return p->id >=PACKET_ID_WRAP_TRIGGER ; } -/* -* Allocate an outgoing packet id. -* Sequence number ranges from 1 to 2^32-1. -* In long_form, a time_t is added as well. -*/ -static inline void -packet_id_alloc_outgoing (struct packet_id_send *p,struct packet_id_net *pin,bool long_form) -{ -if (!p->time) - p->time = now; - pin->id = ++p->id; -if (!pin->id) - { -ASSERT (long_form); - p->time = now; - pin->id = p->id =1 ; - } - pin->time = p->time; -} -static inline bool check_timestamp_delta (time_t remote,unsigned int max_delta) {
Signature · 1 line
2.7.4